Просмотр исходного кода

#31 - Substitute missing translations with English ones.

AntonLV 12 лет назад
Родитель
Сommit
53df04dcd4

+ 3 - 1
inc/classes/BxDolLanguages.php

@@ -10,6 +10,8 @@
 bx_import('BxDol');
 bx_import('BxDolLanguagesQuery');
 
+define('BX_DOL_LANGUAGE_DEFAULT', 'en');
+
 define('BX_DOL_LANGUAGE_CATEGORY_SYSTEM', 1);
 define('BX_DOL_LANGUAGE_CATEGORY_CUSTOM', 2);
 
@@ -70,7 +72,7 @@ class BxDolLanguages extends BxDol implements iBxDolSingleton
             $sLang = $this->tryToGetLang(getParam('lang_default'));
 
         if(!$sLang)
-            $sLang = $this->tryToGetLang('en');
+            $sLang = $this->tryToGetLang(BX_DOL_LANGUAGE_DEFAULT);
 
         setlocale(LC_TIME, $sLang . '_' . strtoupper($sLang) . '.utf-8', $sLang . '_' . strtoupper($sLang) . '.utf8', $sLang . '.utf-8', $sLang . '.utf8', $sLang);
         return $sLang;

+ 17 - 1
inc/classes/BxDolLanguagesQuery.php

@@ -84,6 +84,10 @@ class BxDolLanguagesQuery extends BxDolDb implements iBxDolSingleton
             case 'all_by_id':
                 $sWhereClause .= $this->prepare(" AND `tl`.`ID`=?", $aParams['value']);
                 $sOrderClause = " `tl`.`Name` ASC ";
+                break;
+			case 'all_by_name':
+                $sWhereClause .= $this->prepare(" AND `tl`.`Name`=?", $aParams['value']);
+                $sOrderClause = " `tl`.`Name` ASC ";
                 break;
             case 'all_key_id':
                 $aMethod['name'] = 'getAllWithKey';
@@ -142,7 +146,19 @@ class BxDolLanguagesQuery extends BxDolDb implements iBxDolSingleton
                 $sWhereClause = $this->prepare(" AND `tk`.`Key`=? ", $aParams['value']);
                 break;
 
-            case 'by_language_id':
+			case 'by_language_name_key_key':
+            	$aMethod['name'] = 'getAllWithKey';
+            	$aMethod['params'][1] = 'key';
+
+                $sSelectClause .= ", `ts`.`String` AS `string` ";
+                $sJoinClause = " LEFT JOIN `sys_localization_strings` AS `ts` ON `tk`.`ID`=`ts`.`IDKey` LEFT JOIN `sys_localization_languages` AS `tl` ON `ts`.`IDLanguage`=`tl`.`ID` ";
+                $sWhereClause = $this->prepare(" AND `tl`.`Name`=? ", (int)$aParams['value']);
+                break;
+
+            case 'by_language_id_key_key':
+            	$aMethod['name'] = 'getAllWithKey';
+            	$aMethod['params'][1] = 'key';
+
                 $sSelectClause .= ", `ts`.`String` AS `string` ";
                 $sJoinClause = " LEFT JOIN `sys_localization_strings` AS `ts` ON `tk`.`ID`=`ts`.`IDKey` ";
                 $sWhereClause = $this->prepare(" AND `ts`.`IDLanguage`=? ", (int)$aParams['value']);

+ 1 - 0
install/sql/system.sql

@@ -239,6 +239,7 @@ SET @iCategoryId = LAST_INSERT_ID();
 
 INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
 (@iCategoryId, 'lang_default', '_adm_stg_cpt_option_lang_default', '', 'select', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:13:"get_languages";s:6:"params";a:2:{i:0;b:0;i:1;b:1;}s:5:"class";s:22:"TemplLanguagesServices";}', '', '', 1),
+(@iCategoryId, 'lang_subst_from_en', '_adm_stg_cpt_option_lang_subst_from_en', 'on', 'checkbox', '', '', '', 2),
 
 (@iCategoryId, 'sys_format_date', '_adm_stg_cpt_option_sys_format_date', 'D MMM YYYY', 'digit', '', '', '', 3),
 (@iCategoryId, 'sys_format_time', '_adm_stg_cpt_option_sys_format_time', 'HH:mm', 'digit', '', '', '', 4),

+ 1 - 0
modules/boonex/english/data/langs/system.xml

@@ -1092,6 +1092,7 @@
 	<string name="_adm_stg_cpt_option_expire_notification_days"><![CDATA[Number of days before membership expiration to notify members ( -1 = after expiration )]]></string>
 	<string name="_adm_stg_cpt_option_expire_notify_once"><![CDATA[Notify members about membership expiration only once (every day otherwise)]]></string>
 	<string name="_adm_stg_cpt_option_lang_default"><![CDATA[Default Language]]></string>
