- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个包含多个目标的项目,它们代表同一个应用程序,只是具有不同的样式和翻译。
由于每个目标几乎整个项目看起来都一样,所以我只需要在 Localizable.strings
文件中有几个字符串,我需要有所不同。而且我不想将整个巨大的 Localizable.strings
文件复制到每个项目,因为它只有几行不同。
由于项目中包含第三方库/SDK,我只需要 1 个字符串文件。所以我不能将 tableName
用于 localizedString
。
问题 是 - 我需要有一个灵活的可能性来分别为每个目标覆盖 Localizable.strings
中的几行。而且我不喜欢只将整个文件复制到每个目标的想法,因为它会导致将来烦人的流程,以防万一我有 10 个目标并且我需要向所有目标添加 1 个字符串。
目标 是拥有 1 个巨大的 Localizable.strings
文件,其中包含所有字符串,这对所有目标都是通用的,并且每个目标都有小的配置应该告诉不同的字符串。所以 target 的文件应该合并并覆盖通用的文件。
据我所知,Xcode 本身不支持它,所以我可能正在寻找一个可以让它工作的脚本。
因此,脚本应该查看通用文件和目标文件的可本地化文件,合并它们,如果在两者中都定义了某些键,那么它应该使用目标文件中的键。
谁能帮我写这样的脚本?
附言.xcassets
存在类似的问题,CocoaPods 通过将多个 Assets 合并为 1 个来解决它,并且它按预期工作 - 如果某些目标具有包含已包含在共同 Assets ,那么来自目标的 Assets 将取代它。
附注 2。 Android 开发者原生支持类似的功能——每个图像、每个翻译都可以被“子”缺陷或任何名称覆盖:)
最佳答案
好的,更容易做的事情是 shell/python 脚本,因为它适用于每个构建服务器。我假设您对每个目标都有不同的方案(否则就没有意义)。所以你可以做的是:
假设您的目标被命名为:
1) 创建单独的文件包含所有应该不同的字符串(我将把它放在 Localizable
目录下。
您的 Localizable.strings 文件可能如下所示:
"someGeneralString" = "General string 1";
"AppName" = "This is a string that you probably need to change";
"someOtherGeneralString" = "General string 2";
您的任何 targetX.strings
文件可能如下所示:
"AppName" = "target[x]"
这是它在您的项目中的样子:
请注意,您的 target
可本地化文件的目标成员资格应仅设置为一个目标,但您的 Localizable.strings
应适用于所有目标!
这就是项目配置的全部内容。让我们开始编写脚本(为此我将使用 Python):
#!/usr/bin/python
import sys
supportedLanguages = ["en","pl"]
commonPath = ".lproj/Localizable.strings"
keys = ["AppName"]
class CopyLocalizable():
target = ""
def __init__(self,arg):
self.target = arg
self.perform()
def perform(self):
for lang in supportedLanguages:
pathToLocalizable = lang+commonPath
textToFile = ""
with open(pathToLocalizable,"r") as languageFile:
for line in languageFile.readlines():
for key in keys:
if key in line:
textToFile += self.foundAndReplace(key,lang)
else:
textToFile += line
self.saveInFile(pathToLocalizable,textToFile)
def foundAndReplace(self,key,lang):
pathToTargetFile = "Localizable/"+lang+".lproj/"+self.target+".strings"
with open(pathToTargetFile,"r") as targetFile:
for targetLine in targetFile.readlines():
if key in targetLine:
return targetLine
def saveInFile(self,file,stringToSave):
with open(file,"w+") as languageFile:
languageFile.write(stringToSave)
你可以自己优化。这是我能想到的更容易完成工作的脚本。
最后让我们稍微自动化一下: - 去你的目标 - 添加一个新的构建阶段 - 添加新脚本:
export PATH="/usr/local/bin:$PATH"
cd SO45279964/
python localize.py target[x]
然后看着奇迹发生;)
http://www.giphy.com/gifs/26n6NKgiwYvuQk7WU
在这里您可以找到我为运行此示例而创建的示例项目: https://github.com/JakubMazur/SO45279964
关于ios - Xcode Localizable.string 多目标问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45279964/
我试图为我的 iOS 项目添加多语言(英语、俄语)支持。我使用了这个问题的教程: > http://www.ibabbleon.com/iphone_app_localization.html > h
概述 在另一个问题中,我问了 deploying localizations for some runtime compiled UserControl 's .但是,在开始部署本地化之前,我需要一种
我是 Objective C 的新手(如果相关的话,我正在使用 Xcode)。我试图找到这个问题的答案,但找不到任何地方......我的问题是:是否有可能更改 Localizable.strings
我在我的项目中添加了一个 Localizable.strings,但它不起作用...这是一个示例: NSLog(@"Welcome Text: %@", NSLocalizedString(@"We
是否可以动态添加到 Localizable.strings 文件?我的应用程序将下载新对象,我需要添加翻译。如果我能以某种方式添加到 Localizable.strings 文件,我就可以调用 NSL
我在名为“本地化”的分支上添加了本地化功能。但是,我必须提交一个热修复程序,所以我更改了分支,进行了修复并返回到“本地化”分支。现在 NSLocalizableStrings() 不再适用于任何语言;
在我的应用程序中,我希望能够检测用户何时使用我的英文版 localizable.strings。最好的方法是简单地在 localizable.strings 的英文版中放置一个标志并检查其值是否为“Y
我想本地化“1 of 9”,1和9是int参数,我的代码如下 context = [NSString stringWithFormat:NSLocalizedString(@"%d of %d",
当我从 xcode3 切换到 xode4 时,我发现,对于 App 中的几个字符串,我必须编译两次才能使其本地化......有人遇到过同样的问题吗? 最佳答案 当在“资源”构建阶段引用字符串文件两次时
我有一个包含字符串的 Localizable.strings 文件: "m3h" = "m\u00B3/h"; 它应该返回 m³/h,但我得到的是 mu00B3/h。如何从包含特殊字符的 Locali
我在 MonoTouch(5.2.12)/MonoDevelop(3.0.3.2) 中开发 ios 应用程序 (iPhone) 我试着本地化它。 我创建了本地化文件夹 (de.lproj)(添加 ->
我有一个可以使用阿拉伯语和英语两种语言的应用程序。我为每个文件制作了一个可本地化的字符串文件,并且它工作正常,当我更改系统语言时,应用程序的语言正在更改,但是当用户仍在内部时按下按钮更改应用程序语言时
由于某些奇怪的原因,只有 Localizable.strings 中的部分文本可以正确翻译。如果字符串包含更多的 1 个单词(英文),它将不会被翻译。我确保它是相同的字符串(复制并粘贴) "Login
我的应用程序中大约有 15 种语言,所以我有 15 个这样的文件:localizable.strings(language name) 它们只有一个来源,区别仅在于表达式的右侧部分。(例如:local
我的语言有问题。对于使用 NSLocalizedString 定义的每个条目,我只能在我的设备上看到 ID_String。 Storyboard中设置的所有文本/图像等都正确显示。如果我使用模拟器,一
我想问你一个与本地化相关的 iOS 应用程序的问题。我的应用程序有一些目标,我们使用为每个客户个性化的相同应用程序库,这意味着每个目标都有自己的设计、颜色、字体,并且希望每个目标 View 和标签都有
我正在使用 Localizable.string 将应用程序本地化为德语。一切顺利,直到我需要在本地化字符串中使用 ü 或 ß 类型的字母。 构建时出现错误。 de.lproj/Localizable
我的 Localizable.strings 文件已损坏,我不知道如何恢复它。 如果我将它作为纯文本文件打开,它以我无法在此处复制的奇怪字符开头。 如果我将文件保留为应用构建。如果我进行任何更改,要么
我知道这篇文章似乎重复了....但我已经研究过但没有找到答案...请帮助我。 我有一个应用程序翻译成两种语言(葡萄牙语和英语),我的字符串和 Storyboard是葡萄牙语,例如: [[self la
在 Localizable.strings 文件中,如果我添加转义字符 ",则文件构建过程失败。 例如: "Now open ""Phone"" application" = "Maintenant
我是一名优秀的程序员,十分优秀!