Titanium SDK 国际化(Locale)模块详解与应用指南
模块概述
Titanium.Locale 是 Titanium SDK 中处理国际化和本地化的核心模块,它允许开发者创建适应不同语言和地区的应用程序。该模块提供了访问设备当前区域设置信息的能力,并支持从本地化资源文件中获取翻译文本。
核心功能解析
1. 本地化字符串管理
getString
方法是 Locale 模块最常用的功能,它从 /i18n/LANG/strings.xml
文件中获取本地化字符串:
// 获取本地化字符串
var greeting = Ti.Locale.getString('greeting', '默认文本');
// 使用 L 宏简化写法(效果相同)
var greeting = L('greeting', '默认文本');
最佳实践:
- 为每个键提供默认值,防止找不到键时显示空内容
- 使用
formatted="false"
属性处理包含占位符的复杂字符串 - 按语言组织字符串资源文件,如
/i18n/en/strings.xml
2. 货币与数字处理
Locale 模块提供了多种货币相关方法:
// 获取货币代码
var currencyCode = Ti.Locale.getCurrencyCode('en-US'); // 返回 "USD"
// 获取货币符号
var symbol = Ti.Locale.getCurrencySymbol('USD'); // 返回 "$"
// 解析本地化数字
var number = Ti.Locale.parseDecimal('1,234.56'); // 返回 1234.56
注意事项:
- 不同地区数字格式不同(如1,234.56 vs 1.234,56)
- 货币符号位置和格式因地区而异
- 使用 parseDecimal 处理用户输入时考虑本地化格式
3. 语言与区域设置
// 获取当前区域信息
var language = Ti.Locale.currentLanguage; // "en"
var country = Ti.Locale.currentCountry; // "US"
var locale = Ti.Locale.currentLocale; // "en-US"
// 动态设置应用语言
Ti.Locale.setLanguage('es'); // 切换为西班牙语
重要提示:
- 语言切换后可能需要重启窗口才能应用RTL(从右到左)布局
- Android支持语言+国家代码组合(如zh-CN)
- 监听change事件处理区域设置变更
实战示例
多语言应用实现
- 创建资源文件结构:
/i18n/
/en/strings.xml
/es/strings.xml
/zh/strings.xml
- 示例英文资源文件:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<string name="welcome">Welcome</string>
<string name="price" formatted="false">Price: %s</string>
</resources>
- 在代码中使用:
// 显示本地化欢迎语
alert(L('welcome'));
// 格式化带价格的字符串
var price = String.format(L('price'), '$9.99');
电话号码格式化(仅Android)
var formattedNumber = Ti.Locale.formatTelephoneNumber('1234567890');
// 可能返回 "(123) 456-7890"(根据地区格式不同)
高级技巧
- 动态内容本地化:
// 根据当前区域显示不同内容
if (Ti.Locale.currentLanguage === 'zh') {
// 加载中文特定资源
} else {
// 加载默认资源
}
- 处理数字本地化:
// 确保数字在不同区域正确解析
var userInput = '1.234,56'; // 德国格式
var value = Ti.Locale.parseDecimal(userInput, 'de-DE');
- 货币显示优化:
function formatCurrency(amount) {
var code = Ti.Locale.getCurrencyCode(Ti.Locale.currentLocale);
var symbol = Ti.Locale.getCurrencySymbol(code);
return symbol + amount.toFixed(2);
}
常见问题解决方案
- 字符串未翻译:
- 检查键名是否拼写正确
- 确认对应语言的strings.xml文件存在
- 提供有意义的默认值
- 数字解析错误:
- 明确指定区域参数
- 处理NaN情况
- 考虑用户区域设置
- 语言切换不生效:
- Android可能需要重启Activity
- 检查是否支持目标语言
- 确认资源文件路径正确
总结
Titanium.Locale 模块为应用国际化提供了全面支持,从简单的字符串翻译到复杂的数字、货币和电话号码处理。通过合理利用这些功能,开发者可以轻松创建适应全球用户的应用程序。记住始终考虑不同地区的文化差异和格式习惯,这是实现真正国际化应用的关键。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考