ローカライズされたストーリーボードの文字列を更新することは可能ですか?


226

私はアプリケーションの一部をローカライズし、base.lprojストーリーボードと3つの文字列ファイルを作成しました。それは1か月前で、その後、新しいビューコントローラーをアプリに追加しましたが、このコントローラーのボタンとラベルは文字列ファイルに表示されません

この3つのストーリーボードに添付された文字列ファイルを更新することは可能ですか、それともNSLocalizableStringおよびLocalizable.stringsを使用してプログラムで新しい文字列の翻訳を追加する必要がありますか?


回答:


264

2つのオプションがあります。

オプション1

Xcodeは、ファイルを[Interface Builder Cocoa Touch Storyboard]ファイルタイプまたは[Localizable Strings]ファイルタイプに変換することにより、ファイルを「再ロード」できます。

  1. プロジェクトナビゲーターからベースストーリーボードファイルを選択します
  2. ファイルインスペクターでローカリゼーションセクションを探します
  3. ファイルが現在[ローカライズ可能な文字列]である場合は、[Interface Builder Cocoa Touch Storyboard]に変更するか、その逆に変更します。
  4. Xcodeは、古いローカリゼーションの取り組みを維持しながら、ストーリーボードを現在のバージョンに変換する必要があります。ここで、必要に応じてファイルを元のファイルタイプに戻すことができます。

オプション2

ibtoolを使用して、ストーリーボード内の文字列を抽出します。

  1. ターミナルアプリケーションを開く

  2. Base.lprojディレクトリを見つけます

  3. 次の行を使用して、文字列を抽出します。

    ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings

  4. ibtoolが文字列をfile_name.stringsに抽出した後、それをコピーして元の.stringsファイルに貼り付けることができます。

詳細については、https//conyac.cc/business/columns/localization_guide_iosをご覧ください。


1
オプション1を試しましたが、ファイルタイプを[Localizable Strings]から[Interface Builder Cocoa Touch Storyboard]に変更すると、常にXcode 5.0.1がクラッシュします。その理由は、上記の可能性を認識していなかったため、ストーリーボードのローカリゼーションファイルを以前に手動で編集したためです。
ReinhardMänner2013年

16
オプション1は機能しますが、「ローカライズ可能..」から「インターフェース...」に変更してから、もう一度戻す必要があります。
ジョアン・ヌネス

3
XCode 6.0.1を使用している場合、オプション1は機能しません。.stringsファイルを.interfacebuilderに変換しようとすると、XCodeはファイルを変換するかどうかを尋ねます。ファイルはファイルシステム上に作成されますが、文字列ファイルはそのまま残り、古い値が含まれます。
2014

53
私にとってオプション1は、既に翻訳された文字列をすべて英語の文字列に置き換えました。翻訳をもう一度追加する必要がありました。
Mihail Velikov、2015年

5
オプション1は、Xcode 7では非常に不安定に見えます。機能する場合と機能しない場合があります。時々、私の翻訳済みの文字列の一部をランダムに再び英語版に置き換えます。
アダムジョンズ

76

BartyCrouchをチェックしてください。問題を完全に解決します。また、オープンソースでありアクティブにメンテナンスされており、簡単にインストールしてプロジェクトに統合できます。


Homebrew経由でBartyCrouchをインストールします

brew install bartycrouch

または、Mintを使用してインストールします。

mint install Flinesoft/BartyCrouch

Storyboards / XIBs Stringsファイルを段階的に更新します。

$ bartycrouch update

これはまさにあなたが探していたものを実行します。


するために保つあなたのストーリーボードを/ XIBs文字列は、ファイルの時間をかけて更新され、私は非常に(ビルドスクリプトを追加する方法についてビルドスクリプトを追加することをお勧めしますここを):

if which bartycrouch > /dev/null; then
    bartycrouch update -x
    bartycrouch lint -x
else
    echo "warning: BartyCrouch not installed, download it from https://github.com/Flinesoft/BartyCrouch"
fi

Storyboards / XIBs Stringsファイルをインクリメンタルに更新することLocalizable.stringsに加えて、これにより、コードを使用してファイルが新しく追加されたキーで更新されたままにNSLocalizedStringなり、重複キーまたは空の値に対する警告が表示されます。

詳細については、GitHubまたはこの詳細な記事でBartyCrouchをチェックアウトしください。


1
うわー!このツールは単に素晴らしいです。これにはさらに投票が必要です!
ph1lb4

