Страницы: 1
Не могу найти готового примера и знаний не хватает....
Для примера дополнение Capture & Print https://addons.mozilla.org/ru/firefox/a … ure-print/
Все текстовые строки там в файле JS.... Причем там же строки типа
"Services.prompt.alert(window,addon.name,'Area is now available on the clipboard.');"
т.е. если даже в install.rdf поменять имя на русское (ну надо), то тоже все ломается, видимо из-за этого "addon.name"
Или еще такой вот кусок:
gNavToolbox.palette.appendChild(e('toolbarbutton',{ id:m,label:addon.name,class:'toolbarbutton-1', tooltiptext:addon.name+'\n' + 'LMB: Capture Area to Printer.\n' + 'MMB: Capture Whole Page to Clipboard.\n' + 'RMB: Capture Visible Area to Clipboard.',
Мозгов не хвататет, как это локализовать.... Разумеется, простой перевод строк и сохранение в UTF-8 не помогает как в других расширениях... (
Отсутствует
Взят неудачный пример - в нем вообще нет поддержки локализации. Сейчас джетпаки уже могут работать со стандартным механизмом локализации через string bundles. Теорию можете посмотреть здесь, в качестве практического примера можно взять ABP.
Отсутствует
Взят неудачный пример - в нем вообще нет поддержки локализации.
Взят неудачный ответ
Интересует как раз локализация дополнения в котором "вообще нет поддержки локализации".. Документ по ссылке читал ранее, но не смог разобраться и написал сюда..
Отсутствует
Dadom
Вот и сделайте эту поддержку локализации так, как принято это делать. Задавать текст интерфейса непосредственно в коде или разметке - это очень плохой стиль.
Отсутствует
Вот и сделайте эту поддержку
Спрашиваю потому, что не могу САМ сделать...
Хорошо, перефразирую вопрос.. Как сделать поддержку локализации в дополнении в котором изначально она не предусмотрена?
В тексте по ссылке мож и есть ответ, но не владея JS повторить не получается...
Отредактировано Dadom (08-07-2013 15:33:44)
Отсутствует
Dadom
1. Добавить в расширение папку chrome/locale/{locale_id}, где locale_id - буквенный идентификатор нужной локали (например, для русского языка это ru, для английского - en-US, и т.д.).
2. В папке {locale_id} создать файл имя_файла.properties (для использования в JS). Про содержимое файла см. здесь. Сохранить файл в кодировке UTF-8 без BOM (это важно).
3. Зарегистрировать chrome package с указанием на локализованные ресурсы: добавить в расширение файл chrome.manifest, файл должен содержать строку
где locale_id - идентификатор локали (см.выше), chrome_package_name - имя chrome package расширения (произвольное удобочитаемое).
4. Из кода обращаться к строкам посредством интерфейса nsIStringBundle:
let stringBundle = Services.strings.createBundle("chrome://chrome_package_name/locale/имя_файла.properties"); var myStr = stringBundle.GetStringFromName("имя_строки");
Ввиду бага 719376 у джетпаков следует делать как-то так:
let stringBundle = Services.strings.createBundle("chrome://adblockplus/locale/global.properties?" + Math.random()); Utils.getString = function(name) { return stringBundle.GetStringFromName(name); } return Utils.getString(name);
(взято из кода ABP).
Отсутствует
Ниасилил.... (
Все-равно не понятно как из текста JS
... с помощью
let stringBundle = Services.strings.createBundle("chrome://chrome_package_name/locale/имя_файла.properties"); var myStr = stringBundle.GetStringFromName("имя_строки");
превратить в
До 4 пункта-то понятно, а потом..... нужно уметь писать на JS.... )
Что такое ABP? Дополнение AdBlock Plus? Если да, то там виден уже готовый результат, а как было бы первоначально-то нету.. ( И это неудачное дополнение для примера т.к. там дохрена файлов и глаза разбегаются, в моем примере единственный файлик JS... (
И если не знать синтаксиса JS, но не понятно даже как обработать
addon.name+'\n' + 'LMB: Capture Area to Printer.\n' + 'MMB: Capture Whole Page to Clipboard.\n' + 'RMB: Capture Visible Area to Clipboard.',
Сколько тут переменных корячить? Чувствую себя уродом.. )
Отредактировано Dadom (08-07-2013 18:25:44)
Отсутствует
До 4 пункта-то понятно, а потом..... нужно уметь писать на JS.... )
Чего ж тут уметь?
В .properties-файле:
в коде:
let stringBundle = Services.strings.createBundle("chrome://my_extension/locale/my_extension.properties"); .... var myStr = stringBundle.GetStringFromName("some.message"); Services.prompt.alert(null, "my extension", myStr);
результат:
Отсутствует
Чего ж тут уметь?
Так на пианино тоже просто играть! Просто нажимай нужные клавиши в нужное время... (с)
Не работает... (
В chrome.manifest строка
В chrome\locale\ru\captureandprint.properties
В начале файла JS
let stringBundle = Services.strings.createBundle("chrome://captureandprint/locale/captureandprint.properties");
Позже в файле этом же файле вместо
вписал
В итоге, дополнение устанавливается, виднО в списке установленных дополнений, но нет нужной кнопки панели инструментов в списке доступных....
Отредактировано Dadom (09-07-2013 15:24:45)
Отсутствует
Страницы: 1