问题描述
我有一个用于跟踪/管理牲畜的应用程序。目前它支持一种羊。我们希望开始支持多种不同的物种,例如山羊和牛。我的第一个想法是创建类似于NSLocalizedString(text,comment)
的类似Speciesstring(text,species,comment)
的东西,它将使用英语字符串和物种名称并将“绵羊”一词Ram
转换为“牛”一词Bull
。在此内部,我可以使用NSLocalizedString()
进一步将其翻译成适当的语言,以便将来也可以支持多种语言。
我看到可以将tableName
传递给NSLocalizedString()
,以便它将使用除Localizeable.strings
之外的其他文件,这将允许我以编程方式从西班牙语文件中提取值重点是牛而不是绵羊(Localizeable-sheep.strings
和Localizeable-cattle.strings
之类的东西),但这对故事板上的所有文字都没有帮助。
我知道情节提要板内置了对本地化的支持,但是我遇到的问题是,当文本进入我的代码时,例如在viewDidLoad
中,它已经被翻译了。其他语言,例如西班牙语。我希望找到一种方法,使我的视图中的文本在到达我的代码时已经具有正确的Language + Species组合。但是,即使我确实依靠编程方式换出了字符串来使用正确的Species,英语也已经更改为西班牙语,并且我得到的是Carnero
而不是Ram
,如果我尝试通过直到我的Speciesstring()
都与我的基础数据不匹配,因为我的基础数据是从文本的英文版本中删除的。
是否可以创建自定义语言?我已经看过此code that is used to change the localization language on the fly,它可以在en
和es
之间交换,但是我无法创建自己的伪造语言,例如en-sheep
和{{1} }。
是否存在:
a)一种创建自己的自定义语言的方法,以便本地化系统可以选择我正确的Language + Species组合?
或
b)告诉情节提要从哪个表名/文件名提取字符串的方法?这样,我的es-sheep
不会只有一个字符串文件,而被称为Main.storyboard
,但我可以拥有
es.lproj/Main.strings
和es.lproj/Main-sheep.strings
?
解决方法
我认为我无法使用“自定义语言”只是偶然的疏忽。我创建了>>> a = ['Quattro TT']
>>> eval(str(a))
['Quattro TT']
,并使用the other SO post以编程方式将我的语言设置为es-sheep.lproj/Main.strings
,但这似乎不起作用...
...但是事实证明我已经创建了这些目录和文件,但是忘记了将它们添加到项目中。将它们手动添加到项目后,它开始工作,并且可以使用自定义的本地化版本。