0

我已经实现了自己的手动方法,可以在应用程序中切换应用程序的本地化,而无需修改设备的本地化设置。用户要么通过 iOS 设备上的一组右侧导航按钮单击选项卡式栏,要么使用 Android 设备上的本机菜单来选择所需的语言。

此方法适用于 iOS 设备。它几乎在 Android 设备上运行良好,因为在用户做出选择后,所有文本标签都会立即设置为相应的语言。但是,本机 TabGroup 选项卡标题在我的 Android 设备上没有改变。它们会在我的 iOS 设备上立即更改。

我尝试了许多不同的方法来尝试解决这个问题。我尝试从 TabGroup 中删除现有选项卡,但 Android 不支持这一点,至少在使用 Titanium 时不支持。我尝试关闭 tabGroup 然后重新打开它,但这只会导致我的应用程序锁定。我还尝试循环浏览所有标签并以这种方式设置标题无济于事。我还尝试在 tabGroup 的 tabs 数组上使用 splice() 命令,这只会引发 TypeError 抱怨找不到对象的默认值。

这变得非常令人沮丧。我查看了可用的自定义选项卡选项,包括名为 Tabulous 的 Titanium Marketplace 模块。我对这些替代方案中的任何一个都没有感到兴奋,特别是它们的水平布局性能不佳或依赖于使用图像而不是图像和文本的混合。

我知道的一件事是,在 Android 设备上,我的标签标题正在更改,因为在我的事件侦听器中,我在语言选择上设置标签标题,我可以循环浏览我的 tabGroup 集合中的标签并输出反映的标题选择的语言。但是,出于某种原因,Android 不会重新绘制选项卡以显示新文本。

这是我设置选项卡标题的事件侦听器的片段:

Titanium.App.addEventListener('langChanged', function() {
    homeTab.title = al.L('home_win_title');
    servicesTab.title = al.L('services_win_title');
    mediaTab.title = al.L('media_win_title');
    contactTab.title = al.L('media_win_title');

    // Android test:
    if (Ti.Platform.name == 'android') {
        for (var t in tabGroup.tabs) {
            // The alert below returns the expected title based on the language selection!
            alert(tabGroup.tabs[t].title);
        }
    }
});

正如我所说,在我的测试 iOS 设备上,标签标题按预期更新。在 Android 设备上,它们不会改变(不会重新绘制),尽管我在上述循环中抛出的警报显示了正确的文本。

任何想法,任何人?

4

1 回答 1

0

我在尝试在应用程序中支持多种语言的同时也遇到了同样的问题,Appcelerator Q&A 网站上的这篇文章似乎确认无法在 Android 上更改选项卡标题。

但是,我通过关闭选项卡组并打开一个新选项卡来解决此问题 - 因此可以这样做,并且可能需要重构一些应用程序以防止您提到的锁定问题。

于 2011-11-17T11:11:14.697 回答