Copy link to clipboard
Copied
Friends and experts,
On my English Win7-x64 with FrameMaker 14.0.2.425 (en) I have this very simple script, which I also tested on the machine of my wife (Win7-x32, German) with the German version of FM 14.0.2.425:
/* ETBtest.jsx
To be placed in Startup folder of user area */
#target framemakeralert ("Testing $.locale= " + $.locale);
var gsETBtest_title = { en: "Testing a jsx script in %apdata%\...\FrameMaker\vv\Startup [ETB]",
de: "Test eines jsx scripts in %apdata%\...\FrameMaker\vv\Startup[ETB]"
};
var gsETBtest_msg = { en: "Befor You test your own script, rename this script to ETBtest-ori.jsx"
+ "\n• Name Your script ETBtest.jsx"
+ "\n• You can now invoke it from the ETB tool-bar Extra (last icon)."
+ "\n\nAfter your tests please rename ETBtest-ori.jsx back to ETBtest.jsx",
de: "Vor dem test Ihres scripts bitte dieses script auf ETBtest-ori.jsx umbenennen"
+ "\n• Benennen Sie ihr script ETBtest.jsx"
+ "\n• Nun kann ihr script von der ETB tool-bar Extra (letztes icon) aufgerufen werden."
+ "\n\nNach den tests bitte ETBtest-ori.jsx zurück benennen auf ETBtest.jsx"
};
var gsETBtest_NoDoc = { en: "No book or document active",
de: "Kein buch oder dokument aktiv"
};SetUpMenu(); // out-comment for debugging
function SetUpMenu() { // =========================================================================
// This function MUST NOT be named DefineMenu - because this is a reserved function!
// Errors in ESTK: Menu position can not be changed - see bug report FRMAKER-2752
// No menu is defined here - it is set up in customui.cfg / menus.cfg
var cmdDoc = DefineCommand (1, "ETBtest", "Test a script [ETB]", "");
UpdateMenus();
} // --- end SetUpMenufunction Command(cmd) { // ========================================================================
switch(cmd) { // Respond to menu command.
case 1:
WhatIsToDo();
break;
}
} // --- end Commandfunction WhatIsToDo () { // === This is what the test script will do ===============================
alert (localize(gsETBtest_msg), localize(gsETBtest_title));
return;
}
On my English system/FM the alert reports
Script Alert
Testing $.locale= 2
and the invoked script (by button) reports the en message from the gsETBtest_msg object.
On the German system/FM the alert reports
Script Fehler
Testing $.locale= 3
and the invoked script (by button) reports the en message from the gsETBtest_msg object.
I get the German 'reaction' of the script only if I insert on the top of the script - which of course is not very useful for a bi-lingual script:
$.locale = "de";
What goes wrong here?
The method is described in JavaScript Tools Guide of CS5.
By the way: changing the order of the string declarations (have de first, en second) has no effect on both systems.
The solution with the automatic localisation is not bullet proof:
My system is in English (Windows, FM and all apps which provide this UI language). The input language (keyboard) is de-CH) which will trigger German in the scrips. Hence I need a longer way - a function to switch the UI language:
...function SwitchLanguage () {; // === Switch language according to application language ============
switch (app.Language) {
case Constants.FV_LANG_BRITISH:
case Constants.FV_LANG_ENGLISH: {
$.l
Copy link to clipboard
Copied
Well, most likely the cause is the missing ESTK tool kit - which is not contained in TCS7. Hence I could not install it on the German system.
Since only used for a test period I will install it from TCS6 and look further.
Copy link to clipboard
Copied
The installation of ESTK 3.5 (which is free and not a cloud stuff) did only help in one point: in FM File > Scripts > New Script opens ESTK.
However, the script still does not automatically adapt to the language of the application FM. So I introduce the script with this:
$.locale = app.Language; // 2: en; 3: de, 4: fr
if ($.locale = 3) {
$.locale= "de";
}
or with forcing the automatic localisation by
$.localize = true;
The necessity of this is - however - not clear from the documentation (JavaScript Tools Guide of CS5) which states on page 104:
The localize function always performs its translation, regardless of the setting of the $.localize
variable. For example:
//Only works if the $.localize=true
b1 = w.add ("button", undefined, btnText);
//Always works, regardless of $.localize value
b1 = w.add ("button", undefined, localize (btnText));
This "Regardless of the setting of the $.localize variable" is simply wrong.
Klaus
Copy link to clipboard
Copied
The solution with the automatic localisation is not bullet proof:
My system is in English (Windows, FM and all apps which provide this UI language). The input language (keyboard) is de-CH) which will trigger German in the scrips. Hence I need a longer way - a function to switch the UI language:
function SwitchLanguage () {; // === Switch language according to application language ============
switch (app.Language) {
case Constants.FV_LANG_BRITISH:
case Constants.FV_LANG_ENGLISH: {
$.locale = "en"; break;
}
case Constants.FV_LANG_CANADIAN_FRENCH:
case Constants.FV_LANG_FRENCH: {
$.locale = "fr"; break;
}
case Constants.FV_LANG_GERMAN:
case Constants.FV_LANG_NEW_GERMAN:
case Constants.FV_LANG_NEW_SWISS_GERMAN:
case Constants.FV_LANG_SWISS_GERMAN: {
$.locale = "de"; break;
}
default: {
$.locale = "en"; break;
}
}
} // --- end SwitchLanguage