我有一個XCode項目,使用Interface Builder構建XIB界面文件。我通過使用ibtool
來提取字符串,翻譯它們並使用ibtool
來構建本地化的XIB文件來構建本地化的XIB文件。避免在XCode項目中翻譯標準菜單項
但是,這樣做意味着我必須翻譯應用程序菜單中的所有項目,包括完全標準的項目(文件,保存,打開,最小化等)。有沒有辦法避免這種情況?
我有一個XCode項目,使用Interface Builder構建XIB界面文件。我通過使用ibtool
來提取字符串,翻譯它們並使用ibtool
來構建本地化的XIB文件來構建本地化的XIB文件。避免在XCode項目中翻譯標準菜單項
但是,這樣做意味着我必須翻譯應用程序菜單中的所有項目,包括完全標準的項目(文件,保存,打開,最小化等)。有沒有辦法避免這種情況?
所以,顯然沒有辦法解決這個問題。
我一直在尋找了一段時間了類似的解決方案,我發現這個資源
http://www.bdunagan.com/2009/03/15/ibtool-localization-made-easy/
它援引朝文章的結尾:
ibtool會去翻的MainMenu。 xib用於每個用戶可見的字符串,並將具有關聯ObjectID的字符串插入到MainMenu.strings中,本質上是由ObjectID鍵入的字符串字典。更好的是,該工具通過ObjectID對它們進行排序,因此版本化的.strings文件很好地不同。我可以很容易地看到添加,刪除或更改了哪些字符串。讓我重複一遍,因爲它非常方便:.strings文件差異很大!當然,這些.strings文件是unicode的,所以它們不是grep'able。下面是一個字符串輸出的例子:
繼續前進,看看我真的希望它能幫助你,儘可能幫助我!
我已經開發了一個解決這個問題的方法。
https://www.corecode.io/index_opensource.html
找「翻譯」,這將會把你的文件MainMenu.strings與標準蘋果的翻譯標準菜單項串十幾種語言。
如果您發現某些字符串或語言缺少Aapple已包含在其基本應用程序中,請發送補丁。
請注意,現在支持Mac OS X所支持的所有32種語言。它的主要「數據庫」在這裏,補丁歡迎:https://github.com/core-code/MiscApps/blob/master/Translator/Translator/MainMenuTranslations.plist – user1259710 2014-01-20 19:04:30
非常方便,謝謝user1259710!讓我們希望Xcode 6使非英語開發人員的默認設置更容易... – wdyp 2014-07-24 00:02:30
多種語言(不是全部)缺少「窗口」。 – Leo 2014-09-28 02:42:59
翻譯由https://github.com/core-code/MiscApps/blob/master/Translator/Translator/MainMenuTranslations.plist 是很酷,但如果你不想處理您的構建30個MainMenu.string文件(我個人不) - 你可以添加MainMenuTranslations.plist到你的資源(230KB未壓縮的很小)和做對飛象這樣:
- (void) processMenu: (NSString*) app {
NSDictionary* d = [self loadMenuTranslations: app];
NSMenu* mm = NSApplication.sharedApplication.mainMenu;
for (int i = 0; i < mm.numberOfItems; i++) {
NSMenuItem* mi = [mm itemAtIndex: i];
mi.title = [self translateMenu: mi.title withDictionary: d];
NSMenu* sm = [[mm itemAtIndex: i] submenu];
sm.title = [self translateMenu: sm.title withDictionary: d];
for (int j = 0; j < sm.numberOfItems; j++) {
NSMenuItem* mi = [sm itemAtIndex: j];
mi.title = [self translateMenu: mi.title withDictionary: d];
}
}
}
- (NSString*) translateMenu: (NSString*) key withDictionary: (NSDictionary*) dictionary {
for (NSString* lang in dictionary) {
NSDictionary* translation = dictionary[lang];
NSString* t = translation[key];
if (t != null) {
return t;
}
}
return key;
}
- (NSDictionary*) loadMenuTranslations: (NSString*) app {
NSArray* langs = [NSUserDefaults.standardUserDefaults objectForKey: @"AppleLanguages"];
NSURL* url = [NSBundle.mainBundle URLForResource:@"MainMenuTranslations.plist" withExtension: null];
NSMutableDictionary* r = NSMutableDictionary.new;
NSDictionary* translations = [NSDictionary dictionaryWithContentsOfURL: url];
for (NSString* lang in langs) {
NSString* locale = [NSString stringWithFormat:@"%@.lproj", lang];
NSDictionary* translation = translations[locale];
NSMutableDictionary* d = [NSMutableDictionary.alloc initWithCapacity: translations.count * 3/2];
for (NSString* k in translation) {
NSString* v = translation[k];
NSString* key = k;
if ([k indexOf: @"APPLICATIONNAME"] >= 0) {
key = [k stringByReplacingOccurrencesOfString: @"APPLICATIONNAME" withString: app];
}
if ([v indexOf: @"APPLICATIONNAME"] >= 0) {
v = [v stringByReplacingOccurrencesOfString: @"APPLICATIONNAME" withString: app];
}
d[key] = v;
}
if (d.count > 0) {
r[lang] = d;
}
}
return r;
}
剛剛從
- (void) applicationDidFinishLaunching: (NSNotification*) n {
// ...
[self processMenu: @"<your app name>"];
}
稱它爲我希望有一個UniversalTranslation.plist地方(可以自動可能通過創造性地運用收集translate.google.com)
恐怕你誤解了我的問題:我已經使用ibtool來維護翻譯。但是,這並不能解決不想翻譯應用程序的所有標準菜單項(複製,粘貼等)的問題。 – 2010-11-27 08:28:07
啊,我希望我能幫到更多。 – austinbv 2010-11-27 14:31:11