5

嗨,我非常坚持在 iOS 上进行本地化的过程。

以下是我的理解:

  • 如何进入项目浏览器并为不同国家/地区设置基础本地化
  • 如何制作一个字符串文件并将其设置为本地化到基础本地化中选择的特定国家之一,例如简体中文
  • 键值对以及如何对应单词“HELLO WORLD”=“其他语言”;with 在本地化的字符串文件中

然而,这个带有简单标签的应用程序在编译时写着“hello world”并不会在中文模拟器中变为中文。

这是我认为我出错的地方:

我想我需要将屏幕上的字符串连接到本地化字符串文件中包含的字符串。

我是否为每种语言制作一个单独的字符串文件?

我正在寻找一个非常简单的应用程序存根,其中只包含一些被翻译成不同语言的标签,因此我可以学习如何使其连接和工作,以便我可以在其他地方使用它。

有一个中文故事板,我需要做任何工作还是留空?

在阅读了几个小时的文档后,我似乎在兜圈子,我对苹果在这个问题上的文档印象不深,认为它缺少一些东西。

4

2 回答 2

6

对于本地化,您需要执行以下操作:

  1. 为每种语言添加不同的 .strings 文件
  2. 为每个语言文件添加 Key 值
  3. 利用:

NSLocalizedString(yourKey, nil);

或者

[[NSBundle mainBundle] localizedStringForKey:(yourKey) value:@"" table:nil]

用于获取传递密钥的本地化字符串。

教程:

  1. iOS 应用程序的本地化变得简单
  2. iPhone 应用程序本地化指南
  3. 准备您的 iOS 应用程序以在 Xcode 中进行本地化
于 2013-05-07T11:44:53.503 回答
3

让它漂亮

对于 Swift,有更好的解决方案可以让您的本地化稍微好一点 - 不是那么混乱。您可以使用以下扩展名:

extension String {

    var localized: String {
        return NSLocalizedString(self, tableName: nil, bundle: NSBundle.mainBundle(), value: "", comment: "")
    }


    func localizedWithComment(comment:String) -> String {
        return NSLocalizedString(self, tableName: nil, bundle: NSBundle.mainBundle(), value: "", comment: comment)
    }
}

现在,无论何时您想要本地化某些内容,您都可以将其作为字符串属性请求:

let text = "my-localization-key".localized

它将根据您当前的系统语言/区域设置获取本地化字符串。

一些提示

如果您有更大的项目,那么值得寻找经理,为您处理本地化导出/添加新语言。例如,我使用 Crowdin - 但您可能会发现一些服务更有吸引力。很棒的是,您不必手动完成所有操作,您只需插入键/翻译并为您完成导出,适用于您拥有的所有语言。

此外,请遵循良好的密钥命名。根据我所看到的人们所做的/我的经验,我认为按逻辑组件/模块命名键是明智的,它们所属的位置,例如:

"Profile.NavigationBar.Title" = "Profile";
"Profile.NavigationBar.Button.Edit" = "Edit;

这样,您可以立即看到您会在哪里找到它。

最后,由于您可以做的错误数量,本地化通常是巨大的痛苦。有生成器可以根据您的本地化创建实际代码,因此编译器会为您检查它。你可以在 GitHub 上获得它

祝你好运!

Swift 4+ 的更新,它改变了 bundle-access 语法:

extension String
{
    var localized: String
    {
        return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
    }


    func localizedWithComment(comment:String) -> String
    {
        return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: comment)
    }
}
于 2015-12-09T23:15:29.740 回答