我有一个NSString作为全局常量。此常量通过使用
定义extern NSString *const kConstant;
<。>文件中的。
该值在.m文件中设置(在@implementation之前):
NSString *const kConstant = @"myValue";
到目前为止一切顺利。只要我想使用NSLocalizedString
宏
NSString *const kConstant = NSLocalizedString(@"myValue",@"the value");
我收到错误:initializer元素不是编译时常量。
知道如何将全局字符串值本地化吗?
答案 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()
,因为它会扩展为一个宏/函数,用于查找应用程序包中的文件并确定要使用的字符串(缺少翻译的后备等)。 )。我担心没有办法绕过它;本地化必须在运行时发生。