質問

私はインターフェイスBuilderを使用して構築されたXIBインターフェイスファイルで、Xcodeプロジェクトを持っています。私はそれらを翻訳し、文字列の抽出にibtoolを使用して、ビルドローカライズXIBファイルに再びibtoolを使用してローカライズされたXIBファイルを構築しています。

しかし、私は完全に標準(ファイル、保存、オープン、最小化など)されているものも含め、アプリケーションメニューの全項目を、変換する必要があり、この手段を行います。その?

を回避する方法はあります
役に立ちましたか?

解決 2

だから、この周りに明らかに決してます。

他のヒント

私、この問題に対する解決策を開発しました。

https://www.corecode.io/index_opensource.htmlする

「翻訳」のための

一見、それはあなたのMainMenu.stringsファイルは、標準のメニュー項目の文字列の標準のApple翻訳とダースの言語に翻訳されます。

あなたには、いくつかの文字列やAappleが自分のベースのアプリに含まれていることを行方不明の言語を見つけた場合、

、以上のパッチを送ってくださいます。

私はしばらくの間、同様のソリューションを探していると私は、このリソースを見つけました。

http://www.bdunagan.com/2009 / 03/15 / ibtool局在製-簡単/

これは、記事の最後に向かって引用します:

  

ibtoolは、すべてのユーザに見える文字列をMainMenu.xibを通して見て、本質的にMainMenu.stringsに関連付けられたオブジェクトID、オブジェクトIDをキー文字列の辞書でその文字列を挿入します。さらに良いことに、ツールは、オブジェクトIDによってそれらをソートし、そのバージョン管理.stringsファイルがうまくdiff'ableです。私は簡単に文字列を追加、削除、または単に変更されているかを見ることができます。それは信じられないほど便利ですので、私はこれを繰り返してみましょう:.stringsファイルがうまくdiffを!もちろん、これらの.stringsファイルはユニコードなので、grep'ableではありません。以下は、文字列の出力例です。

移動先と私は本当にそれが私を助けたとして、それは限り、あなたを助け願っています!

を見てください

https://github.com/によって翻訳コアコード/ MiscApps / BLOB /マスター/翻訳/翻訳/ MainMenuTranslations.plistする 涼しいですが、あなたは(私は個人的にしないでください)あなたのビルドで30個のMainMenu.stringファイルを扱うしたくない場合 - あなたは自分のリソースにMainMenuTranslations.plistを追加(230キロバイト圧縮されていないが、ごくわずかです)など、その場でそれを行うことができますこの:

- (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>"];
}
私が望む(おそらくtranslate.google.comの創造的な使用を経由して自動的に収集することができる)UniversalTranslation.plistのどこかにあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top