web-dev-qa-db-ja.com

Images.xcassetsの画像をローカライズする方法は?

次のようにFile Inspectorを使用して、Localize...の画像をローカライズできます。

enter image description here

次に、これを取得できます。

enter image description here

しかし今、Images.xcassetsを使用してiOSプロジェクトの画像を管理しています。これらの画像をImages.xcassetsでローカライズするにはどうすればよいですか?

53
SamirChen

(明らかに)xcassetsファイルを明示的に直接ローカライズする方法は現在のところありませんが、could Localizable.stringsファイルを使用してプルするアセットの名前をローカライズします。たとえば、ローカライズする必要があるゲームのメインメニューのグラフィックロゴ処理があるとします。ローカライズされたロゴ処理を別の名前でアセットファイルに配置し、Localizable.stringsファイルに名前を追加してから、次のようなコードで適切な画像を取得できます。

UIImage *img = [UIImage imageNamed:NSLocalizedString(@"MAIN_MENU_IMAGE", nil)];
92
cc.

Appleがレモンを与える、レモネードを作る、この場合は、lemonade_en、lemonade_es、またはあなたのニーズに合ったものを提供します。

まず、次のようにアセットファイルに目的の言語ごとにエントリを作成します。

enter image description here

次に、デバイスの言語コードを取得する必要があります。ここで覚えておくべき重要なことは、ユーザーがサポートされていない言語を持っている可能性があることです。その場合、デフォルトを返します(私は英語を使用します)。

次のUIApplicationの拡張子は、これらすべてを処理します。

extension UIApplication {
    var languageCode: String {
        let supportedLanguageCodes = ["en", "es", "fr"]
        let languageCode = Locale.current.languageCode ?? "en"

        return supportedLanguageCodes.contains(languageCode) ? languageCode : "en"
    }
}

この拡張機能は次のことを行います。

  • アプリがサポートする言語の配列を作成します
  • 現在のデバイスの言語コードを取得するか、nilの場合はデフォルト値を返します
  • 最後に、現在のコードがサポートされているリストにあるかどうかを確認します。存在する場合はそれを返し、そうでない場合はデフォルトコードを返します

ここで、2つを組み合わせて適切な画像を取得します。

let languageCode = UIApplication.shared.languageCode
let image = UIImage(named: "access_\(languageCode)")
8
CodeBender

インターネットで検索した結果、この機能は現在xcassetsによって提供されていないと思います。したがって、ローカライズ画像の管理にxcassetsを使用しないでください。

7
johnMa

私は別の方法を見つけました:

  1. asset.xcassetsに各言語のフォルダーを追加します(例:en、it、de)
  2. フラグ「Provides Namespace」を各フォルダーに設定します
  3. そのフォルダ内のすべての画像とアセットをコピーします
  4. コードで次を呼び出してアセットをロードします
let languageCode = UIApplication.shared.languageCode
let image = UIImage(named: "\(languageCode)\assetname")
3
Ugo Chirico

現時点では、ローカライズが必要な画像をImages.xcassetsから取り出して、標準プロジェクトフォルダーに配置します。ローカライズされていない画像は.xcassetsに残します。ローカライズする必要のある画像には、この方法を使用します。

1
ninjaneer

その「ローカライズ...」ボタンはXcode 11に戻りました!そのため、期待どおりに資産カタログ内の画像と資産をローカライズできます。

enter image description here

1