Phonegap/Sencha 语言本地化
Posted
技术标签:
【中文标题】Phonegap/Sencha 语言本地化【英文标题】:Phonegap/Sencha Language Localization 【发布时间】:2011-10-26 20:49:36 【问题描述】:问题: 我即将对一个已经非常大的 ipad 应用程序实施语言本地化,该应用程序是使用封装在 phonegap 中的 sencha touch 构建的。我在 json 文件中有英语和西班牙语的翻译。
我打算做什么: 我计划将 json 文件加载到 sencha touch 存储中,创建一个全局对象。然后在我调用显示的文本的每个地方,我将用对全局对象的调用替换文本。
我的问题:
有没有更简单的方法来实现语言本地化与我的 设置?
我会遇到原生煎茶的问题(如日期选择器)吗?
加载/重新加载语言json文件时,会有性能吗 问题(需要重新加载 webview?,sencha 对象调整大小问题, 等)
编辑 1:有用的相关信息: 对于那些走这条路的人来说,编写一个简单的 phonegap 插件来将 ipad/iphone 设备的语言设置到您的 javascript 中很快就会变得有用。这需要一个插件,它看起来像这样:Javascript :part 1:
PhoneGap.exec("PixFileDownload.getSystemLanguage");
第二部分(回调函数):
setLanguage(returnedLanguage)
GlobalVar.CurrentLanguage = returnedLanguage; //GloablVar.CurrentLanguage already defined
目标 C:
-(void)getSystemLanguage:(NSMutableArray*)paramArray withDict:(NSMutableDictionary*)options
/*Plugin Details
PhoneGap.exec("PixFileDownload.getSystemLanguage");
Returns Language Code
*/
NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* languages = [defs objectForKey:@"AppleLanguages"];
NSString *language = [languages objectAtIndex:0];
NSLog(@"####### This is the language code%@",language);
NSString *jsCallBack;
jsCallBack = [NSString stringWithFormat:@"setLanguage('%@');",language];
[self.webView stringByEvaluatingJavaScriptFromString:jsCallBack];
编辑 2:字符编码 在向 sencha 项目(或任何 webview phonegap 项目)添加其他语言字符时,请确保您在索引文件中指定了正确的编码。这是我需要的标签。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
【问题讨论】:
看看这个关于如何将本地化文本加载为覆盖的答案。这是 Sencha 本地化内置小部件的方式。 ***.com/questions/8226173/… 【参考方案1】:我已经完成了这个语言本地化插件。这并不令人惊讶,但它比我最初推测的效果更好。以下是每个问题的简短答案。
1- 有没有更简单的方法来实现语言本地化? 设置?
我不知道。 Stuart 的评论提供了这个链接Sencha-touch localization. Use a store or a global JSON object?,它提供了一些关于使用类覆盖的方式的很好的信息。我不喜欢这种方法,因为它将我的语言翻译分散到不同的类别中。但可以肯定的是,如果你正在做一些简单的事情,或者你想要一些更强大的东西,也许你应该调查一下。
2- 我会遇到原生煎茶的问题(如日期选择器)吗?
我现在特意留下了英文版的“datepickers”。但其他一切都相对容易定制。几乎每个图形 UI 元素都可以更改其文本。
3- 加载/重新加载语言 json 文件时,我会有性能吗 问题(需要重新加载 webview?,sencha 对象调整大小问题, 等)。
我采用的方法(见下文)在性能方面表现得非常好。当您切换语言时,您遇到的一个问题是正确的,您需要重新加载该特定页面。 Sencha 处理大小调整没有任何缺陷,除了我曾经愚蠢和静态设置大小的地方。
在问题的编辑中描述了我所做的一些事情。这是我的解决方案的详细概述。 (警告,这不是最优雅的解决方案。)
我最终没有使用纯 JSON 文件,而是使用了 javascript 函数。这不是最好的解决方案,因为它需要一些最少的维护,但是使用 phonegap/sencha 解析 JSON 并不是最好的。 (我从翻译器获取 JSON 文件,然后快速粘贴到 javascript 文件中。大约需要 2 分钟,请参阅下面的进一步说明)。
语言.js
function setLanguage(language)
if(language == "en")
//console.log("inside if Language == en");
GlobalLanguage.CurrentLanguage = language;
GlobalLanguage.ID = "glossary": [
//CONVERTED JSON
about : 'About',
checking_for_updates : 'Checking for updates...(This may take a few minutes.)'
//Any additional translations
];
if (language == "es")
//console.log("inside language == es");
GlobalLanguage.CurrentLanguage = language;
GlobalLanguage.ID = "glossary": [
//CONVERTED JSON
about : 'Acerca de ',
checking_for_updates : 'Verificando actualizaciones... (Capas que demore algunos minutos).'
//Any additional translations
];
if (language == "pt")
//console.log("inside language == pt");
GlobalLanguage.CurrentLanguage = language;
GlobalLanguage.ID = "glossary": [
//CONVERTED JSON
about : 'Sobre',
checking_for_updates : 'Verificando se há atualizações... (pode demorar alguns minutos.)'
//Any additional translations
];
如您所见,此文件允许使用 3 种语言(葡萄牙语、英语和西班牙语)。设置语言后,您可以访问对象中任何位置的每个本地化字符串。例如,如果您需要访问单词“about”,只需使用:
GlobalLanguage.ID.glossary[0]["about"]
这将访问 GlobalLanguage 对象,该对象将在属性中加载任何语言。所以在你的整个项目中,你可以有这些调用。但是,我建议您更进一步
function langSay(languageIdentifier)
// console.log("inside langSay");
if(!GlobalLanguage.ID.glossary[0][languageIdentifier])
return "[! LANGUAGE EXCEPTION !]";
else
return GlobalLanguage.ID.glossary[0][languageIdentifier];
这可以保护您免受语言异常和程序崩溃而不知道在哪里(您可能在该 language.js 文件中设置了数百或数千个属性)。所以现在简单地说:
langSay("about")
关于从 JSON 格式化的附加说明。您希望语言文件采用的格式是:
languageIdentifier : 'Translation',
languageIdentifier : 'Translation',
languageIdentifier : 'Translation'
我使用 Excel 进行格式化。此外,languageIdentifiers 是没有空格的唯一标识符。我建议只使用 Excel 来格式化英文翻译的前 3 到 4 个单词 word1_word2_word3_word4。
word1_word2_word3 : 'word1 word2 word3'
希望对您有所帮助!我很乐意回答任何问题
【讨论】:
以上是关于Phonegap/Sencha 语言本地化的主要内容,如果未能解决你的问题,请参考以下文章
打开和关闭inappbrowser 在ios 7 底部phonegap+sencha 带来白条
在 PhoneGap/Sencha Touch 中加载外部 Web 服务
如何阻止 iOS 启动图像在 Phonegap / Sencha Touch 中向上移动
在 iOS (iPad) 上减少 phonegap、sencha touch 的内存占用