2017-08-23 15 views
0

私は多言語アプリケーションで作業しています。このアプリにはいくつかのサウンドファイルが含まれています。例えばユーザのシステム言語が英語の場合、ユーザがappleアイコンをクリックすると、 "apple"の発音が/base.lproj/apple.mp3ファイルから再生されます。ユーザーのシステム言語がトルコ語の場合、 "apple"の発音は/tr.lproj/apple.mp3ファイルからトルコ語で再生されます。IOSローカライズされたサウンドファイルがデバイスで動作していません

enter image description here

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 :)メソッドを使用して論理コードを構築する必要があります。 (システム言語のチェックなど)

答えて

1

テストアプリでローカライズされたmp3を使用しようとしましたが、実際のデバイスで問題なく動作します。 nameとして正確に何を渡したらlet path = Bundle.main.path(forResource: name, ofType: "mp3")に入りますか?あなたのプロジェクトに他のファイルがあるとしたら、毎回このファイルが必要になるかもしれません!

ローカライズされたユーザー以外のプロジェクトナビゲータにそのような名前のファイルがない場合は、アプリをアンインストールしてください。アプリのディレクトリにアプリが残っている可能性があります。

+0

アプリをアンインストールして、プロジェクトをクリーンアップします。ありがとうございました –

関連する問題