summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorspiderr <spider@viovio.com>2011-05-03 00:00:20 -0400
committerspiderr <spider@viovio.com>2011-05-03 00:00:20 -0400
commit59c411475fd0689464c9dd043b0d34ce6001c1c1 (patch)
treec5d0bf0c4e29c22db5555a413be2bc35093c8741
parent0c629fd10a6ea3fc8be98a1f82de2bb16dad26cb (diff)
downloadlanguages-59c411475fd0689464c9dd043b0d34ce6001c1c1.tar.gz
languages-59c411475fd0689464c9dd043b0d34ce6001c1c1.tar.bz2
languages-59c411475fd0689464c9dd043b0d34ce6001c1c1.zip
add auto translate for master strings; genericize auto javascript; ajax returns null when translation == masterstring
-rw-r--r--admin/admin_languages_inc.php3
-rw-r--r--ajax_translate.php19
-rw-r--r--master_strings.php85
-rw-r--r--templates/admin_languages.tpl9
-rw-r--r--templates/language_master_strings.tpl27
-rw-r--r--templates/translate_google_ajax_inc.tpl44
-rw-r--r--templates/translate_strings.tpl53
7 files changed, 109 insertions, 131 deletions
diff --git a/admin/admin_languages_inc.php b/admin/admin_languages_inc.php
index 85bc746..643c658 100644
--- a/admin/admin_languages_inc.php
+++ b/admin/admin_languages_inc.php
@@ -53,6 +53,9 @@ if( isset( $_REQUEST["prefs"] )) {
}
global $gBitLanguage;
$gBitLanguage->setLanguage( $gBitSystem->getConfig( 'bitlanguage' ));
+
+ $gBitSystem->storeConfig( 'google_api_key', $_REQUEST['google_api_key'] );
+
} else {
$gBitSmarty->assign( "language", $gBitSystem->getConfig( "language", "en" ));
}
diff --git a/ajax_translate.php b/ajax_translate.php
index 400b658..cc0d668 100644
--- a/ajax_translate.php
+++ b/ajax_translate.php
@@ -7,8 +7,8 @@ $translation = NULL;
if( !empty( $_REQUEST['lang'] ) && !empty( $_REQUEST['source_hash'] ) ) {
if( $masterString = $gBitLanguage->getMasterString( $_REQUEST['source_hash'] ) ) {
- // convert smarty to tags so it is shielded from translation, escape <> tags with htmlentities before inserting our <smarty></smarty> wrappers
- $preppedMaster = preg_replace( '/\{/', '<smarty ', htmlentities( $masterString ) );
+ // convert smarty to tags so it is shielded from translation
+ $preppedMaster = preg_replace( '/\{/', '<smarty ', $masterString );
// needs to be a full tag so we can cleanly de-tagify after translation
$preppedMaster = preg_replace( '/}/', '></smarty>', $preppedMaster );
@@ -21,13 +21,14 @@ if( !empty( $_REQUEST['lang'] ) && !empty( $_REQUEST['source_hash'] ) ) {
}
if( !empty( $data->data->translations[0]->translatedText ) ) {
$translation = urldecode( $data->data->translations[0]->translatedText );
-
- //detagify
- $preppedTranslation = preg_replace( '/<smarty /', '{', $translation );
- // needs to be a full tag so we can cleanly de-tagify after translation
- $preppedTranslation = preg_replace( '/><\/smarty>/', '}', $preppedTranslation );
-
- print json_encode( array( 'source_hash' => $_REQUEST['source_hash'], 'translation' => html_entity_decode( $preppedTranslation ) ) );
+ if( $translation != $masterString ) {
+ //detagify
+ $preppedTranslation = preg_replace( '/<smarty /', '{', $translation );
+ // needs to be a full tag so we can cleanly de-tagify after translation
+ $preppedTranslation = preg_replace( '/><\/smarty>/', '}', $preppedTranslation );
+
+ print json_encode( array( 'lang_code' => $_REQUEST['lang'], 'source_hash' => $_REQUEST['source_hash'], 'translation' => $preppedTranslation ) );
+ }
}
}
}
diff --git a/master_strings.php b/master_strings.php
index 9e139ac..c88a824 100644
--- a/master_strings.php
+++ b/master_strings.php
@@ -19,7 +19,11 @@ $languages = $gBitLanguage->listLanguages();
$gBitSmarty->assign_by_ref( 'languages', $languages );
$feedback = $masterMsg = array();
-if( !empty( $_REQUEST['delete_master'] ) && !empty( $_REQUEST['source_hash'] ) && is_array( $_REQUEST['source_hash'] ) ) {
+if( !empty( $_REQUEST['source_hash'] ) && !is_array( $_REQUEST['source_hash'] ) ) {
+ $_REQUEST['source_hash'] = array( $_REQUEST['source_hash'] );
+}
+
+if( !empty( $_REQUEST['delete_master'] ) && !empty( $_REQUEST['source_hash'] ) ) {
if( empty( $_REQUEST['confirm'] ) ) {
$gBitSystem->setBrowserTitle( tra( 'Confirm Delete' ) );
$formHash['delete_master'] = TRUE;
@@ -30,7 +34,7 @@ if( !empty( $_REQUEST['delete_master'] ) && !empty( $_REQUEST['source_hash'] ) &
);
foreach( $_REQUEST['source_hash'] as $source_hash ) {
$gBitLanguage->loadMasterStrings( $source_hash );
- $formHash['input'][] = '<input type="hidden" name="source_hash[]" value="'.$source_hash.'"/>'.$gBitLanguage->mStrings['master'][$source_hash]['source'];
+ $formHash['input'][] = '<input type="hidden" name="source_hash[]" value="'.$source_hash.'"/>'.htmlentities( $gBitLanguage->mStrings['master'][$source_hash]['source'] );
}
$gBitSystem->confirmDialog( $formHash, $msgHash );
} else {
@@ -48,54 +52,6 @@ if( !empty( $_REQUEST['delete_master'] ) && !empty( $_REQUEST['source_hash'] ) &
$feedback['success'] = 'The requested master strings were successfully deleted.';
}
}
-} elseif( !empty( $_REQUEST['guess_translations'] ) ) {
- if( is_string( $_REQUEST['source_hash'] ) ) {
- $_REQUEST['source_hash'] = array( $_REQUEST['source_hash'] );
- }
- $transCount = 0;
- $masterStrings = array();
- foreach( $_REQUEST['source_hash'] AS $reqSourceHash ) {
- $gBitLanguage->loadMasterStrings( $reqSourceHash );
- $masterStrings[$reqSourceHash] = $gBitLanguage->mStrings['master'][$reqSourceHash];
-
- if( strlen( $masterStrings[$reqSourceHash]['source'] ) > 70 ) {
- $masterStrings[$reqSourceHash]['textarea'] = TRUE;
- }
- $gBitSmarty->assign_by_ref( 'masterStrings', $masterStrings );
- $masterString = $gBitLanguage->mStrings['master'][$reqSourceHash];
- $tranArray = array( 'ar', 'bg', 'cs', 'da', 'de', 'el', 'es', 'fi', 'fr', 'hi', 'hr', 'it', 'nl', 'pt', 'ja', 'ko', 'no', 'pl', 'pt', 'ro', 'sv', 'ru', 'zh-CN' );
-
- $tranStrings[$reqSourceHash] = $gBitLanguage->getTranslatedStrings( $reqSourceHash );
- foreach( $tranArray as $toLangCode ) {
- $lowerLangCode = strtolower( $toLangCode );
- if( !empty( $gBitLanguage->mLanguageList[$lowerLangCode] ) && empty( $tranStrings[$reqSourceHash][$lowerLangCode] ) ) {
- $requestUrl = "http://translate.google.com/translate_t?ie=UTF-8&oe=UTF-8&text=".urlencode( $masterString['source'] )."&langpair=en|$toLangCode";
- $handle = fopen( $requestUrl, "r");
- if($handle) {
- $transCount++;
- $contents = '';
- while (!feof($handle)) {
- $contents .= fread($handle, 8192);
- }
- fclose($handle);
- preg_match_all( "!<div id=result_box[^>]*>([^<]*)</div>.*!", $contents, $matches );
- if( isset( $matches[1][0] ) && $matches[1][0] != $gBitLanguage->mStrings['master'][$reqSourceHash]['source'] ) {
- $tranStrings[$reqSourceHash][$lowerLangCode]['guessed'] = TRUE;
- $tranStrings[$reqSourceHash][$lowerLangCode]['source_hash'] = $reqSourceHash;
- $tranStrings[$reqSourceHash][$lowerLangCode]['trans'] = trim( $matches[1][0] );
- $tranStrings[$reqSourceHash][$lowerLangCode]['lang_code'] = $lowerLangCode;
- }
- }
- }
- }
- if( $transCount > 200 ) {
- // avoid abuse of google translate URL and prevent URL timeout
- break;
- }
- }
-
- $gBitSmarty->assign( 'sources', $_REQUEST['source_hash'] );
- $gBitSmarty->assign_by_ref( 'tranStrings', $tranStrings );
} elseif( !empty( $_REQUEST['save_translations'] ) ) {
foreach( $_REQUEST['edit_trans'] as $sourceHash => $sources ) {
foreach( $sources as $langCode => $string ) {
@@ -123,20 +79,6 @@ if( !empty( $_REQUEST['delete_master'] ) && !empty( $_REQUEST['source_hash'] ) &
}
}
$masterMsg['success'][] = 'Translation strings have been updated';
- $gBitSmarty->assign_by_ref( 'masterStrings', $gBitLanguage->mStrings['master'] );
- $gBitSmarty->assign_by_ref( 'tranStrings', $tranStrings );
- $gBitSmarty->assign( 'sources', $_REQUEST['source_hash'] );
-} elseif( !empty( $_REQUEST['source_hash'] ) && empty( $_REQUEST['cancel'] ) ) {
- foreach( $_REQUEST['source_hash'] as $reqSourceHash ) {
- $gBitLanguage->loadMasterStrings( $reqSourceHash );
- if( strlen( $gBitLanguage->mStrings['master'][$reqSourceHash]['source'] ) > 70 ) {
- $gBitLanguage->mStrings['master'][$reqSourceHash]['textarea'] = TRUE;
- }
- $translate[$reqSourceHash] = $gBitLanguage->getTranslatedStrings( $_REQUEST['source_hash'] );
- }
- $gBitSmarty->assign_by_ref( 'masterStrings', $gBitLanguage->mStrings['master'] );
- $gBitSmarty->assign_by_ref( 'tranStrings', $translate );
- $gBitSmarty->assign( 'sources', $_REQUEST['source_hash'] );
} elseif( !empty( $_REQUEST['find'] ) && !empty( $_REQUEST['search'] ) ) {
$gBitSmarty->assign_by_ref( 'masterStrings', $gBitLanguage->searchMasterStrings( $_REQUEST['find'] ) );
} else {
@@ -167,6 +109,21 @@ if( !empty( $_REQUEST['delete_master'] ) && !empty( $_REQUEST['source_hash'] ) &
$gBitSmarty->assign( 'char', empty( $_REQUEST['char'] ) ? '' : $_REQUEST['char'] );
$gBitSmarty->assign_by_ref( 'masterStrings', $masterStrings );
}
+
+
+if( !empty( $_REQUEST['source_hash'] ) && empty( $_REQUEST['cancel'] ) ) {
+ foreach( $_REQUEST['source_hash'] as $reqSourceHash ) {
+ $gBitLanguage->loadMasterStrings( $reqSourceHash );
+ if( strlen( $gBitLanguage->mStrings['master'][$reqSourceHash]['source'] ) > 100 ) {
+ $gBitLanguage->mStrings['master'][$reqSourceHash]['textarea'] = TRUE;
+ }
+ $translate[$reqSourceHash] = $gBitLanguage->getTranslatedStrings( $_REQUEST['source_hash'] );
+ }
+ $gBitSmarty->assign_by_ref( 'masterStrings', $gBitLanguage->mStrings['master'] );
+ $gBitSmarty->assign_by_ref( 'tranStrings', $translate );
+ $gBitSmarty->assign( 'sources', $_REQUEST['source_hash'] );
+}
+
// Display the template
$gBitSmarty->assign( 'masterMsg', $masterMsg );
$gBitSmarty->assign( 'feedback', $feedback );
diff --git a/templates/admin_languages.tpl b/templates/admin_languages.tpl
index 6766baf..9aa9eed 100644
--- a/templates/admin_languages.tpl
+++ b/templates/admin_languages.tpl
@@ -23,6 +23,15 @@
</div>
{/foreach}
+ <div class="row">
+ {formlabel label="Google API Key" for="google_api_key"}
+ {forminput}
+ {biticon iname="google-favicon" ipackage="languages" iexplain="Auto-Translate"}
+ <input type="text" name="google_api_key" value="{$gBitSystem->getConfig('google_api_key')}" style="width:30em"/>
+ {formhelp note="Enter your <a href='http://www.google.com/search?q=Google+translate+API'>Google Translate API KEY</a>"}
+ {/forminput}
+ </div>
+
<div class="row submit">
<input type="submit" name="prefs" value="{tr}Change Settings{/tr}" />
</div>
diff --git a/templates/language_master_strings.tpl b/templates/language_master_strings.tpl
index 9b71246..605b096 100644
--- a/templates/language_master_strings.tpl
+++ b/templates/language_master_strings.tpl
@@ -1,6 +1,8 @@
{strip}
<div class="floaticon">{bithelp}</div>
+{include file="bitpackage:lanaguages/translate_google_ajax_inc.tpl"}
+
<div class="edit languages">
<div class="header">
<h1>{tr}Master Language Strings{/tr}</h1>
@@ -9,7 +11,7 @@
<div class="body">
{minifind name="Search master strings" sort_mode=$sort_mode}
{if $sources}
- {form legend="Edit Translations"}
+ {form legend="Edit Translations" id="translateform"}
{formfeedback hash=$masterMsg}
{formfeedback warning="You will need to clear the System Cache to see the changes." link="languages/edit_languages.php/System Cache"}
{tr}Translations strings may appear empty if the language is not loaded. The language will be automatically loaded when you click the edit icon.{/tr}
@@ -31,13 +33,18 @@
{foreach from=$languages key=langCode item=lang}
{if $langCode ne 'en'}
<div class="row">
- {formlabel label=$lang.native_name no_translate=1}
+ <div class="formlabel">
+ {$lang.native_name}
+ {if $gBitSystem->getConfig('google_api_key')}
+ <div class="autotranslate" onclick="autoTranslate('{$sourceHash}','{$langCode}')">{biticon iname="google-favicon" ipackage="languages" iexplain="Auto-Translate"} Auto</div>
+ {/if}
+ </div>
{forminput}
{* if results are guessed, we don't need to escape *}
{if $masterStrings.$sourceHash.textarea}
- <textarea name="edit_trans[{$sourceHash}][{$langCode}]" id="h_{$sourceHash}" rows="5" cols="50">{if $tranStrings.$sourceHash.$langCode.guessed}{$tranStrings.$sourceHash.$langCode.trans}{else}{$tranStrings.$sourceHash.$langCode.trans|escape|stripslashes}{/if}</textarea>
+ <textarea name="edit_trans[{$sourceHash}][{$langCode}]" id="{$langCode}_{$sourceHash}" lang="{$langCode}" rows="3" cols="50">{if $tranStrings.$sourceHash.$langCode.guessed}{$tranStrings.$sourceHash.$langCode.trans}{else}{$tranStrings.$sourceHash.$langCode.trans|escape|stripslashes}{/if}</textarea>
{else}
- <input type="text" name="edit_trans[{$sourceHash}][{$langCode}]" id="h_{$sourceHash}" value="{if $tranStrings.$sourceHash.$langCode.guessed}{$tranStrings.$sourceHash.$langCode.trans}{else}{$tranStrings.$sourceHash.$langCode.trans|escape|stripslashes}{/if}" size="45" maxlength="2048" />
+ <input type="text" name="edit_trans[{$sourceHash}][{$langCode}]" id="{$langCode}_{$sourceHash}" lang="{$langCode}" value="{if $tranStrings.$sourceHash.$langCode.guessed}{$tranStrings.$sourceHash.$langCode.trans}{else}{$tranStrings.$sourceHash.$langCode.trans|escape|stripslashes}{/if}" size="45" maxlength="2048" />
{/if}
{/forminput}
</div>
@@ -47,12 +54,15 @@
<div class="row submit">
<input type="submit" name="cancel" value="{tr}Cancel{/tr}" />
- &nbsp;<input type="submit" name="guess_translations" value="{tr}Guess Translations{/tr}" />
- &nbsp;<input type="submit" name="save_translations" value="{tr}Save{/tr}" />
+ <input type="submit" name="save_translations" value="{tr}Save{/tr}" />
+ <input type="submit" name="delete_master" value="{tr}Delete Master String{/tr}" />
+ {if $gBitSystem->getConfig('google_api_key')}
+ <div class="button" onclick="return autoTranslateEmpty()">Auto Translate Empty Strings</div>
+ {/if}
</div>
<div class="row">
- {formhelp note="Guess Translations will try and get an estimated translation using google language tools. Please make sure you check the returned strings for messed up HTML."}
+ {formhelp note="Auto Translations will try and get an estimated translation using google language tools. Please make sure you check the returned strings for incorrect formatting."}
</div>
{/form}
@@ -80,7 +90,7 @@
</div>
{/form}
- {form legend="Translations" id=formid}
+ {form legend="Translations" id="translateform"}
{alphabar iall=1 filter_lang=$smarty.request.filter_lang filter=$smarty.request.filter}
{formfeedback hash=$feedback}
@@ -99,7 +109,6 @@
</ol>
<div class="submit">
- <input type="submit" name="guess_translations" value="{tr}Guess Translations{/tr}" />
<input type="submit" name="delete_master" value="{tr}Delete Seleted Master Strings{/tr}" />
</div>
diff --git a/templates/translate_google_ajax_inc.tpl b/templates/translate_google_ajax_inc.tpl
new file mode 100644
index 0000000..5496407
--- /dev/null
+++ b/templates/translate_google_ajax_inc.tpl
@@ -0,0 +1,44 @@
+<script type="text/javascript">/* <![CDATA[ */
+{literal}
+var autoHashArray = new Array();
+var ajax = new BitBase.SimpleAjax();
+
+function autoTranslate( pElementId, pLang ) {
+console.log( "auto trans " + pElementId + ", " + pLang );
+ ajax.connect( "{/literal}{$smarty.const.LANGUAGES_PKG_URL}ajax_translate.php{literal}"
+ , "lang="+pLang+"&source_hash=" + escape( pElementId )
+ , updateTranslation
+ , "GET"
+ );
+}
+
+function updateTranslation( pResponse ) {
+ if( pResponse.responseText ) {
+ rObj = eval('(' + pResponse.responseText + ')');
+ document.getElementById( rObj.lang_code + '_' + rObj.source_hash ).value = rObj.translation;
+ }
+ if( autoHashArray.length ) {
+ var next = autoHashArray.pop().split('_',2);
+ autoTranslate( next[1], next[0] );
+ }
+}
+
+function autoTranslateEmpty() {
+ var elem = document.getElementById('translateform').elements;
+ for(var i = 0; i < elem.length; i++) {
+ if( elem[i].type == 'text' || elem[i].type == 'textarea' ) {
+ if( !elem[i].value && elem[i].id ) {
+ autoHashArray.push( elem[i].id );
+ }
+ }
+ }
+ if( autoHashArray.length ) {
+ var next = autoHashArray.pop().split('_',2);
+ autoTranslate( next[1], next[0] );
+ }
+}
+
+{/literal}
+/* ]]> */</script>
+
+
diff --git a/templates/translate_strings.tpl b/templates/translate_strings.tpl
index ee3af17..88a273a 100644
--- a/templates/translate_strings.tpl
+++ b/templates/translate_strings.tpl
@@ -1,51 +1,6 @@
{strip}
<div class="floaticon">{bithelp}</div>
-
-<script type="text/javascript">/* <![CDATA[ */
-{literal}
-var autoHashArray = new Array();
-var ajax = new BitBase.SimpleAjax();
-
-function autoTranslate( pElementId ) {
-console.log( "auto trans " + pElementId );
- ajax.connect( "{/literal}{$smarty.const.LANGUAGES_PKG_URL}ajax_translate.php{literal}"
- , "lang={/literal}{$editLang}{literal}&source_hash=" + escape( pElementId )
- , updateTranslation
- , "GET"
- );
-}
-
-function updateTranslation( pResponse ) {
-console.log( pResponse );
- if( pResponse.responseText ) {
-console.log( pResponse.responseText );
- rObj = eval('(' + pResponse.responseText + ')');
-console.log( rObj );
- document.getElementById( rObj.source_hash ).value = rObj.translation;
- }
- if( autoHashArray.length ) {
- autoTranslate( autoHashArray.pop() );
- }
-}
-
-function autoTranslateEmpty() {
- var elem = document.getElementById('translateform').elements;
- for(var i = 0; i < elem.length; i++) {
- if( elem[i].type == 'text' || elem[i].type == 'textarea' ) {
- if( !elem[i].value && elem[i].id ) {
- autoHashArray.push( elem[i].id );
- }
- }
- }
-console.log( autoHashArray );
- if( autoHashArray.length ) {
- autoTranslate( autoHashArray.pop() );
- }
-}
-
-{/literal}
-/* ]]> */</script>
-
+{include file="bitpackage:lanaguages/translate_google_ajax_inc.tpl"}
<div class="edit languages">
<div class="header">
<h1>{tr}Edit Languages{/tr}</h1>
@@ -80,15 +35,15 @@ console.log( autoHashArray );
<div class="formlabel">
<label for="{$sourceHash}">{tr}Translate{/tr}</label>
{if $gBitSystem->getConfig('google_api_key')}
- <div class="autotranslate" onclick="autoTranslate('{$sourceHash}')">{biticon iname="google-favicon" ipackage="languages" iexplain="Auto-Translate"} Auto</div>
+ <div class="autotranslate" onclick="autoTranslate('{$sourceHash}','{$editLang}')">{biticon iname="google-favicon" ipackage="languages" iexplain="Auto-Translate"} Auto</div>
{/if}
</div>
{forminput}
<a href="{$smarty.const.LANGUAGES_PKG_URL}master_strings.php?source_hash={$sourceHash}">{$tran.source|escape|nl2br}</a><br/>
{if $tran.textarea}
- <textarea style="font-size:medium;width:100%" name="edit_trans[{$sourceHash}]" id="{$sourceHash}" rows="5" cols="50">{$tran.trans|escape|stripslashes}</textarea>
+ <textarea style="font-size:medium;width:100%" name="edit_trans[{$sourceHash}]" id="{$editLang}_{$sourceHash}" lang="{$editLang}" rows="5" cols="50">{$tran.trans|escape|stripslashes}</textarea>
{else}
- <input style="font-size:medium;width:100%" name="edit_trans[{$sourceHash}]" id="{$sourceHash}" value="{$tran.trans|escape|stripslashes}" size="45" maxlength="255" />
+ <input style="font-size:medium;width:100%" name="edit_trans[{$sourceHash}]" id="{$editLang}_{$sourceHash}" lang="{$editLang}" value="{$tran.trans|escape|stripslashes}" size="45" maxlength="255" />
{/if}
{/forminput}
</div>