【问题标题】:How to Localize NSString with format [duplicate]如何使用格式本地化 NSString [重复]
【发布时间】:2018-01-10 17:20:58
【问题描述】:

如何用格式本地化 NSString。

int value = 20;

NSString *str = @"hello";   

textLabel.text = [NSString stringWithFormat:@"%d %@", value, str];

我试过了

textLabel.text = [NSString stringWithFormat:NSLocalizedString(@"%d %@", @"%d %@"), value, str];

但是没有用。任何帮助表示赞赏。

【问题讨论】:

  • 据我了解,本地化字符串是预先定义的,除非您有一个返回给定字符串的本地化字符串的服务调用,否则无法更改。
  • 请阅读Resource Programming Guide中的格式化字符串资源段落
  • 您是要本地化格式化字符串、您的字符串 (@"hello"),还是两者都本地化?编辑您的问题以明确“不起作用”的含义。这将帮助人们帮助你。
  • 我想同时转换文本和整数@CRD
  • 您希望如何“转换 [the] 整数”?您是否希望 20 hello 可以本地化为,比如西班牙语,veinte hola?您当前仅尝试本地化 格式字符串,您并未尝试本地化 strvalue。编辑您的问题并指出您希望得到的结果、字符串文件中的内容等,这将有助于人们为您提供帮助。

标签: objective-c nsstring string-formatting nslocalizedstring


【解决方案1】:

您的本地化字符串本身必须是格式模式:

"ValueAndStringFMT" = "Value %1$d and string %2$@";

在你的代码中:

textLabel.text = [NSString 
    stringWithFormat:NSLocalizedString(@"ValueAndStringFMT"),
    value, str
];

为什么是%1$d 而不仅仅是%d?所以你可以改变顺序。例如。在某些语言中,您可能希望交换顺序:

"ValueAndStringFMT" = "Cadena %2$@ y valor %1$d";

当然,这有点危险,如果有人使用的占位符比您的字符串调用提供的更多或使用了错误的类型,您的应用可能会崩溃。如果您想安全起见,请改为搜索替换:

"ValueAndStringFMT" = "Value [[VALUE]] and string [[STRING]]";

在你的代码中:

NSString * string = NSLocalizedString(@"ValueAndStringFMT");
string = [string stringByReplacingOccurrencesOfString:@"[[VALUE]]" 
    withString:@(value).stringValue
];
string = [string stringByReplacingOccurrencesOfString:@"[[STRING]]" 
    withString:str
];
textLabel.text = string;

这样最坏的情况是占位符没有展开,这意味着占位符被明显地打印在屏幕上,但至少你的应用不会因为有人弄乱了本地化字符串文件而崩溃。

如果您需要本地化其中一个格式变量,那么您需要先在自己的步骤中执行此操作:

NSString * str = NSLocalizedString(@"hello");

【讨论】:

  • 没关系。谢谢。
猜你喜欢
  • 1970-01-01
  • 2023-02-06
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多