首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于NSLocalizedString,字符串不能与宏一起使用

对于NSLocalizedString,字符串不能与宏一起使用
EN

Stack Overflow用户
提问于 2012-01-20 21:09:04
回答 4查看 1.9K关注 0票数 2

我想将"NSLocalizedString“缩写为"_”,所以我使用宏_(x) NSLocalizedString(@x, @__FILE__)

但是现在,当我想用find . -name \*.m | xargs genstrings生成用于本地化的字符串时,它什么也不会生成。

有什么帮助吗?

EN

回答 4

Stack Overflow用户

发布于 2012-12-10 10:47:02

您可以使用'-s‘参数告诉genstring查找不同的函数:

代码语言:javascript
复制
genstring -s MyFunctionName ....

但是,,MyFunctionName必须遵循与其中一个内置NSLocalizeString宏相同的命名和参数约定。

在这种情况下,您不仅可以指定字符串键,还必须指定文档字符串。实际上,您永远不应该在没有字符串和文档的情况下生成字符串文件。在许多语言中,实际的短语或单词将取决于上下文。德语是一个很好的例子,一辆汽车是"das auto“,而不止一辆是"die autos”。还有更多的例子,包括性别,数字,时间,问题与陈述,是与否的变化。文档字符串可帮助您的翻译人员确定要使用的翻译。

此外,最佳实践是使用与本地语言单词不同的键。也就是说使用NSLocalizedStringWithDefaultValue(键、表、包、val、注释)。您可以为表指定mainBundle,为捆绑参数指定nil nil。

您可以将其封装为速记形式,但是仍然必须遵循StringWithDefaultValue名称和参数才能使genstring起作用。

我强烈建议您查看有关本地化提示和技巧的WWDC 2012会议。

莫里斯

票数 4
EN

Stack Overflow用户

发布于 2012-01-20 21:17:31

您可以使用genstrings-s选项。在man page中:

-s 例程

替换NSLocalizedString的例程。例如,-s MyLocalString将捕获对MyLocalString和MyLocalStringFromTable的调用。

所以我觉得你可以试试:

字符串-s _

票数 3
EN

Stack Overflow用户

发布于 2012-11-11 20:11:26

当我的Python宏使用1个参数而不是2个参数时,我也遇到了同样的问题,所以我编写了NSLocalizedString脚本来完成这项工作。

脚本的第一个参数是宏名称,第二个参数是项目的路径。

代码语言:javascript
复制
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()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8941921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档