【发布时间】:2018-01-31 23:40:43
【问题描述】:
我正在开发一个多语言应用程序。这个应用程序包括一些声音文件。例如,如果用户的系统语言是英语,当用户点击苹果图标时,“苹果”名称的发音将从/base.lproj/apple.mp3 文件中播放。如果用户的系统语言是土耳其语,“apple”名称的发音将在 /tr.lproj/apple.mp3 文件中以土耳其语播放。
Localizable.string、Main.string、InfoPlist.strings 和所有声音文件都本地化,项目在模拟器上工作正常。
但是,当我们在真机上进行测试时,声音文件并没有根据系统语言进行本地化。并且只播放基本语言(英语)的声音文件。
我想我发现了问题,但我不知道解决方案。
要播放声音,首先我找到了这样的声音 URL:
let path = Bundle.main.path(forResource: name, ofType: "mp3")
print(path)
let soundURL = URL(fileURLWithPath: path!)
当我在模拟器中打印声音 url 时,模拟器会根据语言找到正确的声音文件:
/Bundle/Application/.../tr.lproj/apple.mp3" //Applang: Turkish - Play Tur
/Bundle/Application/.../base.lproj/apple.mp3" //Applang: System - Play Eng
但是当我在真实设备中打印土耳其语的声音 url 时,它会找到基本语言文件(英语)并打印此路径。
/Bundle/.../grapefruit.mp3" // where is tr.lproj ?
Localizable.string(土耳其语)、Main.string(土耳其语)、InfoPlist.strings(土耳其语)再次运行良好,并在真实设备上以自己的语言正确显示文本。
根据苹果Document
路径(forResource:ofType:) : 该方法首先在指定包的非本地化资源目录中查找匹配的资源文件。如果未找到匹配的资源文件,则会在可用的特定语言 .lproj 文件夹的顶层查找。
所以我知道我应该使用另一条路径method
路径(forResource:ofType:inDirectory:forLocalization:)
并这样指定我的代码
let path = Bundle.main.path(forResource: name, ofType: "mp3",inDirectory:"tr.lproj",forLocalization:"tr")
还有其他方法可以在设备中正确本地化声音文件吗? 或者我应该使用 path(forResource:ofType:inDirectory:forLocalization:) 方法并构建一些逻辑代码。 (检查系统语言等)
【问题讨论】:
标签: ios swift localization