ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
String Catalogsの紹介
Xcode 15では、すべての文字列を一箇所で管理することでアプリを簡単にローカライズすることができます。Strings Catalogsを使用したプロジェクト内の文字列の抽出、編集、エクスポート、構築方法を紹介します。また、移行ファイルを選択することで自分のペースで、既存プロジェクトに String Catalogs を採用する方法も紹介します。
関連する章
- 0:00 - Introduction
- 1:29 - Demo
- 4:13 - Extract
- 13:19 - Edit
- 22:48 - Export
- 27:52 - Build
- 28:44 - Migrate
- 31:03 - Wrap-up
リソース
関連ビデオ
WWDC23
-
ダウンロード
♪ ♪
Marina: こんにちは WWDCへようこそ 私はMarinaです 後ほど同僚のMattも参加します 私たちはAppleの ローカリゼーションチームに所属しています 今日はString Catalogsを紹介します Appleでは アクセシビリティと 包括性を強く信じています アプリのローカライズは あなたのコンテンツを世界中の より多くの人々に届ける方法の一つです 実際 現在Appleは40以上の言語で OSを出荷しており 誰もが 母国語で私たちの製品を使えるように その数を継続的に拡大しています 私たちはローカリゼーションを できるかぎり簡単にするための Xcodeのツール提供にコミットしており 今日はローカライズした コンテンツ管理のための 新たに改善されたワークフローを紹介します アプリをローカライズしたい場合 いままでは文字列とstringsdictファイルの 維持が必須でした このためすべての文字列を手作業で コードと同期させる必要があり コンテンツのローカライズを 見逃すことがありました これでは多言語化されずにユーザーに 届くことになります 私たちは 長年この手順に頼ってきましたが Xcode 15では String Catalogsを導入しています 将来的には この新フォーマットが Xcodeの文字列と stringsdictファイルの両方に 取って代わるでしょう String Catalogsを使用すると 1箇所で全文字列を簡単に管理し 確実にローカライズすることができます 詳しく見てみましょう コード上でSwiftUIコントロールを使用して ビュー構築とコンテンツ入力をします これがString Catalogsです 先ほど見たSwiftコードの すべての文字列は Xcodeによって 自動的に抽出されました 自分で追加する必要はありません ブラジルの友達がこのアプリを 使えるようにしたいので ポルトガル語に翻訳しました
これは裏庭に最近おとずれた鳥を 表示するビューです 正確に実際に訪れた鳥の数を 表示したいので その数を表す変数を追加してみましょう プレビューに表示されました これで鳥の数を見れます プロジェクトをビルドして カタログに戻ります
簡単でしたね これが新しい文字列です 翻訳の進捗にも反映されていますね String Catalogsには 強力な編集機能もついているので 複雑な操作も簡単にできます 例えば この文字列には tapという単語がありますが このアプリは マルチプラットフォームなので Macデバイスに適した表現に 変えてみましょう まず 英語の文字列に戻り tap to learn moreの 文字列を探します これですね 右クリックします vary by deviceを選択し Macを選んで テキストを書き直して
完了 ビューに戻って 実行先をMacに変えると...
プレビューで確認できます 簡単でしたね
String Catalogsで できることはたくさんあります 何が出来るのか詳しく見てみましょう まずは 文字列を抽出できる場所を説明し String Catalogsと連携するXcodeの ネイティブエディタを紹介し ローカリゼーションの エクスポート方法をおさらいします そしてString Catalogsが どのように構築され どのように既存プロジェクトに採用できるか 見ていきましょう はじめにローカライズ可能な文字列と その由来について Mattに説明してもらいます Matt:ありがとう Marina! ローカライズ可能な文字列とは 実行時にユーザーに表示される文字列で あなたのアプリがサポートする すべての言語に 翻訳する必要があります ローカライズ可能な文字列には 4つの要素があります: キーは文字列を個別化するもので 多くの場合 文字列そのものです これは実行時に表示する適切な値を 見つけるために使用されます デフォルト値は細かく指定しない限り デフォルトのローカライズキーに 設定されます Xcode14.3から プロジェクトエディタを使用した デフォルト値の変更機能が導入されました これはソースコードの文字列が 英語でない場合に便利です 次に 文字列コメントは ユーザーインターフェイス上での 文字列の場所と動作を 翻訳者に伝える手段となります 正しく翻訳できるように 文字列にコメントを 追加することをお勧めします 最後に ローカライズ可能な各文字列は 文字列テーブルに属し 翻訳が格納される 1つ以上のファイルに対応します デフォルトではコードから抽出した文字列は ローカライズテーブル内ですが 他の方法で文字列を整理したい場合は カスタマイズできます 文字列テーブルを詳しく見てみましょう .stringsファイルを使用した 既存アプリの場合 1つの文字列テーブルには 各対応言語のlprojディレクトリ内に .stringsファイルと 場合によっては .stringsdictファイルが含まれます これらのファイル全てで ローカライズ可能な 文字列テーブルを構成しています 一方 String Catalogsでは 文字列テーブル全体が 1つのファイルに含まれています テーブル内のローカライズ可能な各文字列の すべての翻訳とメタデータが含まれます 文字列を複数の文字列テーブルに 整理したい場合は 複数のカタログを作成できます 各カタログは そのテーブルに属する文字列キーと アプリが対応する全言語の翻訳を 保持しています キーはそのテーブル内で常に固有ですが テーブル間なら同じでも構いません 例えば「WWDCへようこそ!」は ここでは両方のファイルに存在します アプリ内の異なる用途で 表示される可能性があるためです Marinaが説明したように Xcode15はString Catalogsを自動で作り プロジェクト内の ローカライズ可能な文字列と 同期するように最善の努力をしてくれます ローカライズ可能な文字列を Xcodeはどこで見つけるのでしょう? ローカライズ可能な文字列は 様々な場所にあります Xcodeはソースコードや インターフェイス構築ファイル そしてString Catalogsに含まれる Info plists内から文字列を抽出できます ローカライズに慣れている方は これらの多くに見覚えがあるはずです いくつかを詳しく見てみましょう SwiftUIから始めます SwiftUIのローカライズは シームレスです ビュー内で文字列リテラルを 指定した文字列は 自動でローカライズ可能と 判断されるからです Localizable.xcstringsという カタログがある場合は ローカライズ可能な文字列はすべて そこに抽出されます これはLocalizedStringKeyの型を受け入れる すべてのパラメータで動作します SwiftUIの文字列は テキストビューを使って テーブル名や文字列検索用バンドルや コメントを指定することができます ローカライズされるべき文字列を受け入れる カスタムビューを クライアントに合わせて 独自に定義することもできます ここではLocalizedStringResourceを 文字列型として使用しています XcodeではCallSiteで LocalizedStringResourceを インスタンス化するために 文字列リテラルが使用されると その文字列が ローカライズ可能であると認識します ローカライズ可能な文字列の定義と変換には LocalizedStringResource型が おすすめです 文字列リテラルを使用した初期化に対応し コメントやテーブル名の指定や 文字列キー以外の デフォルト値も指定できます 次は より一般的なSwiftコードに 注目してみましょう ここに後ほど出てくる文字列を含む いくつかのモデルコードがあります StringとAttributedStringの localized: initializersを使用しています 実行時にユーザーに表示される文字列を 指定するためです Foundationのインポート場所であれば LocalizedStringResourceを 直接使用することもできます String Catalogsは Swiftコンパイラの強力な技術力で ローカライズ可能な Swift文字列を抽出します このため ビルド設定で Use Compiler to Extract Swift Strings を必ず有効にしてください String CatalogsはSwiftコード以外でも 文字列を抽出できます これはNSLocalizedStringを使用した Objective-Cコードの例です NSLocalizedStringマクロに 埋め込まれた文字列リテラルは 自動的にローカライズ可能とみなされます 検出可能な独自の類似マクロを 定義することもできます 同じ考えで CFCopyLocalizedStringを使って Cコードでも使うことができます CまたはObjective-Cでの カスタムローカライズ文字列マクロの指定は ローカライズ文字列マクロ名の ビルド設定を使用します ソースコードのローカライズ方法に ついて見てきましたが 次はInterface Builderで ローカライズ可能な文字列を見てみます Interface Builderで指定した文字列は 自動でローカライズ可能とみなされます インスペクタで これらの文字列のコメントを指定して 翻訳者に文字列が表示される場所を 知らせることも可能です String Catalogsがストーリーボード またはxibとペアになっている場合 インターフェイスビルダの ローカライズ可能な文字列はすべて カタログに存在します ソースコードと同じく プロジェクトをビルドするたびに Xcodeがカタログを更新します Info plistファイルでも 似たように動作します InfoPlist.xcstringsファイルを プロジェクトに追加し 希望のターゲットに追加するだけです ビルドするたびに Xcodeは ローカライズ可能なinfo plistキーの 既知のセットをカタログに追加します 必要に応じて手動で追加することもできます 最後に App Shortcutフレーズの ローカライズ方法について Xcodeで大きな改善が いくつかありました くわしくは 「Spotlight your app with App Shortcuts」 をぜひご視聴ください Xcodeがローカライズ可能な文字列を 見つける様々な場所を紹介しました 次はこれらの文字列がどのように String Catalogsに辿り着くのか紹介します Xcodeは ビルドするたびに 現在のスキームとプラットフォームで ローカライズ可能な文字列を検出します ソースコードからの文字列は ローカライズ可能文字列の情報源となり String Catalogs内の文字列は それに同期する形です 新しい文字列がコード上で発見されると Xcodeはそれらを String Catalogsに追加します この時点で文字列を翻訳することができます 先ほど説明したように ローカライズ可能文字列はコードで指定した デフォルト値を保持しているかもしれません その場合は カタログはコードからの 新しい値で更新されます コードから文字列を削除した場合も Xcodeは検出してくれます 文字列がまだ翻訳されていない場合は Xcodeがそれを削除します しかし あなたが既に文字列の翻訳を入力し 後に削除した場合 Xcodeはそれをそのままに Staleとマークします これは文字列がコードの中で もう検出されないことを示しています もはや必要ないことを確認した場合は 文字列とその翻訳は削除できます あるいはインスペクタを使って その特定の文字列を手動で管理したいことを Xcodeに伝えることもできます ビルド後にローカライズを同期する時にも 手動で管理されている文字列は Xcodeで更新または削除されません キーがコード内で動的に構築された文字列や データベースから生成される 文字列の場合に便利です これですべての文字列が String Catalogsに抽出されたので String Catalog Editorがどのように 翻訳を簡単に管理するか見てみましょう String Catalogsには ローカライズする際の 状態や翻訳の進捗を追跡するための 一流の機能があります コード内で検出できなくなったとき Xcodeが文字列をStaleとすることは すでに説明しました しかし 知っておくべきローカライズ状態が 他に3つあります 「New」は選択した言語に まだ翻訳されていないことを示します コードに文字列を追加すると表示されます 「Needs Review」は 値の変更を要する文字列のときに 表示されます 現在の値を使用したい場合は 「Mark as Reviewed」を コンテキストメニューから選択します こうすることで確認箇所を ローカライズ担当者に伝えることもできます 翻訳に関するバグレポートを 受け取ったときに便利です 翻訳が完了した文字列には 緑色のチェックマークが表示されます これは 作業が完了したことを示します ローカリゼーションのもう一つの よくある課題は複数形です 例えばこれはMarinaが Backyard Birdsに追加した 最近訪れた鳥の数を表示する文字列です 英語では単数か複数かで 文字列の文法を変える必要があります しかしたとえばウクライナ語では 考慮すべきことがさらに増えます この問題を解決するには 渡された数値に基づいて 文字列を変化させる方法が必要です いままでは解決するには 多くの言語では stringsdictファイルが必要でした このplist形式は使用が難しく 文字列を複数形に変えるという 単純であるべき作業を かなり複雑にしていました 今はString Catalog Editorの ビルトインサポートで 文字列の変数を編集できます 文字列のコンテキストメニューを表示すると 変数オプションが表示されます デフォルトのローカリゼーションで 文字列を変化させると 翻訳にも自動的に反映されます たとえばこれは複数形の設定に 2つの変数が必要な複雑な文字列です 実行時のシナリオがいくつか考えられます 1つの裏庭に1羽の鳥 複数の鳥に1つの裏庭 複数の鳥に複数の裏庭 もしくは1羽だけの鳥に複数の裏庭 など いずれの場合も 文法的な一致を維持するために 数字を囲む文字列を少し変えて 翻訳する必要があります String Catalog Editorを使えば これも簡単です 代入を使います ここでは 両方の引数を複数形に変えました 代入は@記号を先頭に持ち さまざまな複数形の値を保持しています この例では「birds」という代入で 鳥の数をフォーマットし 「yards」という代入で 裏庭の数をフォーマットしています 実行時には このトップレベルの文字列が使用され それぞれの参照代入から 適切な複数形が代入されます つまり これら文字列のいずれも生成可能で 代入可能な複数形の順列が 効果的に作成されるのです
代入は通常 文字列に渡される引数に対応し 多くは文字列補間を使用します Xcodeはインスペクタで 数値に使う引数の 位置情報を表示します 渡される型の C-style形式指定子も表示します この「yards」代入は ふたつめの引数に対応します ソースコードで2番目に使用されている 文字列補間であるためです backyards.countの値は この代入でどちらを使用するかを 決定するために 使用されます このようにString Catalogsは 簡単な文字列変数UIだけでなく 高度な設定にも対応しています ではMarinaが実際に使ってみます Marina: ありがとう Matt Backyard Birdsアプリに戻ると String Catalog Editorのおかげで 探している文字列を 簡単に見つけることができます learnという単語で 検索フィルターをかけたり 重要な州から順番にソートしたりできます Mattが指摘したように コードにはないが アプリには表示される文字列が あるかもしれません たとえば私のアプリでは購読者のために 空から舞い降りる特別な鳥がいたりします この場合 プラスボタンを使って 手動で文字列を定義し キーとコメントを 与えることができます
手動で管理した場合 Xcodeによる 更新や削除はありません Xcodeにコードから 文字列を抽出させたい場合は インスペクタを展開し
文字列の自動管理を設定します Xcodeは多言語化の進捗把握も簡単です 各文字列の横にバッジがあり 翻訳の現状がわかります 文字列がコードや手動で追加されると NEWと表示され 翻訳がまだということです ソース文字列に変更があると 翻訳にレビューマークが付きます 先ほど 英語版に変更を加えたので 既存の翻訳にレビューマークが付きました 変更が不要の場合は 文字列を右クリックで mark as reviewedを選びます 私はポルトガル語を話すので この訳も更新する必要があることが わかります
サイドバーを見ると この変更で ローカライズ率が上がったことが わかります 全てローカライズが完了すると サイドバーに 緑のチェックマークが表示されます Xcodeでローカライズの 進捗状況を把握し App Storeに提出する前に ローカライズが完璧と確信できる 最初の機会です ウクライナ語にも対応させていきましょう カタログエディタでプラスボタンを押し リストから新しい言語を選ぶことで 追加できます
未翻訳のウクライナ語カタログが 追加されました
先ほど追加したこの文字列は 複数形の変数が必要なようです そのためにはまず英語に戻り
文字列を右クリックで vary by pluralを選びます 英語では単数と複数形を区別するので その修正をしましょう
ポルトガル語の複数形は英語と同じです でもウクライナ語は 異なる複数形のケースが追加されています あとは私のウクライナ語の翻訳者に 任せられます
ビューに戻り 別のラベルを追加します それぞれの裏庭にいる 鳥の数を示すラベルです では追加しましょう
ビルドに行って
カタログに戻ります
これです 複数形の変数も入れたいのですが 複数の引数が含まれています この場合 文字列を右クリックして 複数形変数を選択すると 変化させたい引数を選べます 両方とも変化させてみましょう
次に実行時に複数形になるように 代入を設定します 引数と一致が必要の単語を移動させます birdsは 「birds」代入に backyardsは 「yards」代入に移動します
読みやすくするために 代入の名前を変えて どの変数と引数が紐づくか わかるようにします
見やすくなりました 次はMattがウクライナ語の翻訳のための 文字列エクスポート方法を教えてくれます Matt: ありがとう Marina といわけで Xcodeでは String Catalogs上で直接 簡単に翻訳や編集ができます しかしときにXcodeの外で 翻訳者と作業する必要があることもあります そこで役立つのがXcodeの Export Localizationsオプションです 各言語ごとに ローカリゼーションカタログを生成し 出力することができます ローカリゼーションカタログは Xcode10で初導入され プロジェクトやワークスペース内の ローカライズ可能な全コンテンツを含む パッケージ・フォーマットです まずは内側のXLIFFファイルの説明です ローカライズ可能な全ての 文字列と翻訳を保持しています XLIFFはローカリゼーションの 保存および転送のための 業界標準フォーマットです XLIFFファイルを直接使用する場合 String Catalogsを使ったプロジェクトの 文字列変数の表現の変化に 気をつけましょう もともと.stringdictファイルで定義された 複数形の文字列のXLIFF形式の例です このトランスユニット識別子は stringsdict plistフォーマットへの パスとして機能します String Catalogsから 文字列変数が生成されている場合は このようになります 文字列キー 区切りシーケンス そして ドット区切りの構成文字列が含まれます この構成文字列は 単純な複数形指定子であったり Device Specifier 複数のつながった条件 または代用内の複数形への パスである可能性があります 自動化ツールによるキーの読み込みは 簡単にするだけでなく 人間が読んでも一目で理解できるように 設計されています 翻訳ツールは XLIFFの翻訳ユニットを 任意の変数構造に置き換えることで 以前は変数化されていなかった文字列を 変数化することができます たとえば現在変数のない文字列があります Apple Watchでポルトガル語で 使うときだけ 短い文字列にしたいとします XLIFFのunitをdevice.applewatchと device.otherの変数に置き換えることで 次回のインポートでこの言語に存在する 変数構造に影響を与えることができます
ローカリゼーションのエクスポート時に XLIFFのデフォルト使用形式が String Catalogsになるようにするには Localization Prefers String Catalogsを Yesに設定します 翻訳者から受け取った 翻訳済みローカリゼーションカタログは プロジェクトに 再インポートすることができます String Catalogsから来た文字列については インポートされたファイルで指定した翻訳が 自動的に適切なカタログに追加されます Backyard Birdsで試してみましょう Marina: 私はポルトガル語を話すので ポルトガル語は翻訳済みです ウクライナ語については翻訳者に ローカライズ用コンテンツを 送る必要があります Productメニューをクリックし Export Localizationsを選択 エキスポートしたい言語を選択 ウクライナ語です Exportをクリック
翻訳が戻ってきたら 再度アプリにインポートします 戻ってきました 翻訳が用意できたのでアプリに戻って Productメニューをクリック 今回はImport Localizationsを選択 そしてウクライナ語のカタログを選びます
どうなったか見てみましょう
完璧です ウクライナ語の翻訳が配置され 両方の言語のローカライズが完了しました ポルトガル語はどうでしょうか scheme selectorをクリックし Edit Schemeを選択します オプションで言語を ポルトガル語に切替えます
アプリを実行します
いいですね 作業した文字列の一部がありますね
翻訳は完了です Mattに戻りましょう Matt: コンテンツが全て翻訳されたところで ビルド中に何が起きるのか説明します String CatalogsはXcodeの プロジェクト内の設定に特化しています 内部ではJSONファイルとして ソース・コントロールで 簡単に差分できるはずです ビルド時にこれらは .stringsと.stringsdictにコンパイルされます これらの形式は長年私たちのOSで サポートされているので 最小デプロイ・ターゲットを 更新することなく すぐにString Catalogsを 使い始めることができるのです コードから抽出されたソース文字列が 最終ビルドに含まれないことも 注目に値します これにより実行時に表示される文字列に 影響を与えずに ディスク容量を節約できます すべての利点を紹介し終えたので Marinaが既存プロジェクトで String Catalogsを 使い始める方法を紹介します Marina: Xcodeは既存プロジェクトの String Catalogsへの移行を 簡単にしてくれます あなたのペースで行うことができます 準備ができたらいつでも 移行する文字列ファイルとターゲットを 選ぶことができます これは昨年ローカライズした 既存のアプリFoodTruckです .stringsと.stringsdictファイルが あることがわかりますね String Catalogsは レガシーフォーマットと共存できます ですからローカライズ可能テーブルの移行は いつでもできます 早速やってみましょう ファイルを右クリック Migrate to String Catalogを選択 Xcodeには移行アシスタントがあり プロジェクト内の移行可能ファイルを リストアップしてくれます これはFoodTruckターゲットの一部の ローカライズ可能テーブルです さっそく移行してみましょう
出来ました 次は Xcodeが文字列抽出のために プロジェクトをビルドします ビルド後のカタログを見てみましょう stringsdictファイルの複数形を含む 全ての文字列が移行されました アラビア語の翻訳も配置されましたが フランス語の翻訳は未完了のようです String Catalogsがローカライズ未完了の 文字列を見つけてくれます FoodTruckにはFoodTruckKitという swiftパッケージがあります まだローカライズされていません String Catalogsなら 新しいパッケージやプロジェクトの ローカライズも簡単です デフォルトのローカライズを パッケージマニフェストに追加します Swift Toolsバージョン5.9の使用を 確認します
そして新しいString Catalogsを Localizableという デフォルトのテーブル名で パッケージに追加します
プロジェクトをビルドした後 パッケージ全体のすべての文字列を 見ることができます それだけで簡単に ローカライズができました String CatalogsはXcodeの ローカリゼーションの新しい基盤であり プロジェクト内の翻訳作業を簡素化します ぜひ今日にでも移行をはじめてみましょう ローカライズ未経験の方も とても簡単なのでぜひやってみてください Obrigada pela companhia hoje ご視聴ありがとうございました ハッピーバードウォッチング ♪ ♪
-
-
4:30 - Localizable string
String(localized: "Welcome to WWDC!")
-
4:42 - Localizable string with default value
String(localized: "WWDC_NOTIFICATION_TITLE", defaultValue: "Welcome to WWDC!")
-
5:05 - Localizable string with comment
String(localized: "Welcome to WWDC!", comment: "Notification banner title")
-
5:22 - Localizable string with table and comment
String(localized: "Welcome to WWDC!", table: "WWDCNotifications", comment: "Notification banner title")
-
7:36 - Localizable strings in SwiftUI
// Localizable strings in SwiftUI struct ContentView: View { var body: some View { VStack { Label("Thanks for shopping with us!", systemImage: "bag") .font(.title) HStack { Button("Clear Cart") { } Button("Checkout") { } } } } }
-
8:01 - Localizable strings in SwiftUI with LocalizedStringKey
// Localizable strings in SwiftUI struct ContentView: View { var body: some View { VStack { // init(_ titleKey: LocalizedStringKey, systemImage name: String) Label("Thanks for shopping with us!", systemImage: "bag") .font(.title) HStack { Button("Clear Cart") { } Button("Checkout") { } } } } }
-
8:08 - Localizable strings in SwiftUI text view
// Localizable strings in SwiftUI struct ContentView: View { var body: some View { VStack { Label { Text("Thanks for shopping with us!", comment: "Label above checkout button") } icon: { Image(systemName: "bag") } .font(.title) HStack { Button("Clear Cart") { } Button("Checkout") { } } } } }
-
8:16 - Localizable strings in SwiftUI custom view
// Localizable strings in SwiftUI struct CardView: View { let title: LocalizedStringResource let subtitle: LocalizedStringResource var body: some View { ZStack { RoundedRectangle(cornerRadius: 10.0) VStack { Text(title) Text(subtitle) } .padding() } } } CardView(title: "Recent Purchases", subtitle: "Items you’ve ordered in the past week.")
-
9:03 - Localizable strings in Swift displayed at runtime
// Localizable strings in Swift import Foundation func stringsToPresent() -> (String, AttributedString) { let deferredString = LocalizedStringResource("Title") … return ( String(localized: deferredString), AttributedString(localized: "**Attributed** _Subtitle_") ) }
-
9:44 - Localizable strings in Objective-C
// Localizable strings in Objective-C #import <Foundation/Foundation.h> - (NSString *)stringForDisplay { return NSLocalizedString(@"Recent Purchases", @"Button Title"); } #define MyLocalizedString(key, comment) \ [myBundle localizedStringForKey:key value:nil table:nil]
-
10:04 - Localizable strings in C
// Localizable strings in C #include <CoreFoundation/CoreFoundation.h> CFStringRef stringForDisplay(void) { return CFCopyLocalizedString(CFSTR("Recent Purchases"), CFSTR("Button Title")); } #define MyLocalizedString(key, comment) \ CFBundleCopyLocalizedString(myBundle, key, NULL, NULL)
-
11:23 - App Shortcut phrases
// App Shortcut phrases struct FoodTruckShortcuts: AppShortcutsProvider { static var appShortcuts: [AppShortcut] { AppShortcut( intent: ShowTopDonutsIntent(), phrases: [ "\(.applicationName) Trends for \(\.$timeframe)", "Show trending donuts for \(\.$timeframe) in \(.applicationName)", "Give me trends for \(\.$timeframe) in \(.applicationName)" ] ) } }
-
23:53 - Stringsdict in XLIFF
// Stringsdict in XLIFF <trans-unit id="/%lld Recent Visitors:dict/NSStringLocalizedFormatKey:dict/:string"> <source>%#@recentVisitors@</source> <target>%#@recentVisitors@</target> </trans-unit> <trans-unit id="/%lld Recent Visitors:dict/recentVisitors:dict/one:dict/:string"> <source>%lld Recent Visitor</source> <target>%lld Visitante Recente</target> </trans-unit> <trans-unit id="/%lld Recent Visitors:dict/recentVisitors:dict/other:dict/:string"> <source>%lld Recent Visitors</source> <target>%lld Visitantes Recentes</target> </trans-unit>
-
24:08 - String Catalog in XLIFF
// String Catalog in XLIFF <trans-unit id="%lld Recent Visitors|==|plural.one"> <source>%lld Recent Visitor</source> <target>%lld Visitante Recente</target> </trans-unit> <trans-unit id="%lld Recent Visitors|==|plural.other"> <source>%lld Recent Visitors</source> <target>%lld Visitantes Recentes</target> </trans-unit>
-
24:58 - String Catalog variations in XLIFF
// Overriding variation in XLIFF <trans-unit id="Bird Food Shop|==|device.applewatch"> <source>Bird Food Shop</source> <target>Loja de Comida</target> </trans-unit> <trans-unit id="Bird Food Shop|==|device.other"> <source>Bird Food Shop</source> <target>Loja de Comida de Passarinho</target> </trans-unit>
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。