使用NSLocalizedString

时间:2016-06-14 08:49:25

标签: ios cocoa localization translation xliff

我想转移到xliff而不是翻译Localizable.stringsMain.strings文件,但我发现我以不正当的方式使用NSLocalizedString(我做了5年其实...)。

我不希望将翻译直接放在我的代码中,所以我使用通用密钥而不写任何评论:

NSLocalizedString("general.error", comment: "")

然后我将字符串包含在Localizable.strings

"general.error" = "An error occured";

到目前为止这么好(也许)。现在,当我导出xliff文件时,我发现source只是我的通用密钥,显然翻译人员无法猜测该密钥的写作target:/

所以我的问题是:唯一的解决方案是直接在NSLocalizedString内移动所有翻译吗?

NSLocalizedString("An error occured", comment: "")

或评论内...(我真的不喜欢这个解决方案)

如果字符串真的很长怎么办?将一行3行直接放入代码中似乎很奇怪:/

还有其他有趣的解决方案吗?

修改

我已经尝试过使用常量,但似乎这个解决方案在swift中不起作用。我创建了一个String.swift文件,其中我添加了常量:

let thisIsMyLonStringID = "An here I can put the long translation";

我可以这样使用它:

NSLocalizedString(thisIsMyLonStringID, comment: "")

当我导出到XLIFF时,这个字符串在xliff文件中不可用,但是:(

3 个答案:

答案 0 :(得分:5)

我在这里用我的临时解决方案回答了问题。它似乎工作得很好。

我没有对Base文件使用Localizable.strings语言,而是使用English,所以我只是从文件检查器中取消选择了Base - > Xcode中的本地化区域以及我提示的问题类似于"您希望使用哪种语言作为基础" ...我选择了英语。

现在我可以继续使用NSLocalizedString使用通用密钥并将翻译放在Localizable.strings中,当我自动导出到xliff时,源代码将填充正确的翻译,而不是密钥。

答案 1 :(得分:0)

您需要直接在NSLocalizedString文件中拨打Strings.swift。例如:

// Strings.swift
let myString = NSLocalizedString("some very long string", comment: "")

// Usage
print(myString)

这样,字符串导出过程将能够确定传递给NSLocalizedString的字符串文字。

答案 2 :(得分:-1)

是的,您的问题有一个非常优雅的解决方案。问题是非常长的字符串正在获取我们的代码的一部分,使其更难阅读和混乱。

<强>解决方案: 创建LocalizationKeys.h

#ifndef Project_LocalizationKeys_h
#define Project_LocalizationKeys_h

static NSString *const LocalizationKeyForVeryLongString =
@"Your Very Very Long String";

#endif

在您的代码中:ViewController.m

NSLocalizedString(LocalizationKeyForVeryLongString, "");

因此上面的解决方案非常long messy strings并用elegant and readable Key Strings替换它们,而且现在我们有关键字符串的单独文件,因此每当需要更改或查找时,请直接引用{{1 }}