1

如果我在操场上运行以下代码:

var button1 = new qx.ui.form.Button("First Button", "icon/22/apps/internet-web-browser.png");
var doc = this.getRoot();
doc.add(button1, { left : 100, top  : 50 });
button1.addListener("execute", function(e) { alert("Hello World!"); });
button1.setToolTipText(new qx.ui.core.Command("Control+D").toString());
qx.locale.Manager.getInstance().setLocale("en");

按钮工具提示显示 Ctrl+D。

如果我将语言环境更改为“de”,工具提示仍然显示 Ctrl+D。在第二次运行时,它显示正确的字符串 Strg+D。

我怎样才能让它在第一次运行时显示正确的字符串?

显示我的问题的一个更好的例子是:

var doc = this.getRoot();
var button1 = new qx.ui.form.Button("Deutsch", "icon/22/apps/internet-web-browser.png");
doc.add(button1, { left : 100, top  : 50 });
button1.addListener("execute", function(e) { qx.locale.Manager.getInstance().setLocale("de"); });
button1.setToolTipText(new qx.ui.core.Command("Control+D").toString());

var button2 = new qx.ui.form.Button("English", "icon/22/apps/internet-web-browser.png");
doc.add(button2, { left : 200, top  : 50 });
button2.addListener("execute", function(e) { qx.locale.Manager.getInstance().setLocale("en"); });
button2.setToolTipText(new qx.ui.core.Command("Control+E").toString());

看看工具提示。

这是一个错误还是我没有以正确的方式设置语言环境?

/亲切的问候

基督教

4

1 回答 1

1

您的两个片段的问题在于评估和顺序。一方面,qx.ui.core.Command("Control+D").toString()在给定当前语言环境的情况下,只返回一个纯字符串。之后,该值是“固定的”,不再自动更改。在您的第一个片段中,您首先设置工具提示,然后更改语言环境。这意味着,工具提示是根据在切换到“en”之前生效的任何语言环境设置的。如果您随后重新运行该片段(我假设您使用的是 Playground),则会在新的语言环境下执行设置工具提示,并且工具提示会显示英文版本。

在第二个片段中,更改“执行”侦听器中的语言环境对工具提示没有影响,因为它的值已经“硬连线”使用在评估代码时有效的任何语言环境(而不是当其中一个按钮被按下!)。当然,如果您按下其中一个按钮,然后在 Playground 中重新运行代码,则会选择新的语言环境并显示在工具提示中。

解决此问题的一种方法是在“执行”侦听器中设置工具提示。请参阅此游乐场示例。 (这不是很明智,但我认为你可以从这里开始工作)。

于 2011-01-07T18:21:10.860 回答