ios - 如何组合 2 个键以实现可本地化

标签 ios objective-c localization nsstring nslocalizedstring

我有一个可本地化的字符串文件,其中包含

"please" = "Please";
"try.again" = "try again.";

在我的应用程序中,我想使用

"please" = "Please";
"try.again" = "try again.";

同时造一个句子 = $please + $try.again = Please try again.

所以,我尝试过这种方法

+ (NSString *)pleaseLocalizedString {
return NSLocalizedStringFromTableInBundle(@"please", @"Localizable",[Bundle bundle], @"Please button");
}

+ (NSString *)tryAgainLocalizedString {
return NSLocalizedStringFromTableInBundle(@"try.again", @"Localizable",[Bundle bundle], @"try again button");
}

但是再次使用这种方式我必须使用 stringWithFormat 将这两种方法结合起来造一个句子...... 我怎样才能简单地做到这一点?有什么想法吗?

最佳答案

不要尝试将两个单独的本地化字符串合并为一个字符串。正确的句子结构不容易跨语言推广。有些语言是从右到左的,而有些是从左到右的。此外,某些单词在组合时可能具有不同的含义,尤其是在中文等语言中。

如果你在某些地方单独需要“请”,而在其他一些地方需要单独“再试一次”,并且在其他不同的地方需要单独“请再试一次”,那么对三个不同的字符串使用三个不同的键。

如果只需要“请再试一次”,不需要“请”和“再试一次”,那么就只有“请再试一次”一个键。

话虽如此,所问问题的解决方案是将第三个字符串定义为:

"p.t.a" = "%1$@ %2$@";

然后在其他一些本地化中,右侧可能类似于 "%2$@, %1$@";

那么你会:

+ (NSString *)pleaseTryAgainLocalizedString {
    NSString *format = NSLocalizedStringFromTableInBundle(@"p.t.a", @"Localizable",[Bundle bundle], @"Please Try Again");
    return [NSString stringWithFormat:format, [self pleaseLocalizedString], [self tryAgainLocalizedString]];
}

但是,这又很愚蠢。简单定义:

"please.try.again" = "Please try again.";

和:

+ (NSString *)pleaseTryAgainLocalizedString {
    return NSLocalizedStringFromTableInBundle(@"please.try.again", @"Localizable",[Bundle bundle], @"Please Try Again");
}

这为您提供了将此字符串翻译成任何其他语言的最大灵 active 。

关于ios - 如何组合 2 个键以实现可本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48140135/

相关文章:

ios - 触摸事件不适用于 cordova 应用程序的 ios 构建

objective-c - if else 语句不起作用!

localization - Crystal Reports 本地化不会改变货币符号

android - 是否可以将一个本地化值文件夹中的 strings.xml 用于另一种类似语言?

ios - 依次播放本地保存的多首轨道

ios - 第二个 ViewController 返回时不显示信息

ios - 不运行 Xcode 的位置模拟

ios - 清除 NSURLConnection 缓存

ruby-on-rails - 从国家/地区到语言的语言环境回退,无需单独定义每个语言

ios - 是否可以将 ARKit 平面放置在屏幕中央?