1
素敵なツール-* .strings-filesに新しいラベルテキストを手動でコピー/貼り付けする必要がなくなりました(以前のように新しいラベルの翻訳を忘れてしまいました)...ありがとうございます!
iKK

OBJCプロジェクトに同様のポッドはありますか?
rickrvo

2
これが私たちが求めている答えです。これは受け入れられる答えになるはずです。
Juanjo、2018

3
この質問が尋ねられてから6年が経過し、Xcodeでこれを機能させるにはまだこのパッチの多いソリューションが必要な理由がわかりません。Appleはこれに取り組むべきだった。
ハギー、

57

ローカリゼーションファイルにキーを手動で追加できます。ストーリーボードエディタでオブジェクトを選択すると、キーオブジェクトを見つけることができます。Object-IDアイデンティティインスペクターを見てみましょう。それはのように見えます"nwc-b2-19c"

ローカリゼーションの更新または翻訳の追加。例えば ​​:

"nwc-b2-19c.title" = "Translated title";

8
リスクの少ないアプローチだと思う
ニコラスマンジニ

ただし、一部のオブジェクトIDは.stringファイルに表示されません。接続されていないためです。それで、その時に私は何ができますか?
Mihir Oza 2016

自動生成されたIDだけでなく、名前で選択する方法はありますか?
cocoseis 2016年

UILabelの場合: "YeB-ap-Wkw.text" = "My labels text";
ioopl 2016年

30

これはすべての人に適しているわけではありませんが、ターミナルに追加のツールを必要とせず、小さな手動での変更も簡単です。(プロセスを自動化する場合は、これを考慮しないでください。)

ステップ0:ストーリーボードの言語設定

  • ベース(英語のテキスト付き)
  • 英語(ベースファイルが英語であるため、ローカライズ可能な文字列ファイルは存在しません)
  • 他の言語(ローカライズ可能な文字列ファイル)

基本構成

このステップは一度だけ実行されます。

ストーリーボードに何かを追加するとき、私は次のことをします

ステップ1:英語のローカライズ可能な文字列ファイルを追加する

英語を追加

英語の広告申込情報にマークを付けるだけです。

これは、すべての行を含む完全に新しい英語のローカライズ可能な文字列ファイルを作成します

ステップ2:新しいラインアイテムを他の言語ファイルにコピーする

そしてそれらを翻訳する

手順3:英語のマークを外し、対応するローカライズ可能な文字列ファイルを削除する

ファイルは新しいラインアイテムを取得するためにのみ必要でした

これは簡単で高速なプロセスであり、すべてストーリーボードエディターで行われます

編集:

このプロセスは、小さなストーリーボードで非常にうまく機能します。たとえば、タブベースのプロジェクトがあり、各タブにストーリーボードがあります。

チュートリアルを見つけるには、「ストーリーボードリファレンス」を検索してください。

良い例:Xcodeでのストーリーボード参照、どこで使用すればよいですか?

したがって、各小さなストーリーボードには、ローカライズする文字列がいくつかあります。


すごい!削除された要素を削除する方法についてのアイデアも見つかりましたか?
トーベ

@戸部上記で提案したようにストーリーボードを分割すると、使用されなくなった文字列を簡単に見つけることができます。
Gerd Castan

15

最後に、私の解決策は(基本的ですが効果的な)以前の翻訳をコピーし、[ローカライズ言語]ボックスをオフにしてチェックして作成した新しいファイルに貼り付けました。

これは、テキストを1つまたは2つだけ変更する必要がある場合など、私のような場合に役立ちます。


これにより、IDとそのようなものが常に保持されますか?私は1つのテストを行いましたが、うまくいったように見えましたが、IDが変更された場合、それは悲惨なことになるかもしれません。
ullstrm

何回も問題なくやってきたと思います。
jpl850 2016

1
IDは、UI要素をドロップしたときに割り当てられます。ストーリーボードによって割り当てられるため、ローカリゼーションとは無関係です。したがって、IDへの影響はありません。
iBug

説明をありがとうiBug =)
jpl850

14

