12

現在、ビューをローカライズするための半自動化された方法があります。しかし、今日 IB で興味深いセクションを見つけました。これは、Interface Builder 内からビューをローカライズできることを示唆しているようです。

したがって、IB では、Identity Inspector で選択したオブジェクトのランタイム属性を定義できます。したがって、ラベルのキーパスを String にUILabel設定できます。textHello World

ただし、を選択してType = Localized Stringからキーの名前を選択するとLocalized.strings、翻訳された文字列は取得されず、IB に入力した値 (したがってキー) のみが取得されます。

このメカニズムがどのように機能するのかわかりません。私の意見をこのように翻訳できたらいいのですが、何かアイデアはありますか?

4

3 に答える 3

7

「ローカライズされた文字列」タイプの目的は、ローカリゼーション プロセスに参加するランタイム属性値を定義できるようにすることです (ベース ローカリゼーションを使用)。これは、たとえば、カスタム コントロールを定義してストーリーボードに含め、そのプロパティの 1 つにローカライズ可能な文字列を割り当てたい場合に便利です。ただし、これは Mac OS でのみ機能し、iOS では機能しません。

これは次の実験で簡単に確認できます: ストーリーボードに UILabel / NSTextField を配置し、ユーザー定義のランタイム属性を使用して "text" / "stringValue" プロパティを設定します。属性のタイプとして「文字列」を使用し、対応する文字列ファイルを生成すると、ファイルのどこにも表示されません。対照的に、タイプを「ローカライズされた文字列」に変更して文字列ファイルを生成すると、次のようなエントリが見つかります。

/* Class = "IBUILabel"; wij-Kq-q92.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0] = "Localized value"; ObjectID = "wij-Kq-q92"; */
"wij-Kq-q92.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0]" = "Localized value";

次に、対応する言語文字列ファイルでこの値をローカライズできます。繰り返しますが、これは Mac OS では機能しますが、iOS では機能しません。

于 2014-07-02T09:50:14.567 に答える
5

「ユーザー定義のランタイム属性」については、十分に文書化されていません。私が読んだ本から覚えていることは、UDRA は最初に MacOSX プログラミング用に実装されたので、Type "Localized String" は iOS で現在完全にサポートされていない機能である可能性があるということです。

面白いことに、彼はストーリーボード プレビュー (xCode 4.5.1) で文字列を翻訳していますが、後でコンパイルされた iOS アプリでは、キー文字列を挿入しているだけです。

私が今考えている解決策の 1 つは、小さなヘルパー クラスを作成することです。これは、viewDidLoad のビューのタイトル/テキスト文字列で「キー」のようなキーワード、たとえば「XYControllerTitleKey」をチェックし、その上で NSLocalizedString-Method を作成することです。 .

更新: それまでの間、UDRA を使用する方法があるようです:

ストーリーボード/XIB とローカリゼーションのベスト プラクティス

そして結果としてのチュートリアル(リンク

于 2012-10-30T12:04:11.873 に答える
1

私の場合、iOS 6 を使用して、ベースのローカライズされたストーリーボードから文字列を生成すると (XCode で生成するか、 を使用して、次のibtool --generate-strings-fileような自動生成された文字列が得られます (MainStoryBoard.stringsたとえば、 に入る必要があります):

/* Class = "IBUITextField"; b4a-O4-bNZ.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0] = "Event Name"; ObjectID = "b4a-O4-bNZ"; */
"b4a-O4-bNZ.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0]" = "Event Name";

残念ながら、それらをキー パスで識別できると便利ですが、少なくとも、ユーザー定義の文字列をローカライズする必要がある場所はわかります。

于 2013-02-06T19:54:35.343 に答える