jjzjj

iphone - iOS 本地化, label with number and word together

coder 2024-01-21 原文

我想本地化我的游戏。我的一些标签就像 [@"Score: %i", score],分数可以是任何数字。那么我还可以使用字符串文件本地化吗? 这就是我目前所做的,但需要做很多工作

    CCLabelTTF* bestLabelWord = [Helper createLocalizedLabelWithStringUpperCase:@"BEST" color:ccBLACK];
    CCLabelTTF* bestLabelNumber = [Helper createUnlocalizedLabelWithString:[NSString stringWithFormat:@"%i", bestScore] color: ccBLACK];
    bestLabelWord.anchorPoint = ccp(0, 0.5f);
    bestLabelNumber.anchorPoint = ccp(0, 0.5f);
    bestLabelWord.position = ccp(menuPosX, menuPosY2);
    bestLabelNumber.position = ccp(menuPosX + bestLabelWord.contentSize.width + 5, menuPosY2);
    [self addChild:bestLabelWord z:kZLabel];
    [self addChild:bestLabelNumber z:kZLabel];

这里我把@"Score"和@"%i"分开,score分成2个标签(word和number)分别放置。 那么我怎样才能把它们放在一个标签中呢?我可以在 localization.strings 文件中放入“NSString stringWithFormat”吗?

最佳答案

是的,你可以做到这一点。它看起来像这样(未编译;希望没有错字):

NSString *scoreFormat = NSLocalizedString(@"Score: %d", @"Score format");
NSString *scoreString = [NSString stringWithFormat:scoreFormat, bestScore];

你的英语字符串文件是:

/* Score format */
"Score: %d" = "Score: %d";

%d%i 没有区别。它们均由标准指定。我个人更喜欢表达它是“十进制”(相对于 %x 十六进制)而不是“整数”(相对于 %f float )。不过没关系。

您应该在字符串文件中包含整个格式语句。您正在本地化整个格式语句 Score: %d。这样做的理由是允许顺序可能不同的语言。例如,如果有一种语言的正确翻译是 "%d score" 或一种有意义的语言,您将不得不说出相当于 Score: %d pointsScore: %d number.

如果你不想要这种本地化,你总是在标签后面放一个冒号,然后是一个数字,不管是什么语言,那么你可以只本地化标签,就像你在原始代码中一样,或者像这样:

NSString *localizedLabel = NSLocalizedString(@"Score", @"Score");
NSString *scoreString = [NSString stringWithFormat:@"%@: %d", localizedLabel, bestScore];

您应该避免按照您的建议使用可变参数调用 NSLocalizedString。这很令人困惑,并且会妨碍使用 genstrings 创建字符串文件。也就是说,下面的代码不是问题:

NSString * const kScoreLabelKey = @"Score";
NSString * const kPriceLabelKey = @"Price";

NSString *GetLocalizedStringForKeyValue(NSString *key, NSInteger value)
{
  NSString *label = [[NSBundle mainBundle] localizedStringForKey:key value:nil table:@"Labels"];
  NSString *valueLabel = [NSString stringWithFormat:@": %d", value];
  return [label stringByAppendingString:valueLabel];
}

...

NSString *label = GetLocalizedStringForKeyValue(kScoreLabelKey, bestScore);

...

(在 Labels.strings 中):

"Score" = "Score";
"Price" = "Price";

注意事项:

  • 我为此创建了一个单独的字符串文件,名为 Labels.strings。这样它就不会影响使用 genstrings 和主要的 Localizeable.string.
  • 我使用字符串常量作为键。这会将所有使用的字符串放在文件顶部的一个位置,便于根据 Labels.strings 进行审核。

关于iphone - iOS 本地化, label with number and word together,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9106339/

有关iphone - iOS 本地化, label with number and word together的更多相关文章

  1. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  2. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  3. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  4. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  5. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  6. ruby - 为什么不能使用类IO的实例方法noecho? - 2

    print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

  7. ruby - 在 Rails 项目中测试本地版本的 gem - 2

    我的Rails站点使用了一个确实不是很好的gem。每次我需要做一些新的事情时,我最终不得不花费与向实际Rails项目添加代码一样多的时间来为gem添加功能。但我不介意,我将我的Gemfile设置为指向我的gem的GitHub分支(我尝试提交PR,但维护者似乎已经下台)。问题是我真的没有找到一种合理的方法来测试我添加到gem的新东西。在railsc中测试它会特别好,但我能想到的唯一方法是a)更改~/.rvm/gems/.../foo。rb,这看起来不对或者b)升级版本,推送到Github,然后运行​​bundleup,这除了耗时之外显然是一场灾难,因为我不确定我所做的promise是否正

  8. ruby - 如何捕获所有 HTTP 流量(本地代理) - 2

    我希望访问我机器上的所有HTTP流量(我的Windows机器-不是服务器)。据我了解,拥有一个本地代理是所有流量路线的必经之路。我一直在谷歌搜索但未能找到任何资源(关于Ruby)来帮助我。非常感谢任何提示或链接。 最佳答案 WEBrick中有一个HTTP代理(Rubystdlib的一部分)和here's一个实现示例。如果你喜欢生活在边缘,还有em-proxy伊利亚·格里戈里克。这postIlya暗示它似乎确实需要一些调整来解决您的问题。 关于ruby-如何捕获所有HTTP流量(本地代理)

  9. ruby-on-rails - Rails 3,在RAILS_ROOT上方显示来自本地文件系统的jpg图片 - 2

    我正在尝试找出一种方法来显示来自不在RAILS_ROOT下(在RedHat或Ubuntu环境中)的已安装文件系统的图像。我不想使用符号链接(symboliclink),因为这个应用程序实际上是通过Tomcat部署的,而当我关闭Tomcat时,Tomcat会尝试跟随符号链接(symboliclink)并删除挂载中的所有图像。由于这些文件的数量和大小,将图像放在public/images下也不是一种选择。我查看了send_file,但它只会显示一张图片。我需要在一个格式良好的页面中显示6个请求的图像。由于膨胀,我宁愿不使用Base64编码,但我不知道如何将图像数据与呈现的页面一起传递下去。

  10. Ruby 服务器在本地主机(teambox)之外非常慢 - 2

    我刚刚在我的Ubuntu9.10服务器上安装了TeamBox。我使用提供的服务器脚本在端口3000上启动并运行它。它的运行速度非常慢,从另一台计算机连接时每个HTTP请求最多需要30秒。我使用链接从shell加载TeamBox,一点也不花时间。然后我设置了一个SSH隧道,它再次运行得非常快。我通过此服务器上的apache以及SAMBA等运行了大约30个虚拟主机,没有任何问题。我该如何解决这个问题? 最佳答案 我的redmine(ruby,webrick)太慢了。现在我解决了这个问题:apt-getinstallmongrelruby

随机推荐