我想将"NSLocalizedString“缩写为"_”,所以我使用宏_(x) NSLocalizedString(@x, @__FILE__)。
但是现在,当我想用find . -name \*.m | xargs genstrings生成用于本地化的字符串时,它什么也不会生成。
有什么帮助吗?
发布于 2012-12-10 10:47:02
您可以使用'-s‘参数告诉genstring查找不同的函数:
genstring -s MyFunctionName ....但是,,MyFunctionName必须遵循与其中一个内置NSLocalizeString宏相同的命名和参数约定。
在这种情况下,您不仅可以指定字符串键,还必须指定文档字符串。实际上,您永远不应该在没有字符串和文档的情况下生成字符串文件。在许多语言中,实际的短语或单词将取决于上下文。德语是一个很好的例子,一辆汽车是"das auto“,而不止一辆是"die autos”。还有更多的例子,包括性别,数字,时间,问题与陈述,是与否的变化。文档字符串可帮助您的翻译人员确定要使用的翻译。
此外,最佳实践是使用与本地语言单词不同的键。也就是说使用NSLocalizedStringWithDefaultValue(键、表、包、val、注释)。您可以为表指定mainBundle,为捆绑参数指定nil nil。
您可以将其封装为速记形式,但是仍然必须遵循StringWithDefaultValue名称和参数才能使genstring起作用。
我强烈建议您查看有关本地化提示和技巧的WWDC 2012会议。
莫里斯
发布于 2012-01-20 21:17:31
您可以使用genstrings的-s选项。在man page中:
-s 例程
替换NSLocalizedString的例程。例如,-s MyLocalString将捕获对MyLocalString和MyLocalStringFromTable的调用。
所以我觉得你可以试试:
字符串-s _
发布于 2012-11-11 20:11:26
当我的Python宏使用1个参数而不是2个参数时,我也遇到了同样的问题,所以我编写了NSLocalizedString脚本来完成这项工作。
脚本的第一个参数是宏名称,第二个参数是项目的路径。
import fnmatch
import os
from xml.dom import minidom
function = sys.argv[1]
rootdir = sys.argv[2]
# Generate strings from .m files
files = []
for root, dirnames, filenames in os.walk(rootdir):
for filename in fnmatch.filter(filenames, '*.m'):
files.append(os.path.join(root, filename))
strings = []
for file in files:
lineNumber = 0
for line in open(file):
lineNumber += 1
index = line.find(function)
if (index != -1):
callStr = line[index:]
index = callStr.find('@')
if (index == -1):
print 'call with a variable/macro. file: ' + file + ' line: %d' % lineNumber
else:
callStr = callStr[index+1:]
index = callStr.find('")')
callStr = callStr[:index+1]
if callStr not in strings:
strings.append(callStr)
# Write strings to file
f = open('Localizable.strings', 'w+')
for string in strings:
f.write(string + ' = ' + string + ';\n\n')
f.close()https://stackoverflow.com/questions/8941921
复制相似问题