Доступ к контекстному меню в локализованных версиях

Статус
Закрыто для дальнейших ответов.

pirate-party

Участник
Топикстартер
Сообщения
42
Реакции
150
Как получить ссылку на элемент коллекции app.menus в локализоавнных версиях InDesign?
Почему не работает такой фрагмент в русской версии?

Код:
s = app.translateKeyString("$ID/RtMouseDefault");

alert(s); // Контекстное меню "Общие"

mnu = app.menus.itemByName(s);

alert(mnu.isValid); // false
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 294
Реакции
10 865
Ответ: Доступ к контекстному меню в локализованных версиях

Это ж уже тут несколько раз обсуждали. Нельзя и все, причем решения вразумительного, насколько я помню для контекстного меню, так никто и не придумал. :(
 

Eugenyus

12 лет на форуме
Сообщения
1 960
Реакции
3 589
Ответ: Доступ к контекстному меню в локализованных версиях

По индексу. Найти индекс и обратиться по нему:
Код:
for (i = 0; i < app.menus.length; i++){
try{
$.writeln(i+": "+app.findKeyStrings(app.menus.item(i).name));
}
catch(e){}
}
И для каждой локализации вбивать свой индекс.
 

pirate-party

Участник
Топикстартер
Сообщения
42
Реакции
150
Ответ: Доступ к контекстному меню в локализованных версиях

Ну можно, конечно, искать перебором:

Код:
s = app.translateKeyString("$ID/RtMouseDefault");

for (var i = app.menus.length; i--;) {
    if (app.menus[i].name == s) break;
}
mnu = app.menus.item(i);

alert(mnu.name + '    isValid:' + mnu.isValid); //Контекстное меню "Общие"    isValid:true

Но это же порно какое-то =)
 

Eugenyus

12 лет на форуме
Сообщения
1 960
Реакции
3 589
Ответ: Доступ к контекстному меню в локализованных версиях

Скажу даже больше: от версии к версии индексы меняются. И в локализациях не совпадают. Так что да, Вы правы :).
Мой пример выдаст полный список меню с их индексами. Через них и обращаться. Другого способа не нашёл.
Вот ещё пример для доступа к контекстному меню таблиц:
Код:
var menuName = "Текст меню";
var myMenuItem  = app.scriptMenuActions.add(menuName);
myMenuItem.addEventListener ('onInvoke', function() {main();});

var cm = localize({en:"var rMouseMnu = app.menus[103]",ru:"var rMouseMnu = app.menus[16]"});
app.doScript(cm);
rMouseMnu.menuItems.add(myMenuItem);
Понятно, что для всех локализаций руками вбивать данные — изврат, но не мы тут виноваты.
 

apg_777

15 лет на форуме
Сообщения
278
Реакции
81
Ответ: Доступ к контекстному меню в локализованных версиях

Ну зачем же ручками вбивать? Есть же функция app.translateKeyString
На AppleScript это, к примеру, выглядит так:
set GrayScaleImage to translate key string for "$ID/Grayscale"
В результате англоязычный индизайн вернет "grayscale", а русскоязычный "градации серого".
И для меню есть:
set cFitSelection to translate key string for "$ID/Fit Selection in Window"
потом спокойно вызываем:
invoke menu action cFitSelection
И не важно какая локализация.
В JavaScript все делается аналогично.

Главная проблема - найти правильные "$ID/..."
 

Eugenyus

12 лет на форуме
Сообщения
1 960
Реакции
3 589
Ответ: Доступ к контекстному меню в локализованных версиях

Тогда, возвращаясь к началу, что неправильно в примере первого сообщения?
У Вас получилось одной строкой, через тот же translateKeyString к примеру, получить доступ к контекстному меню, хотя бы к тому же дефолтному, из первого сообщения, да так, чтобы сработало и в русском, и в английском варианте программы?
 

Eugenyus

12 лет на форуме
Сообщения
1 960
Реакции
3 589
Ответ: Доступ к контекстному меню в локализованных версиях

Не уточните, для чего именно?))
app.translateKeyString есть в CS3. Доступ к контекстным меню тоже там есть, я в CS3 использовал $ID/RtMouseLayout, $ID/RtMouseText и $ID/RtMouseTable. В английской локализации. С проблемой доступа в русской столкнулся в CS5-CS6 (до этого не было надобности). app.translateKeyString не помог, как я его ни ворочал. Пришлось выкручиваться как в приведенных здесь примерах. Поэтому я и спросил: а у Вас получилось? Хочу наконец увидеть вменяемое решение, проверенное на практике (это обязательное условие), если оно есть.
 
Статус
Закрыто для дальнейших ответов.