hat*_*ike 11 json localization ios sencha-touch cordova
问题:
我即将实现语言本地化到已经非常大的ipad应用程序,该应用程序是使用包含在phonegap中的sencha touch构建的.我在json文件中有英文和西班牙文翻译.
我正在计划做什么:
我计划将json文件加载到sencha触摸存储中,创建一个全局对象.然后在我调用显示的文本的每个地方,我将通过调用全局对象替换文本.
我的问题:
有没有更简单的方法来实现我的设置语言本地化?
我会遇到本机sencha的问题(比如datepickers)吗?
加载/重新加载语言json文件时,是否会出现性能问题(需要webview重新加载?,sencha对象调整大小等问题)
编辑1:有用的相关信息:
对于那些沿着这条路走下去的人来说,编写一个简单的phonegap插件以便将ipad/iphone设备的语言设置变成你的javascript很快就会变得很有用.这需要一个插件,它看起来像这样:
Javascript:
第1部分:
PhoneGap.exec("PixFileDownload.getSystemLanguage");
Run Code Online (Sandbox Code Playgroud)
第2部分(回调函数):
setLanguage(returnedLanguage)
{
GlobalVar.CurrentLanguage = returnedLanguage; //GloablVar.CurrentLanguage already defined
}
Run Code Online (Sandbox Code Playgroud)
目标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];
}
Run Code Online (Sandbox Code Playgroud)
编辑2:字符编码 将其他语言字符添加到sencha项目(或任何webview phonegap项目)时,请确保在索引文件中指定了正确的编码.这是我需要的标签.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Run Code Online (Sandbox Code Playgroud)
我已经完成了这个语言本地化插件。这并不令人惊奇,但它比我最初推测的效果更好。以下是每个问题的简短答案。
\n\n\n\n\n1- 有没有更简单的方法来通过我的设置实现语言本地化?
\n
据我所知。Stuart 的评论提供了此链接Sencha-touch 本地化。使用存储还是全局 JSON 对象?其中有一些关于使用类覆盖的一种方法的好信息。我不喜欢这种方法,因为它把我的语言翻译分散到了不同的班级。但当然,如果你正在做一些简单的事情,或者你想要一些更强大的东西,也许你应该对此进行调查。
\n\n\n\n\n2- 我会遇到原生 sencha 东西(比如日期选择器)的问题吗?
\n
我最终特意将“datepickers”保留为英语。但其他一切都相对容易定制。几乎每个图形 UI 元素都可以更改其文本。
\n\n\n\n\n3- 加载/重新加载语言 json 文件时,是否会遇到性能问题(需要重新加载 webview?、sencha 对象调整大小问题等)。
\n
我采用的方法(见下文)在性能方面效果非常好。您遇到的一个问题是,当您切换语言时,您需要重新加载特定页面。Sencha 处理调整大小没有任何缺陷,除了我愚蠢的静态设置大小的地方。
\n\n我所做的一些事情在问题的编辑中有所描述。这是我的解决方案的详细概述。(警告,这不是最优雅的解决方案。)
\n\n我最终没有使用纯 JSON 文件,而是使用了 javascript 函数。这不是最好的解决方案,因为它需要一些最少的维护,但使用phonegap/sencha 进行 JSON 解析并不是最好的。(我从翻译器获取 JSON 文件,然后快速粘贴到 javascript 文件中。大约需要 2 分钟,请参阅下面的进一步说明)。
\n\n语言.js
\n\nfunction setLanguage(language)\n{\n\n if(language == "en")\n {\n //console.log("inside if Language == en");\n GlobalLanguage.CurrentLanguage = language;\n\n GlobalLanguage.ID = {"glossary": [\n { \n //CONVERTED JSON\n about : \'About\',\n checking_for_updates : \'Checking for updates...(This may take a few minutes.)\'\n //Any additional translations\n\n }\n ]};\n }\n if (language == "es"){\n //console.log("inside language == es");\n GlobalLanguage.CurrentLanguage = language;\n GlobalLanguage.ID = {"glossary": [\n {\n //CONVERTED JSON\n about : \'Acerca de \',\n checking_for_updates : \'Verificando actualizaciones... (Capas que demore algunos minutos).\'\n //Any additional translations\n\n }]};\n }\n if (language == "pt"){\n //console.log("inside language == pt");\n GlobalLanguage.CurrentLanguage = language;\n GlobalLanguage.ID = {"glossary": [\n {\n //CONVERTED JSON\n about : \'Sobre\',\n checking_for_updates : \'Verificando se h\xc3\xa1 atualiza\xc3\xa7\xc3\xb5es... (pode demorar alguns minutos.)\'\n //Any additional translations\n\n }]};\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n如您所见,该文件支持 3 种语言(葡萄牙语、英语和西班牙语)。设置语言后,您可以访问对象中任何位置的每个本地化字符串。例如,如果您需要访问“about”一词,只需使用:
\n\nGlobalLanguage.ID.glossary[0]["about"]\nRun Code Online (Sandbox Code Playgroud)\n\n这将访问 GlobalLanguage 对象,该对象将加载到属性中的任何语言。因此,在您的整个项目中,您可能会进行这些调用。不过,我建议更进一步
\n\nfunction langSay(languageIdentifier){\n\n\n // console.log("inside langSay");\n\n if(!GlobalLanguage.ID.glossary[0][languageIdentifier]){\n return "[! LANGUAGE EXCEPTION !]";\n }\n else{\n return GlobalLanguage.ID.glossary[0][languageIdentifier];\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这可以防止您出现语言异常和程序崩溃而不知道在哪里(您可能在该 language.js 文件中设置了数百或数千个属性)。所以现在简单地说:
\n\nlangSay("about")\nRun Code Online (Sandbox Code Playgroud)\n\n关于 JSON 格式化的附加说明。您希望语言文件采用的格式是:
\n\nlanguageIdentifier : \'Translation\',\nlanguageIdentifier : \'Translation\',\nlanguageIdentifier : \'Translation\'\nRun Code Online (Sandbox Code Playgroud)\n\n我使用 Excel 进行格式化。另外,语言标识符是不带空格的唯一标识符。我建议仅使用 Excel 来格式化英文翻译的前 3 到 4 个单词 word1_word2_word3_word4。
\n\nword1_word2_word3 : \'word1 word2 word3\'\nRun Code Online (Sandbox Code Playgroud)\n\n希望这可以帮助你!我很乐意回答任何问题
\n| 归档时间: |
|
| 查看次数: |
3805 次 |
| 最近记录: |