【问题标题】:Mapping API error codes to localised strings in iOS将 API 错误代码映射到 iOS 中的本地化字符串
【发布时间】:2013-03-30 16:57:24
【问题描述】:

我正在编写一个 iOS 应用程序,它从我们公司的服务器下载一些统计数据。如果出现错误,API 会提供错误代码和错误描述。我想保留内部日志的错误描述(始终为英文)并将错误代码映射到一些本地化字符串。哪个是解决这个问题的最佳方法?我正在考虑使用 .plist 文件执行映射,但不是 100% 确定。

【问题讨论】:

    标签: ios localization mapping error-code


    【解决方案1】:

    只要内存占用低,使用带有 NSDictionary 的 plist 文件就可以了。我做过类似的事情。

    但是,还要注意标准方法 NSLocalizedString 并为每种语言使用 .Strings 文件。

    这里是一个如何使用 NSLocalizedString 的例子:

    // Set the label using the localized string
    self.label.text = NSLocalizedString(@"Select choice:", @"Prompt to make a selection.");
    

    第一部分是您在文件Localizable.strings 中定义的密钥。如果字符串文件中不存在条目,则使用键名,因此我使键等于默认文本。在上面的例子中,如果没有找到默认语言的条目,它将只使用键名,即@"Select choice:"

    然后,您创建一个 Localizable.string 文件并按下 Localize 按钮,然后为每种语言创建一个。您的西班牙文可能如下所示:

    /* Contents of Localizable.strings */
    "Select choice:" = "Selecciona la opción:";
    

    当然,你可以有一个英文的,看起来像这样:

    /* Contents of Localizable.strings */
    "Select choice:" = "Select choice:";
    

    NSLocalizedString() 的第二个参数是注释,它是可选的,但 Apple 提供了工具来查找代码中的所有 NSLocalizedString() 条目,并为您在字符串资源文件中生成行,并附上注释。

    【讨论】:

    • @Claus,用一个例子更新了答案,但文档也有更多信息和更好的例子。
    • 非常感谢。我对你建议的事情采取了混合的方法。当我在 API 层收到错误(由错误代码和技术描述组成)时,我会记录描述(因为它对我有用)并创建一个新的 NSError 对象,其中包含消息的本地化版本。关于这一点:当每个代码都映射到我用于 NSError 上的 NSLocalizedString() 调用的键时,我将 API 错误代码存储在 .plist 文件中,因此我有一条用户友好的消息可以在每个弹出窗口中显示语言。你怎么看?
    • @Claus,这听起来不错。我还简单地使用了一个 plist 文件 (NSDictionary),其中包含 Select choice:esSelect choice:de 等键。我创建了一个辅助类,其中包含一个传递键的函数,它返回用户当前的本地化字符串语言。我还在另一个项目中直接使用了 String Resources 和 NSLocalizedString。
    【解决方案2】:

    我要补充一点,如果您的 API 采用语言参数并以该语言返回消息,您可以像这样使用它的可用语言(目标 C):

    NSArray *availableLanguages = @[@"en", @"es"]; // API's available languages
    NSString *preferredLanguage = [NSBundle preferredLocalizationsFromArray:availableLanguages].firstObject;
    

    然后将preferredLanguage 传递给API。

    (API 甚至可能会调用以获取它支持的可用语言。)

    https://developer.apple.com/library/content/technotes/tn2418/_index.html

    【讨论】:

      猜你喜欢
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 1970-01-01
      • 2017-11-25
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      相关资源
      最近更新 更多