- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
问题:
我即将对一个已经非常大的 ipad 应用程序实现语言本地化,该应用程序是使用包裹在 phonegap 中的 sencha touch 构建的。我在 json 文件中有英语和西类牙语翻译。
我打算做什么:
我计划将 json 文件加载到 sencha touch 存储中,创建一个全局对象。然后在我调用显示的文本的每个地方,我将用对全局对象的调用替换文本。
我的问题:
有没有更简单的方法来实现语言本地化设置?
我会遇到原生 Sencha 的问题(比如日期选择器)吗?
加载/重新加载语言json文件时,会不会有性能问题问题(需要重新加载 webview?,sencha 对象大小调整问题,等等)
编辑 1:有用的相关信息:
对于那些走这条路的人来说,编写一个简单的 phonegap 插件以将 ipad/iphone 设备的语言设置到您的 javascript 中很快就会变得有用。这需要一个插件,它看起来像这样:
Javascript :
第 1 部分:
PhoneGap.exec("PixFileDownload.getSystemLanguage");
第 2 部分(回调函数):
setLanguage(returnedLanguage)
{
GlobalVar.CurrentLanguage = returnedLanguage; //GloablVar.CurrentLanguage already defined
}
objective-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">
最佳答案
我已经完成了这个语言本地化插件。这并不奇怪,但它比我最初推测的要好。以下是每个问题的简短答案。
1- Is there an easier way to implement language localization with my setup?
我不知道。 Stuart 的评论提供了此链接 Sencha-touch localization. Use a store or a global JSON object?其中有一些关于使用类覆盖的方法的有用信息。我不喜欢这种方法,因为它将我的语言翻译传播到不同的类(class)。但当然,如果您正在做一些简单的事情,或者您想要一些更强大的东西,也许您应该调查一下。
2- Will I run into issues with native sencha stuff (like datepickers)?
我现在特意留下英文的“datepickers”。但其他一切都相对容易定制。几乎每个图形 UI 元素都可以更改其文本。
3- When loading/reloading language json files, will I have performance issues (require a webview reload?, sencha object resizing issues, etc).
我采用的方法(见下文)在性能方面非常有效。您遇到的一个问题是,当您切换语言时,您需要重新加载该特定页面。 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'
希望对您有所帮助!我很乐意回答任何问题
关于ios - Phonegap/Sencha 语言本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7908766/
IO 设备如何知道属于它的内存中的值在memory mapped IO 中发生了变化? ? 例如,假设内存地址 0 专用于保存 VGA 设备的背景颜色。当我们更改 memory[0] 中的值时,VGA
我目前正在开发一个使用Facebook sdk登录(通过FBLoginView)的iOS应用。 一切正常,除了那些拥有较旧版本的facebook的人。 当他们按下“使用Facebook登录”按钮时,他
假设我有: this - is an - example - with some - dashesNSRange将使用`rangeOfString:@“-”拾取“-”的第一个实例,但是如果我只想要最后
Card.io SDK提供以下详细信息: 卡号,有效期,月份,年份,CVV和邮政编码。 如何从此SDK获取国家名称。 - (void)userDidProvideCreditCardInfo:(Car
iOS 应用程序如何从网络服务下载图片并在安装过程中将它们安装到用户的 iOS 设备上?可能吗? 最佳答案 您无法控制应用在用户设备上的安装,因此无法在安装过程中下载其他数据。 只需在安装后首次启动应
我曾经开发过一款企业版 iOS 产品,我们公司曾将其出售给大型企业,供他们的员工使用。 该应用程序通过 AppStore 提供,企业用户获得了公司特定的配置文件(包含应用程序配置文件)以启用他们有权使
我正在尝试将 Card.io SDK 集成到我的 iOS 应用程序中。我想为 CardIO ui 做一个简单的本地化,如更改取消按钮标题或“在此保留信用卡”提示文本。 我在 github 上找到了这个
我正在使用 CardIOView 和 CardIOViewDelegate 类,没有可以设置为 YES 的 BOOL 来扫描 collectCardholderName。我可以看到它在 CardIOP
我有一个集成了通话工具包的 voip 应用程序。每次我从我的 voip 应用程序调用时,都会在 native 电话应用程序中创建一个新的最近通话记录。我在 voip 应用程序中也有自定义联系人(电话应
iOS 应用程序如何知道应用程序打开时屏幕上是否已经有键盘?应用程序运行后,它可以接收键盘显示/隐藏通知。但是,如果应用程序在分屏模式下作为辅助应用程序打开,而主应用程序已经显示键盘,则辅助应用程序不
我在模拟器中收到以下错误: ImageIO: CGImageReadSessionGetCachedImageBlockData *** CGImageReadSessionGetCachedIm
如 Apple 文档所示,可以通过 EAAccessory Framework 与经过认证的配件(由 Apple 认证)进行通信。但是我有点困惑,因为一些帖子告诉我它也可以通过 CoreBluetoo
尽管现在的调试器已经很不错了,但有时找出应用程序中正在发生的事情的最好方法仍然是古老的 NSLog。当您连接到计算机时,这样做很容易; Xcode 会帮助弹出日志查看器面板,然后就可以了。当您不在办公
在我的 iOS 应用程序中,我定义了一些兴趣点。其中一些有一个 Kontakt.io 信标的名称,它绑定(bind)到一个特定的 PoI(我的意思是通常贴在信标标签上的名称)。现在我想在附近发现信标,
我正在为警报提示创建一个 trigger.io 插件。尝试从警报提示返回数据。这是我的代码: // Prompt + (void)show_prompt:(ForgeTask*)task{
您好,我是 Apple iOS 的新手。我阅读并搜索了很多关于推送通知的文章,但我没有发现任何关于 APNS 从 io4 到 ios 6 的新更新的信息。任何人都可以向我提供 APNS 如何在 ios
UITabBar 的高度似乎在 iOS 7 和 8/9/10/11 之间发生了变化。我发布这个问题是为了让其他人轻松找到答案。 那么:在 iPhone 和 iPad 上的 iOS 8/9/10/11
我想我可以针对不同的 iOS 版本使用不同的 Storyboard。 由于 UI 的差异,我将创建下一个 Storyboard: Main_iPhone.storyboard Main_iPad.st
我正在写一些东西,我将使用设备的 iTunes 库中的一部分音轨来覆盖 2 个视频的组合,例如: AVMutableComposition* mixComposition = [[AVMutableC
我创建了一个简单的 iOS 程序,可以顺利编译并在 iPad 模拟器上运行良好。当我告诉 XCode 4 使用我连接的 iPad 设备时,无法编译相同的程序。问题似乎是当我尝试使用附加的 iPad 时
我是一名优秀的程序员,十分优秀!