本地化字符串,包括表情符号代码不起作用

时间:2016-03-02 13:50:57

标签: ios emoji nslocalizedstring

我的问题是

@GET @Path("/listAll") public Response getAllAvailableImages(@Context ServletContext context)

工作正常,我从文件中获取本地化字符串,但

NSLocalizedStringFromTableInBundle(@"Sample Text", @"Localizable", [Globals GetLocalizebundle], @"")

无法从包中获取本地化文本。

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:1)

我通过用“ surrogates”替换整个unicode代码来解决此问题。

例如?的代码为"1F601",它的代名词为D83DDE01。因此,?应该被本地化为"\UD83D\UDE01"

答案 1 :(得分:0)

请勿使用翻译文本作为密钥,请使用

之类的内容
"sample_text_emoji" = "Sample Text \U0001F431";
在您的localized.string文件中

然后使用

NSLocalizedStringFromTableInBundle(@"sample_text_emoji", @"Localizable", [Globals GetLocalizebundle], @"")

Documentation明确指出这是一个关键,因此请将其用作关键字,而不是文本

 NSString *NSLocalizedStringFromTableInBundle(NSString *key, NSString *tableName, NSBundle *bundle, NSString *comment) 

答案 2 :(得分:0)

实际上,下面解决了我的问题,但我仍然不相信这是一个合适的解决方案。无论如何,这里的代码解析了NSLocalizedStringFromTableInBundle的表情符号字符:

NSString *str = NSLocalizedStringFromTableInBundle(@"Sample Text", @"Localizable", [Globals GetLocalizebundle], @"");
NSString *stringWithEmoji = [str stringByAppendingString:@" \U0001F431"];
NSData *data = [stringWithEmoji dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *valueUnicode = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSData *dataa = [valueUnicode dataUsingEncoding:NSUTF8StringEncoding];
NSString *valueEmoji = [[NSString alloc] initWithData:dataa encoding:NSNonLossyASCIIStringEncoding];

其中baseized.string包含"Sample Text" = "Sample Text";

该方法是从bundle获取本地化文本,然后将emoji Unicode添加到字符串。然后将其转换为NSNonLossyASCIIString。如果您对每种语言使用相同的表情符号,则此方法有效。