【问题标题】:iOS Localization of Server Provided Strings服务器提供的字符串的 iOS 本地化
【发布时间】:2018-11-05 15:41:36
【问题描述】:

我需要弄清楚在 iOS 中显示本地化 UI 文本的标准/最佳实践是什么,来自从远程源接收的文本,例如 API 驱动的服务器提供的文本。静态文本的 iOS 本地化不是问题,我们已经有了管理它的系统。

在我看来,正确和最好的做法是让服务器发送翻译后的文本并在应用程序上显示为接收到的内容,但这样做存在一些问题,例如应用程序的区域设置/当前语言可能与服务器上的当前设置不同。这提出了电话当前设置与服务器设置之间的方言或语言可能不匹配的可能性。此外,我们正在考虑让服务器这样做会破坏任何 S.O.L.I.D.设计原则。

所以,有两种可能性。服务器提供翻译文本或应用程序提供。

我们可能会向服务器提供一个参数来指示设备设置的区域设置(即“en-us”)。我想这将作为 HTTP 请求标头参数发送。

也有人建议移动应用为自己提供类似的功能。这将涉及维护某种类型的数据存储(待定),以便将显示字符串提供给外观并返回已翻译的字符串。即:func translate(uiText: String) -> String。在内部,它可以确定用户的语言环境并将其用作选择正确翻译文本所需的查询的一部分。同样,必须决定其实施,但这不是我希望找到解决方案的问题。

总而言之,我真正需要的是知道什么是翻译服务器提供的要显示给用户的文本的标准做法,以及是否有任何框架旨在帮助满足这一要求(假设解决方案应该存在于移动应用中)?

在我看来,这是服务器提供的最佳功能。另请注意,我们有一个需要类似增强功能的 Android 应用。

【问题讨论】:

    标签: ios localization


    【解决方案1】:

    我想我找到了这个问题的解决方案,但我不想将其标记为已接受的答案,除非我能得到一些反馈来强化我所学的内容。

    我所做的大部分研究都让我找到了适用于 Web 开发的方法,这很相似,因为它仍然是开发,但与移动设备有很大不同。移动端是编译的,这使得在哪里做表示逻辑平衡的优缺点有点不同。

    一些消息来源说它属于它来自的服务器。一些消息来源说客户应该这样做。 (我会在最后发布参考资料。)

    我在我的同事之间就该主题展开了讨论,在这里我找到了我认为的最佳解决方案。 (当然欢迎评论和批评。)

    我将在此将服务器通过 API 提供的数据称为“服务器”。

    对于服务器提供的每个要在 UI 中显示的字符串,我需要有一些方法在 iOS 应用程序中静态定义这些字符串。理想情况下,我认为每个显示字符串的枚举都可以。我可以在枚举的定义中用NSLocalizedString 包装每个字符串。将枚举设为String 类型,并根据从服务器接收到的字符串初始化枚举的实例。枚举将返回NSLocalizedString。 iOS 本地化系统应导出所有这些本地化字符串,我将收到翻译,然后它们将存在于各个 .strings 文件中。

    EG:

    enum Emotion: String {
      case happy = "Happy"
      case sad = "Sad"
      case angry = "Angry"
      case joy = "Joy"
      case amused = "Amused"
      case bored = "Bored"
      case undefined = ""
    
      func translation() -> String {
          switch self {
          case .happy:
              return NSLocalizedString("Happy", comment: "Happy")
          case .sad:
              return NSLocalizedString("Sad", comment: "Sad")
          case .angry:
              return NSLocalizedString("Angry", comment: "Angry")
          case .joy:
              return NSLocalizedString("Joy", comment: "Joy")
          case .amused:
              return NSLocalizedString("Amused", comment: "Amused")
          case .bored:
              return NSLocalizedString("Bored", comment: "Bored")
          default:
              return "--"
          }
        }
      }
    

    实施:

        let thisCameFromTheServer: String? = "Happy"
        let emo = Emotion(rawValue: thisCameFromTheServer ?? "") ?? .undefined
    

    参考文献

    【讨论】:

    • 我无法完成此任务。完成后,我会将其标记为已接受的答案(如果事情按我的预期进行)。
    猜你喜欢
    • 1970-01-01
    • 2012-02-23
    • 2011-12-18
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 2020-06-04
    相关资源
    最近更新 更多