+	<string name="_adm_stg_cpt_option_lang_subst_from_en"><![CDATA[Substitute (during compilation) missing translations with english ones]]></string>	
 	<string name="_adm_stg_cpt_option_permalinks_modules"><![CDATA[Enable friendly permalinks for Modules]]></string>
 	<string name="_adm_stg_cpt_option_permalinks_pages"><![CDATA[Enable friendly permalinks for Pages]]></string>
 	<string name="_adm_stg_cpt_option_site_email"><![CDATA[Email to receive critical site notifications]]></string>

+ 6 - 6
modules/boonex/russian/data/langs/system.xml

@@ -3181,10 +3181,10 @@ More info about URI DNSBL: <br />
     <string name="_sys_menu_title_switch_language"><![CDATA[Switch Language]]></string>
 	<string name="_sys_menu_title_switch_template"><![CDATA[Switch Template]]></string>
 
-    <string name="_sys_menu_item_title_system_home"><![CDATA[Home]]></string>
-    <string name="_sys_menu_item_title_system_about"><![CDATA[About]]></string>
-    <string name="_sys_menu_item_title_system_switch_language"><![CDATA[Language]]></string>
-	<string name="_sys_menu_item_title_system_switch_template"><![CDATA[Template]]></string>
+    <string name="_sys_menu_item_title_system_home"><![CDATA[Главная]]></string>
+    <string name="_sys_menu_item_title_system_about"><![CDATA[О нас]]></string>
+    <string name="_sys_menu_item_title_system_switch_language"><![CDATA[Язак]]></string>
+	<string name="_sys_menu_item_title_system_switch_template"><![CDATA[Дизайн]]></string>
     <string name="_sys_menu_item_title_system_search"><![CDATA[Search]]></string>
     <string name="_sys_menu_item_title_system_add_content"><![CDATA[Add Content]]></string>
     <string name="_sys_menu_item_title_system_notifications"><![CDATA[Notifications]]></string>
@@ -3204,8 +3204,8 @@ More info about URI DNSBL: <br />
     <string name="_sys_menu_item_title_system_account_settings_pwd"><![CDATA[Password]]></string>
     <string name="_sys_menu_item_title_system_account_settings_delete"><![CDATA[Delete Account]]></string>
 
-    <string name="_sys_menu_item_title_home"><![CDATA[Home]]></string>
-    <string name="_sys_menu_item_title_about"><![CDATA[About]]></string>
+    <string name="_sys_menu_item_title_home"><![CDATA[Главная]]></string>
+    <string name="_sys_menu_item_title_about"><![CDATA[О нас]]></string>
     <string name="_sys_menu_item_title_switch_language"><![CDATA[Язык]]></string>
     <string name="_sys_menu_item_title_switch_language_mask"><![CDATA[{1} {0}]]></string>
 	<string name="_sys_menu_item_title_switch_template"><![CDATA[Дизайн]]></string>

+ 1 - 1
studio/classes/BxDolStudioLanguage.php

@@ -11,7 +11,7 @@ bx_import('BxDolModuleQuery');
 bx_import('BxTemplStudioPage');
 bx_import('BxDolStudioLanguagesQuery');
 
-define('BX_DOL_STUDIO_LANG_DEFAULT', 'en');
+define('BX_DOL_STUDIO_LANG_DEFAULT', BX_DOL_LANGUAGE_DEFAULT);
 
 define('BX_DOL_STUDIO_LANG_TYPE_SETTINGS', 'settings');
 

+ 9 - 2
studio/classes/BxDolStudioLanguagesUtils.php

@@ -122,8 +122,15 @@ class BxDolStudioLanguagesUtils extends BxDolLanguages implements iBxDolSingleto
             if(!$bForce && (int)$aLanguage['enabled'] != 1)
                 continue;
 
-            $aKeys = array();
-            $this->oDb->getKeysBy(array('type' => 'by_language_id', 'value' => $aLanguage['id']), $aKeys);
+			$aKeys = array();
+            $this->oDb->getKeysBy(array('type' => 'by_language_id_key_key', 'value' => $aLanguage['id']), $aKeys);
+
+            if($aLanguage['name'] != BX_DOL_LANGUAGE_DEFAULT && getParam('lang_subst_from_en') == 'on') {
+				$aKeysAll = array();
+				$this->oDb->getKeysBy(array('type' => 'by_language_name_key_key', 'value' => BX_DOL_LANGUAGE_DEFAULT), $aKeysAll);
+
+	            $aKeys = array_merge($aKeysAll, $aKeys);
+            }
 
             $sLanguageFile = "lang-" . $aLanguage['name'] . ".php";
             $oFile->delete('cache/' . $sLanguageFile);