|
|
import Foundation
|
|
|
|
|
|
// 模拟测试本地化回退机制
|
|
|
func testLocalizationFallback() {
|
|
|
print("=== 测试本地化回退机制 ===")
|
|
|
|
|
|
// 模拟LanguageManager的localizedString方法
|
|
|
func localizedString(for key: String, language: String) -> String {
|
|
|
let bundle = Bundle.main
|
|
|
|
|
|
// 首先尝试从当前语言获取字符串
|
|
|
if let path = bundle.path(forResource: language, ofType: "lproj"),
|
|
|
let languageBundle = Bundle(path: path) {
|
|
|
let localizedString = languageBundle.localizedString(forKey: key, value: nil, table: nil)
|
|
|
|
|
|
// 如果返回的字符串不是key本身,说明找到了本地化条目
|
|
|
if localizedString != key {
|
|
|
print("✅ 在 \(language) 中找到 '\(key)': '\(localizedString)'")
|
|
|
return localizedString
|
|
|
} else {
|
|
|
print("❌ 在 \(language) 中未找到 '\(key)'")
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 如果当前语言没有找到条目,回退到英语
|
|
|
if let path = bundle.path(forResource: "en", ofType: "lproj"),
|
|
|
let languageBundle = Bundle(path: path) {
|
|
|
let englishString = languageBundle.localizedString(forKey: key, value: nil, table: nil)
|
|
|
|
|
|
// 如果英语也没有找到,返回key本身
|
|
|
if englishString != key {
|
|
|
print("🔄 回退到英语: '\(key)' -> '\(englishString)'")
|
|
|
return englishString
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 最后回退到key本身
|
|
|
print("⚠️ 最终回退到key: '\(key)'")
|
|
|
return key
|
|
|
}
|
|
|
|
|
|
// 测试用例
|
|
|
let testKeys = ["settings", "scan", "create", "nonexistent_key"]
|
|
|
let testLanguages = ["ja", "ko", "en"]
|
|
|
|
|
|
for language in testLanguages {
|
|
|
print("\n--- 测试语言: \(language) ---")
|
|
|
for key in testKeys {
|
|
|
let result = localizedString(for: key, language: language)
|
|
|
print("结果: '\(key)' -> '\(result)'")
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 运行测试
|
|
|
testLocalizationFallback()
|