Полезная информация

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.
 

Как сделать расширение с многоязыковой поддержкой (вручную)

Наверняка многие из вас, кто переводил расширения, сталкивались с тем, что в JAR-файле не оказывалось папки locale, только content с «оврлеями», в которых находились нужные для перевода строки. Попытки задействовать Mozilla Translator заканчивались «молчанием» программы. Изменения же в самом «оверлее» приводили к тому, что расширение поддерживало только один язык. Как же добавить в расширение многоязыковую поддержку? Разберем это на примере простого расширения ReGet Plugin.

Структура XPI-архива и необходимые для работы файлы

  • chrome
    • reget.jar
  • components
    • NetscapeDll.dll
    • nslRgCommon.xpt
    • nslRgUrl.xpt
    • nslRgUrlList.xpt
  • install.rdf
  • install.js

Для работы нам понадобятся только reget.jar и install.rdf.

Файл reget.jar

Открываем его с помощью любого zip- или rar-архиватора, например WinRAR, и достаем из папки content overlay-файл, в нашем случае это rgt-ovr.xul.

Overlay-файл

Открываем и находим строки:

<menuitem id="download-all-by-catcher" label="Download all with ReGet" oncommand="DownloadAll();" insertafter="context-savelink"/>
<menuitem id="download-by-catcher" label="Download with ReGet" oncommand="DownloadBy();" insertafter="context-savelink"/>

Основной интерес для нас представялет значение label. Именно в нем указывается то, что потом будет отображено в пунктах меню, настройках расширения и т. д.

В первом случае меняем «Download all with ReGet» на «&reget.downloadAll;», во втором — «Download with ReGet» на «&reget.download;». В принципе не играет никакой роли что вы напишите в этом самом label, главное, чтобы это было по-английски (по-латински) и начиналось с «&», а заканчивалось «;».

Сохраняемся.

DTD-файл

Создаем новый текстовый документ и пишем в нем следующее:

<!ENTITY reget.download "Download with ReGet">
<!ENTITY reget.downloadAll "Download all with ReGet">

Здесь вы указываете расширению, что подставлять (пункты меню, заголовки окон, настройки…) вместо значения label. Сохраняем и переименовываем в reget.dtd (название также может быть разным, главное чтоб использовались английские буквы).

Обратите внимание: файлы, содержащие в теле русские буквы (названия), например «Загрузить с помощью ReGet», должны сохраняться в кодировке UTF-8.

Overlay-файл

Снова открываем rgt-ovr.xul и к существующему коду дописываем строку, «говорящую» о том, что для подстановки значения label необходимо использовать информацию из DTD-файла. В нашем случае это:

<!DOCTYPE windows SYSTEM “chrome:reget/locale/reget.dtd”>

Это строка должна находиться над// <overlay id="…>.

Создание папок

Создаем на своем жестком диске папку locale, а в ней en-US. Для ReGet Plugin в en-US дополнительно создается папка reget. Но этого можно не делать, так как все пути все равно будут указываться вручную в install.rdf, но об этом позже.

Для чистоты эксперимента сохраним наше «дерево» каталогов:

  • locale
    • en-US
      • reget

Помещаем наш DTD-файл в папку reget. Но этого мало. Необходим файл, указывающий на локаль — contents.rdf.

В очередной раз создаем текстовый документ с нужным содержанием:

<?xml version="1.0"?>
  
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:chrome="http://www.mozilla.org/rdf/chrome#">
           
  <RDF:Seq about="urn:mozilla:locale:root">
    <RDF:li resource="urn:mozilla:locale:en-US"/>
  </RDF:Seq>
    
  <RDF:Description about="urn:mozilla:locale:en-US">
    <chrome:packages>
      <RDF:Seq about="urn:mozilla:locale:en-US:packages">
        <RDF:li resource="urn:mozilla:locale:en-US:reget"/>
      </RDF:Seq>
    </chrome:packages>
  </RDF:Description>
</RDF:RDF>

Заметьте, в одной из строк после en-US написано слово «reget» — это имя вашего JAR-файла. Будте внимательны при переводе своего расширения. Сохраняем, переименовываем в contents.rdf и кладем в папку reget.

Упаковка

Открываем XPI-архив, в нем reget.jar и добавляем в него новую папку locale. Это можно сделать, просто перетащив ее из окна Explorer в окно вашего архиватора, например WinRAR. Теперь открываем папку content и заменяем в ней файл rgv-ovr.xul выше описанным способом.

Файл install.rdf

Здесь все предельно просто. Нужно всего лишь дописать строку, указывающую на поддержку языка, а именно:

<?xml version="1.0"?>
  
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
  
  <Description about="urn:mozilla:install-manifest">
    
    <!-- Required fields //-->
    <em:name>ReGet Plugin</em:name>
    <em:id>{10d55b54-0309-468c-8b95-c8e2ecb52dd2}</em:id>
    <em:version>1.05</em:version>
  
    <em:targetApplication>
      <Description>
        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
        <em:minVersion>0.8</em:minVersion>
        <em:maxVersion>1.5</em:maxVersion>
      </Description>
    </em:targetApplication>
  
    <em:file>
      <Description about="urn:mozilla:extension:file:reget.jar">
        <em:package>content/reget/</em:package>
        <em:locale>locale/en-US/reget/</em:locale>
      </Description>
    </em:file>
      
    <!-- Optional fields //-->
    <em:description>Enables use of the ReGet Download Manager in Mozilla.</em:description>
    <em:creator>Marek Wawoczny (GmbH@MozillaPL.org)</em:creator>
    <em:contributor>Georgi Avramov (flexer@cutephp.com)</em:contributor>
    <em:homepageURL>http://www.mozillapl.org/</em:homepageURL>
      
  </Description>      
</RDF>

Строка с локалью пишется под строкой с контентом. Кстати, этот как раз то самое место, где вы указываете путь к расположению overlay- и DTD-файлов, о которых говорилось ранее. Путь к локали должен заключаться между <em:locale>…</em:locale>.

Всё. Теперь наше расширение поддерживает разные языки, точнее теперь у вас есть возможностью добавлять свои локали по уже отработанному механизму, в том числе с помощью Mozilla Translator.

ReGet Plugin с многоязыковой поддержкой

 
  extensions/make_multilang_extension.manual.txt · Последние изменения: 2006/12/30 13:36
 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2011 Mozilla Russia
Язык отображения форума: [Русский] [English]