我想转移到xliff而不是翻译Localizable.strings
和Main.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文件中不可用,但是:(
答案 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 }}