Локализованная строка, включая коды смайликов, не работает

Мой вопрос, пока

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

работает отлично, и я получаю локализованную строку из файла, но

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

не удается получить локализованный текст из пакета.

Любая помощь приветствуется.


person icould    schedule 02.03.2016    source источник
comment
Вы читали stackoverflow.com/a/23454538/909655 о том, как включать символы Юникода в файлы строк? Особенно о кодовых точках выше 0xFFFF.   -  person Mats    schedule 02.03.2016


Ответы (3)


Я решил это, заменив весь код юникода «суррогатами».

Например, ???? имеет код "1F601", его суррогаты — D83D и DE01. Так что ???? следует локализовать как "\UD83D\UDE01"

person Serge Vysotsky    schedule 30.03.2020
comment
К сожалению, это не компилируется в Xcode 12.2, когда помещается в литерал @"". Требуется полный код, например. \U0001F601 - person manmal; 24.11.2020

Не используйте переведенный текст для ключа, используйте что-то вроде

"sample_text_emoji" = "Sample Text \U0001F431";

в вашем файле localized.string, а затем используйте

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

Документация четко указывает, что это ключ, поэтому используйте его как ключ, а не как текст

 NSString *NSLocalizedStringFromTableInBundle(NSString *key, NSString *tableName, NSBundle *bundle, NSString *comment) 
person Matija Kraljic    schedule 02.03.2016
comment
На самом деле это не работает. Вы тестировали свое решение? потому что речь идет не о поставленном ключе. Речь идет о значении, поступающем из файла localized.string. Я протестировал "sample_text_emoji" = "Sample Text \U0001F431" в файле localized.string, но на экране отображается образец текста F431. - person icould; 02.03.2016

На самом деле ниже решил мой вопрос, но я до сих пор не верю, что это правильное решение. В любом случае здесь код разрешает символы смайликов для 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];

Где базовая Localized.string включает "Sample Text" = "Sample Text";

Метод заключается в том, чтобы получить локализованный текст из пакета, а затем добавить эмодзи Unicode в строку. Затем преобразуйте его в NSNonLossyASCIIString. Этот метод работает, если вы используете одинаковые смайлики для каждого языка.

person icould    schedule 02.03.2016