Получить название сохраненного значения plist из локализованных.strings

Каков наилучший метод для получения заголовка для сохраненного значения Root.plist, расположенного внутри Root.strings? Например, я сохранил INT = 1, который имеет ключ MUL_VAL_2, который соответствует "женскому голосу" в Root.strings. Как я могу получить "Женский голос" для сохраненного INT?

 // Root.strings     
 "MUL_VALUE_TITLE"       = "Multiple Values";
 "MUL_VAL"               = "Sound Theme";
 "MUL_VAL_1"             = "Male Voice";
 "MUL_VAL_2"             = "Female Voice";
 "MUL_VAL_3"             = "Mechanical";


 // Root.plist
 <plist version="1.0">
 <dict>
<key>Titles</key>
<array>
    <string>MUL_VAL_1</string>
    <string>MUL_VAL_2</string>
    <string>MUL_VAL_3</string>
</array>
<key>Type</key>
<string>PSMultiValueSpecifier</string>
<key>Values</key>
<array>
    <integer>0</integer>
    <integer>1</integer>
    <integer>2</integer>
</array>
<key>Title</key>
<string>MUL_VAL</string>
<key>Key</key>
<string>timer_theme_mulValue</string>
<key>DefaultValue</key>
<integer>0</integer>
</dict>

2 ответа

Решение

Вы можете использовать собственную логику IASK для получения локализованной строки:

[settingsViewController.settingsReader titleForStringId:@"MUL_VAL_1"]

Я думаю, что лучший способ - это загрузить plist как NSDictionary, получить ключ 'Title' для вашего значения INT, а затем получить заголовок из Root.strings для этого ключа через NSLocalizedStringFromTable макро.

Смотрите также: Строковые ресурсы в документации Apple.

Вот как это сделать:

int storedInt = 1;
NSString * plistName = @"Root";
NSString * stringsTableName = @"Root";

// Loading plist
NSString * myPlistFilePath = [[NSBundle mainBundle] pathForResource:plistName ofType:@"plist"];
NSDictionary * rootPlist = [NSDictionary dictionaryWithContentsOfFile:myPlistFilePath];

NSString * key = nil;
NSString * keyReadable = nil;

NSArray * values = rootPlist[@"Values"];
NSArray * titles = rootPlist[@"Titles"];
NSUInteger indexOfValue = [values indexOfObject:@(storedInt)];
if (indexOfValue != NSNotFound) {
    key = titles[indexOfValue];
    keyReadable = NSLocalizedStringFromTable(key, stringsTableName, @""); // Obtain readable title for key
} else {
    // handle 'undefined value in dictionary' error here.
}

NSLog(@"for value: %d key is: %@ and title of key is: %@", storedInt, key, keyReadable);

В приведенном выше коде "ваш сохраненный INT" установлен в storedInt переменная. Например, вы можете использовать цикл для перебора его возможных значений.

Другие вопросы по тегам