最善の方法は、組み込みのエクスポート/インポートローカリゼーションを使用することだと思います。

  1. Project Navigatorでプロジェクトフォルダを選択します
  2. Editor> Export for Localizationを選択します。
  3. 場所に残されたすべての翻訳とXCodeは、失われた文字列を自動的に追加します。-また、インポートする前に、あなたはオンライン、例えば(XLIFFエディタで編集することができます.xliff http://xliff.brightec.co.uk)、その後、あなたはXcodeでこれを実行する必要はありません。
  4. 次に、[エディター]> [ローカリゼーションのインポート]をクリックし、保存された.xliffファイルを選択します。

PS XLIFFエディターで編集したくなく、手順3をスキップした場合、XCodeは新しい文字列を保存できませんでした。この場合、XLIFFエディターで.xliffを開き、変更せずに再保存して新しいファイルをインポートします。


1
+1ローカリゼーションを操作するための簡単で適切な方法。さらに、それはAppleが
-Jurasic

1
Xcode 7.3.1を使用して、既にローカライズされたサンプルプロジェクトで、ラベルを(「テキスト」から「基本テキスト」に)変更し、新しいラベルを追加しました。ローカライズ用にエクスポートし、.xliffファイルを(変更なしで)タッチして、再度インポートしました。Main.stringsファイルで、変更されたラベルのコメント行が更新さ/* Class = "UILabel"; text = "a basic text"; ObjectID = "HFW-aN-MTb"; */れましたが、Main.stringsファイルに新しいラベルは作成されません。次に、.xliffファイルを編集して、新しいラベルの翻訳を追加しました。再度インポートしました。新しいラベルがMain.stringsファイルに挿入されます。
2016年

+1しかし、私が発見したバグがあります。新しい要素を追加するとき、それらはエクスポートされたファイルにはありません(duthenが言っているように)。しかし、すぐに(ストーリーボードに変更を加えずに)エクスポートを実行すると、驚くべきことに、追加されたすべての要素が含まれます。したがって、エクスポートを2回実行します。2つ目はすべての新しい要素を含みます。アップルに感謝します!
Viktor Kucera

6

ストーリーボード、たとえばMain.storyboardをクリックすると、右側にローカライズメニューが表示されます(添付の画像を参照)。言語をオフにしてからもう一度オンにすると、ファイルが再度生成されます。そのため、通常はコンテンツをコピーし、ファイルを再度生成してから、コピーして既に翻訳したコンテンツを貼り付けます。

これは、私が辞書を更新するために使用する方法です。

ここに画像の説明を入力してください


Xcode 10では、gitを使用すると違いが強調されます。
Ricardo Ruiz Romero

はい、それは可能です...今、私のファイルはこの日付よりも大きいので、再度生成した後、リポジトリのバージョンとマージします。
J.フェズ

5

たくさんのひもが入った大きな絵コンテを手に入れました。2つの言語は英語ともう1つのアラビア語をベースにしています。タスクは、いくつかのフィールドとラベルをストーリーボードに追加し、スクリプトとNSLocalizableStringsなしでそれらのローカリゼーションを追加することでした。

私のために次を助けました:

最初に、予期しない変更を防ぐためのgitがあることを確認してください。

  1. xcodeでターゲット画面に移動し、Editor-> を押しExport For Localization...ます。ar.xliffファイルをどこかに保存します。
  2. XLIFF Edtiorをダウンロードしてください
  3. ar.xliffファイルを開いて変更します。
  4. このファイルをxcodeにインポートします。できた!ストーリーボード文字列ファイルを更新しました。

これを機能させるには、まずXcodeプロジェクトエディターでプロジェクトまたはターゲットを選択します。
チャックボリス

4

増分ローカリゼーションをサポートするAppleGlotというAppleのコマンドラインツールのアプリがあります。私はまだ試していませんが、あなたが検索したツールとまったく同じです(少し前のことです)。


appleglotこのツールは、最終的なアプリケーションバンドルと協力しています。これは、翻訳アプリケーションの完全に異なるアプローチです。
フロブディス2014

1
「異なるアプローチ」で何か問題があるのですか、それとも反対投票の原因は何ですか?
tilo 14

今そのリンクでAppleGlotを検索する必要があります。
NSDeveloper 2015

4

これがスクリプトです絵コンテとxibsから文字列を抽出し、既存の翻訳でそれらをマージします。

プロジェクトのビルド時にスクリプトを自動的に実行するには、スクリプトをプロジェクトのルートディレクトリに配置し、次の行を含むスクリプト実行フェーズをプロジェクト設定のターゲットビルドフェーズに追加します。

./mergegenstrings.py PathToSourceDir

または、必要に応じてターミナルでスクリプトを手動で実行することもできます。

ibtoolTha Leangが答えたとおりにスクリプトが実行されます。また、ソースコードでgenstringsマークされNSLocalizedStringた文字列を抽出してマージするために実行されます。スクリプトは、この投稿のスクリプトに基づいており実行後に文字列をマージしますgenstrings


これを使用する方法の詳細情報を提供できますか?
user023 2015年

1
要旨にコメントを追加しました。それが役に立てば幸い。gist.github.com/yoichitgy/29bdd71c3556c2055cc0
田谷陽一

ありがとう、私にはぴったりです。誰かが権限に問題がある場合、これは役に立ちます: stackoverflow.com/questions/9850936/...
ICODE

このスクリプトはストーリーボードのMain.stringsファイルでは問題なく機能しますが、Xcode 7のLocalizable.strings翻訳を上書きしているようです
Adam Johns

3

最も簡単で非常にリスクの少ないアプローチは、ストーリーボードからオブジェクトIDをコピーして、以下の例のようにローカライズされたファイルにキーの新しいキーを追加することです。

1:コンポーネントのストーリーボードから以下のようにオブジェクトIDをコピーします。

ここに画像の説明を入力してください

2:以下のようにローカライズされたファイルに新しいキーを追加します。

"DjF-dn-0ay.text" = "Borrar datos y restablecer";

注:これは、少数のコンポーネントのみを更新する場合はリスクの少ないアプローチです。それ以外の場合は、ストーリーボード用にローカライズされたファイルを再作成できます。


ご回答有難うございます!!!!!。質問があります。私のプロジェクトでは、一部のラベル、ボタンのアウトレットを作成していません...これらのボタンとラベルにobjectIDを使用している場合、それで十分ですか?
Harikarthick K

3

XlifftoolはMacアプリとして入手でき、適切に動作します。これには、info.plist、ローカライズ可能な文字列、およびストーリーボードからのすべての翻訳可能な文字列とオブジェクトが表示されます。

Macの場合は、こちらから入手してください。 https //itunes.apple.com/lv/app/xlifftool/id1074282695?mt=12

ステップ1:Xcodeで、プロジェクトナビゲーターでプロジェクトフォルダーを選択します。次に、[ローカライズのためにエディター/エクスポート]を選択します。

翻訳可能な文字列は、Xcodeでローカライズするために選択した言語のxliffファイルに含まれます。

ステップ2:xlifftoolでそのファイルを開き、以前に行った翻訳を翻訳または更新します。

ステップ3:次に、エディター/ローカリゼーションのインポートを使用してプロジェクトにアップロードし直します...


macOSの別の代替手段はLoca Studioです。Xlifftoolと同様に、アプリはXcodeアクションエディター->ローカライズ用にエクスポートの結果を開くことができます。それはいくつかのより高度なフィルタリングと検索機能、および自動QAチェックも備えています。(完全な開示:私はリード開発者です)。
guru_meditator

0

これは、ストーリーボードまたはxibからローカリゼーション文字列に新しいテキストを更新する簡単な方法です

1-このスクリプトを使用する http://tredje.se/dev/trouble/?x=entry:entry150917-204052

2- ローカリゼーション文字列を選択します更新を言語文字列を「ローカリゼーション文字列」から「インターフェースビルダーストーリーボード」に切り替えます

3-元に戻します:)

