Получить название сохраненного значения 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
переменная. Например, вы можете использовать цикл для перебора его возможных значений.