Qooxdoo - ярлык команды не переводится

Если я запускаю следующий код на игровой площадке:

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());

Взгляните на всплывающие подсказки.

Это ошибка или я не правильно устанавливаю локали?

/С уважением

христианин


person Christian    schedule 06.01.2011    source источник


Ответы (1)


Проблема с обоими вашими фрагментами заключается в оценке и порядке. Во-первых, qx.ui.core.Command("Control+D").toString() просто возвращает простую строку, учитывая текущую локаль. После этого значение «фиксируется» и больше не изменяется автоматически. В первом фрагменте вы сначала устанавливаете всплывающую подсказку, а затем меняете язык. Это означает, что всплывающая подсказка устанавливается в соответствии с действующим языковым стандартом перед переключением на «en». Если вы затем повторно запустите фрагмент (я предполагаю, что вы используете игровую площадку), установка всплывающей подсказки выполняется в новой локали, и всплывающая подсказка показывает английскую версию.

Во втором фрагменте изменение локали в прослушивателе «выполнить» не влияет на всплывающую подсказку, так как ее значение уже «зашито» с использованием любой локали, действовавшей во время оценки кода (и не при нажатии одной из кнопок!). Конечно, если вы нажмете одну из кнопок, а затем повторно запустите код в Playground, новая локаль будет выбрана и отображена во всплывающих подсказках.

Один из способов обойти это — установить всплывающую подсказку в прослушивателе «выполнить». См. этот пример Playground. (Это не очень разумно, но я думаю, что вы можете работать дальше).

person ThomasH    schedule 07.01.2011
comment
aaahhh .. Большое спасибо, конечно, строка исправлена ​​​​и не переоценивается каждый раз, иногда это простое решение - person Christian; 08.01.2011