2015-09-23 1 views
1

Из того, что я понимаю, локализовать Раскадровка объектов довольно прост: у вас есть файл, который выглядит примерно так:Что такое «правильный» способ локализовать программно созданные строки в Swift/Xcode?

/* Class = "NSMenuItem"; title = "Superscript"; ObjectID = "Rqc-34-cIF"; */ 
"Rqc-34-cIF.title" = "Superscript"; 

/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "Ruw-6m-B2m"; */ 
"Ruw-6m-B2m.title" = "Select All"; 

/* Class = "NSTextFieldCell"; placeholderString = "0"; ObjectID = "RxW-oS-gX3"; */ 
"RxW-oS-gX3.placeholderString" = "0"; 

/* Class = "NSTextFieldCell"; title = "0"; ObjectID = "RxW-oS-gX3"; */ 
"RxW-oS-gX3.title" = "0"; 

/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "S0p-oC-mLd"; */ 
"S0p-oC-mLd.title" = "Jump to Selection"; 

/* Class = "NSButtonCell"; title = "Play"; ObjectID = "qjC-b0-dMe"; */ 
"qjC-b0-dMe.title" = "Play"; 

и локализовать каждую строку, вы просто заменить текст справа, с ее локализованным эквивалентом. Достаточно легко.

Однако, если код показывает метку или диалоговое окно, где строка определена в коде? Например:

if (dialogOKCancel("Invalid Path", text: "The file/path you selected does not exist, is not a valid sound file, or cannot be accessed by the program.")) { 
    self.dismissController(self) 
} 

или

let result = dialogOKCancel("Discard Changes?", text: "Press Cancel to close this window and save your changes to \(filename), or OK to create a new file.") 

Я знаю, что есть много различных способов, которыми я мог бы сделать это (определение строки при запуске в соответствии с настройками локализации обнаруженных приложением была одна вещь, которую я думал), но мне интересно, есть ли «правильный»/официальный способ делать то, что я пытаюсь выполнить, или если нет, то какой лучший/самый эффективный метод.

+0

Я понимаю, что [ 'NSLocalizedString'] (https://developer.apple .com/library/mac/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/index.html # // apple_ref/c/macro/NSLocalizedString) - это идиоматический способ справиться с этим. [Вот еще одна статья] (http://nshipster.com/nslocalizedstring/) Я нашел об этом. – icktoofay

ответ

2

Старая Objective C путь доступа к нему был:

NSString *name = "Craig"; 
NSString *msg = [NSString stringWithFormat:NSLocalizedString(@"Hello %@", nil),name]; 

Свифт версия выглядит следующим образом:

let name = "Craig" 
let msg = String(format: NSLocalizedString("Hello %@", comment: ""), name) 
Смежные вопросы