私は多言語アプリケーションで作業しています。このアプリにはいくつかのサウンドファイルが含まれています。例えばユーザのシステム言語が英語の場合、ユーザがappleアイコンをクリックすると、 "apple"の発音が/base.lproj/apple.mp3ファイルから再生されます。ユーザーのシステム言語がトルコ語の場合、 "apple"の発音は/tr.lproj/apple.mp3ファイルからトルコ語で再生されます。IOSローカライズされたサウンドファイルがデバイスで動作していません
Localizable.string、Main.string、InfoPlist.stringsおよびすべてのサウンドファイルがし、プロジェクトをローカライズしているシミュレータで罰金作業です。
しかし、実際のデバイスをテストする場合、サウンドファイルはシステム言語に応じてローカライズされません。基本言語(英語)のサウンドファイルのみを再生します。
私は問題を発見したと思うが、私は解決策を知らない。サウンドを再生する
は、最初に私はそのようなサウンドURLを見つけました:私はシミュレータで音のURLを印刷するとき
let path = Bundle.main.path(forResource: name, ofType: "mp3")
print(path)
let soundURL = URL(fileURLWithPath: path!)
、シミュレータは、言語に応じて、正しいサウンドファイルを見つけます。
/Bundle/Application/.../tr.lproj/apple.mp3" //Applang: Turkish - Play Tur
/Bundle/Application/.../base.lproj/apple.mp3" //Applang: System - Play Eng
しかし、ときに私トルコ語である言語を実際のデバイスに出力すると、基本言語ファイル(英語)が検索され、このパスが印刷されます。
/Bundle/.../grapefruit.mp3" // where is tr.lproj ?
アゲインLocalizable.string(トルコ)、Main.string(トルコ)、InfoPlist.strings(トルコ)は良い仕事をし、実際のデバイス上で、独自のlangaugeに正しくテキストを表示します。
アップルDocument
パス(forResourceによると:ofType :): 方法は、最初の指定されたバンドルの非ローカライズされたリソースディレクトリ内の一致するリソースファイルを探します。一致するリソースファイルが見つからない場合は、利用可能な言語固有の.lprojフォルダの最上位レベルを検索します。 ofType:inDirectory:forLocalization :)
とその
let path = Bundle.main.path(forResource: name, ofType: "mp3",inDirectory:"tr.lproj",forLocalization:"tr")
のように私のコードを指定 はので、私は別のパスmethod
パス(forResourceを使用する必要があることを理解します
ローカライズされたサウンドファイルをデバイス内に正しく表示する方法はありますか? また、path(forResource:ofType:inDirectory:forLocalization :)メソッドを使用して論理コードを構築する必要があります。 (システム言語のチェックなど)
アプリをアンインストールして、プロジェクトをクリーンアップします。ありがとうございました –