我正在建立一个新的 iOS 项目,想知道是否应该使用 Localizable.strings
文件来保留我的字符串,即使不打算添加对其他语言的支持。
我之前尝试过使用 struct 来保留我的字符串,但我想知道这是否是一种好的做法。使用 Localizable.strings
也可以在库 R.swift
上正常工作,另一个让我难以选择策略的原因。
最佳答案
在这种情况下没有“最佳实践”。有一些做法,有些可能比其他做法更适合您的情况。
你是说你不打算添加对其他语言的支持,但如果你改变主意,你似乎想为此做好准备。因此,首先要问问自己,您正在寻找解决方案的实际问题是什么。我想说的是,问题在于应用程序已经推出后的开销,您需要寻找应用程序中使用的所有字符串并将它们包装到 NSLocalizedString
中。这通常包括无休止的测试,您最终很可能会忘记至少本地化一些字符串。
您可以从一开始就将内容包装到 NSLocalizedString
中,这最终会帮助您使用 native 工具从代码中提取所有字符串。那么问题仍然是 Storyboard;与其说是从 Storyboard中提取字符串,不如说是删除那些您不打算翻译的默认文本(例如“名称”实际上是某个名称,不应翻译)。所以根据我的经验,这是一个半解决方案。
要解决 Storyboard 问题,应该有一个工具(我不记得是哪个,也许是其他 CocoaPod)可以让您忽略不应翻译的 View 。所以在这种情况下你需要使用两件事; NSLocalizedString
并忽略 IB 中不可翻译的项目。
正如您所说的那样,您可以使用 R.Swift 直接从 strings
文件中获取字符串。这非常简洁,但在您开发时也会极度分散注意力。这样做会迫使开发人员首先在 strings
文件中输入文本,然后才能使用它。我个人讨厌那样。这也可能是多个开发人员发生冲突的问题。更不用说这几乎没有解决您的 Storyboards 问题。
创建一个单独的结构系统来保存所有字符串确实非常有效。您不必查找代码中的所有字符串,也不需要跳转到 strings
文件(在开发时转到另一个源会更愉快,因为您可以导航到它非常简单地)。您还保留了一个良好的结构,假设您像 label.text = Strings.Settings.User.firstNamePlaceholder
那样维护它,这可以帮助您轻松找到您需要或已弃用的字符串。您可以轻松移除整个屏幕。但这对开发人员来说仍然是一项开销,而且您仍然有一个问题,即现在您需要从 Storyboard 中拖出所有 outlet 来为它们设置本地化字符串。
执行此过程后,您最终可以选择直接使用 NSLocalizedString
或使用 R.Swift。事实上,您可以什么都不用,并且仍然不会有太多的加类时间切换到两者中的任何一个(再次假设在代码中寻找这些字符串需要花费大部分时间)。
就我个人而言,我会什么都不做,或者创建一个自定义结构系统,然后什么都不用,只返回原始字符串。但这真的取决于你的项目有多大,什么类型的项目, Storyboard里有多少东西……这也取决于你期望什么时候有更多的资源,所以你要么现在就花更多的时间,要么不要打扰稍后,或者您现在只做最简单的事情,准备在确实需要本地化时进行大量工作(希望发生这种情况时它是“甜蜜”问题之一,因为这意味着您有大量用户)。
关于ios - 将字符串保存在一个地方的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56323409/