ios - 将字符串保存在一个地方的最佳实践

标签 ios swift localization

我正在建立一个新的 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/

相关文章:

ios - 如何在关闭任务完成后删除监听器?

ios - 将选定行的值传递给 View Controller

ios - 使 View 居中并填充可用高度而不离开屏幕

ios - 如何删除特定区域的手势识别器?井字游戏

ios - 我们如何正确本地化钱包通行证的 strip.png?

来自ManagedBeans的JSF支持的语言

java - 使用 java.util.zip.* 将带有日语字符的文件名写入 zip 文件时变成垃圾

ios - 是否有类似于 PC/Mac 世界的 iOS 基准测试程序?

ios - UIImagePickerController 在 iOS 13 中不返回实时照片

swift - UIScreenEdgeRecognizerGesture 像 safari 一样流畅