如何本地化全局字符串?

时间:2015-11-09 15:30:04

标签: ios objective-c localization

我有一个NSString作为全局常量。此常量通过使用

定义
extern NSString *const kConstant;
<。>文件中的

该值在.m文件中设置(在@implementation之前):

NSString *const kConstant = @"myValue";

到目前为止一切顺利。只要我想使用NSLocalizedString

NSString *const kConstant = NSLocalizedString(@"myValue",@"the value");

我收到错误:initializer元素不是编译时常量。

知道如何将全局字符串值本地化吗?

2 个答案:

答案 0 :(得分:3)

您应该将其设为类的类方法,如果未分配,则调用NSLocalizedString()。这类似于Singleton模式:

MyStatics.h:

@interface MyStatics : NSObject

+ (NSString *)globalString

@end

MyStatics.m:

#import "MyStatics.h"

static NSString *_globalString = nul;

@implemenetation MyStatics

+ (NSString *)globalString
{
    if (!_globalString)
        _globalString = NSLocalizedString(@"myValue",@"the value");
    return _globalString;
}

@end

答案 1 :(得分:0)

我所做的是使常量成为您本地化中使用的密钥。您必须在需要字符串的位置使用NSLocalizedString(),因为它会扩展为一个宏/函数,用于查找应用程序包中的文件并确定要使用的字符串(缺少翻译的后备等)。 )。我担心没有办法绕过它;本地化必须在运行时发生。