Не могу найти готового примера и знаний не хватает....

Для примера дополнение 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.

hydrolizer пишет

Взят неудачный пример - в нем вообще нет поддержки локализации.

Взят неудачный ответ ;)

Интересует как раз локализация дополнения в котором "вообще нет поддержки локализации".. Документ по ссылке читал ранее, но не смог разобраться и написал сюда..

Dadom
Вот и сделайте эту поддержку локализации так, как принято это делать. Задавать текст интерфейса непосредственно в коде или разметке - это очень плохой стиль.

hydrolizer пишет

Вот и сделайте эту поддержку

Спрашиваю потому, что не могу САМ сделать...
Хорошо, перефразирую вопрос.. Как сделать поддержку локализации в дополнении в котором изначально она не предусмотрена?

В тексте по ссылке мож и есть ответ, но не владея JS повторить не получается...

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    chrome_package_name locale_id chrome/locale/locale_id/

где 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

Выделить код

Код:

+ 'LMB: Capture Area to Printer.\n'

... с помощью

Выделить код

Код:

let stringBundle = Services.strings.createBundle("chrome://chrome_package_name/locale/имя_файла.properties");
var myStr = stringBundle.GetStringFromName("имя_строки");

превратить в

Выделить код

Код:

+ 'ЛКМ: Захватить область и распечатать.\n'

До 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 пишет

До 4 пункта-то понятно, а потом..... нужно уметь писать на JS.... )

Чего ж тут уметь?
В .properties-файле:

Выделить код

Код:

some.message=Какое-то сообщение

в коде:

Выделить код

Код:

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

результат:

sbsample-msg.png

hydrolizer пишет

Чего ж тут уметь?

Так на пианино тоже просто играть! Просто нажимай нужные клавиши в нужное время... (с)

Не работает... (

В chrome.manifest строка

Выделить код

Код:

# Shared Resources
locale captureandprint ru    chrome/locale/ru/

В chrome\locale\ru\captureandprint.properties

Выделить код

Код:

LMB=ЛКМ: Захват фрагмента на принтер

В начале файла JS

Выделить код

Код:

let stringBundle = Services.strings.createBundle("chrome://captureandprint/locale/captureandprint.properties");

Позже в файле этом же файле вместо

Выделить код

Код:

tooltiptext:addon.name+'\n'
                + 'LMB: Capture Area to Printer.\n'

вписал

Выделить код

Код:

tooltiptext:addon.name+'\n'
                + stringBundle.GetStringFromName("LMB") + '\n'

В итоге, дополнение устанавливается, виднО в списке установленных дополнений, но нет нужной кнопки панели инструментов в списке доступных....