できました。

ここに画像の説明を入力してください


ファイルをInterface Builder Storyboardに変更しますが、1秒または2秒後に再びLocalizable Stringsに戻し、新しいビューテキストのLocalizable Stringsに追加しません
Mujahid Latif

@MujahidLatifこのポッドを今使用しています。これは本当に便利です。ストーリーボードのローカリゼーションとLocalization.Stringを更新できます 。github.com/ Flinesoft / BartyCrouch
Fadi Abuzant

0

オプション1
Xcodeは、ファイルを[Interface Builder Cocoa Touch Storyboard]ファイルタイプまたはファイルタイプに変換することにより、ファイルを「再ロード」でき[Localizable Strings]ます。

プロジェクトナビゲーターからベースストーリーボードファイルを選択します。ファイルインスペクター[ ローカライズ]セクション を見つけます。ファイルが現在の場合は、[Localizable Strings]に変更する[Interface Builder Cocoa Touch Storyboard]か、その逆を行います。
Xcodeは、古いローカリゼーションの取り組みを維持しながら、ストーリーボードを現在のバージョンに変換する必要があります。ここで、必要に応じてファイルを元のファイルタイプに戻すことができます。

オプション2を
使用ibtoolして、ストーリーボード内の文字列を抽出します。

ターミナルアプリケーションを開き
ますBase.lprojディレクトリ
を検索します文字列を抽出するには、次の行を使用します。

ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings

ibtoolが文字列をfile_name.stringsに抽出した後、それをコピーして元の.stringsファイルに貼り付けることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.