Як інтернаціоналізувати ваш Eclipse Plug-In

Авторы - Dan Kehn, Scott Fairbrother да Cam-Thu Le

Дана стаття являє собою дорожню карту для запису Затемнення плагінів, призначених для міжнародного ринку. Почнемо з короткого огляду мотиви і технічні проблеми інтернаціоналізації, а потім крок за кроком інструкції про те, як інтернаціоналізації Затемнення плагін.

Dan Kehn, Scott Fairbrother да Cam-Thu Le
IBM Eclipse ISV забезпеченням (Jumpstart) Командні

23 серпня 2002

Примітка редактора: Ця стаття відображає Затемнення версії 2.0.

Введення

Старий анекдот в інтернаціоналізації спільноти виглядає наступним чином:

"Людина, яка говорить на трьох мовах називають трьома мовами. І людина, яка говорить на двох мовах називається двомовним. Так що ви називаєте тих, хто говорить тільки на одній мові?"

<вставить драматичні паузи тут>

"Американські".

Сьогодні, забезпечуючи програмний продукт лише англійською мовою більше не є прийнятним з юзабіліті, якість, маркетинг, а в деяких випадках, юридичної точки зору. Включення Вашого продукту на світовий ринок просто має економічний сенс. А забезпеченням процесу є відносно простим, тому що ця стаття покаже.

Кілька зауважень, перш ніж ми почнемо. Оскільки платформи Eclipse приймає інтернаціоналізації реалізація забезпечується Java SDK, це корисно прочитати підручник Java: Інтернаціоналізація [1] слід, перш ніж продовжити. Підручник являє собою прекрасний огляд питань і кроків у цьому процесі. Будемо вважати, що ви вже читали підручник таким чином ми можемо підкреслити ключові моменти, поверхня інших примітних предметів, і кришка Eclipse, і конкретні питання, описані в цій статті. І коли ви зіштовхнетеся з незнайомою термінології та скорочень в цій статті, перехід на наш глосарій.

Огляд інтернаціоналізації

Інтернаціоналізація являє собою процес створення програмного забезпечення для світового ринку. Крім економічної вигоди, деякі країни вимагають продукти проходять певні вимоги локалізації, встановлені урядом, перш ніж вона може бути введена на свої ринки.

Процес internationalition, як правило, здійснюється в два етапи:

  1. NLS-дозволяє продукту.
    Цей крок включає методи кодування і користувачеві питання дизайну інтерфейсу. Включення продуктів для підтримки національних мов (NLS) забезпечує продукт призначений для національних функція мови і використовує належні інтерфейси для обробки даних національних мов. На цьому етапі кодування смарт - такі, як уникнути жорстко рядки, що робить вхідний буфер досить великий, щоб тримати перекладається текст, правильно розбір рядки, які містять не-латинські символи, а не локалізація рядків збережені як частина формат файлу, і виділення національних Мова елементи програмного коду - повинні бути зважені і вважається так що переклад може бути завершена з мінімальними витратами і зусиллями.
  2. Переклад продукту.
    Цей крок включає в себе переклад внутрішніх елементів мови на іноземну мову. Як і в слова і фрази, картинки і символи можуть бути витлумачені по-різному в різних культурах. Саме на етапі перевірки перекладу, всі переклади відгуки контекстної точність, іконки або картинки були змінені, щоб переконатися у відсутності користувача непорозуміння, і макети сторінок перевіряються на випадкове обрізання тексту. При перевірці функціональної цілісності продукту після перекладу, цей крок також шукає приховані культурні наслідки.

Що впливає на інтернаціоналізацію?

Monoglots взяти до відома : Це початок вашої чутливості навчання. Там можуть бути вікторини в кінці цієї статті. :-)

Давайте почнемо з перегонкою в список культурно-залежні дані, представлені в керівництві Java інтернаціоналізації, замовлена ??на ймовірність того, що типовий розробник зустрінете його, і потім відомості про кожну з них:

  1. Текстові
    повідомлення, написи на елементи графічного інтерфейсу
    допомогою Інтернет (*. HTML), Plug-маніфест (plugin.xml)
  2. Дані форматування
    чисел, дат, часу, валюти
    номери телефонів, поштові адреси
  3. Регіональні та особисті заміни
    вимірювання
    ввічливості та особисті назви
  4. Мультимедіа міркувань

Текст

Повідомлення, етикетки на компоненти графічного інтерфейсу
пучки ресурсів добре обробляти залежить від мови тексту. Стратегія або завантажити всі рядки відразу в ResourceBundle [2] підклас, або отримати їх окремо. Eclipse Java Інструменти розвитку (JDT) у версії 2.0 є майстри, які підтримують виявлення переказуються рядка. Ми повернемося до них найближчим часом Інтернаціоналізація кроки.

Завантаження перекладених рядків у пам'яті тільки перший крок. Наступним кроком буде передавати їх у відповідні елементи керування для відображення (наприклад, позначку, текстове поле, вибір з меню і т. д.). Дизайнер і програміст сторінки повинні працювати разом, щоб переконатися, що обрана схема дозволяє відповідного розміру і оплавленні частині діалогового вікна. Схема підтримки Standard Widget Toolkit (SWT) бібліотеки в чому залежить від програміста, щоб "робити правильні речі", вказавши розташування опису, адекватно реагувати на зміни в розміри полів. У статті Макет взаєморозуміння в SWT [3] охоплює питання реалізації в деталях.

Це особливо важливо, тому що довжина тексту збільшується в процесі перекладу. Англійські фрази, часто коротше, ніж їх еквіваленти перекладу, як правило, близько 40%. Розмір шрифту також, можливо, буде потрібно внести зміни, щоб пристосувати їх рідною мовою.

Інтерактивна довідка (*. HTML), Plug-маніфест (plugin.xml)
Ці форми текстовий зміст більш складним, ніж простий ключ /значення, орієнтованих властивостей файлів, тому заходи по їх екстерналізації трохи складніше.

У разі файлу маніфесту, він разом з таким же ім'ям файлу властивостей, plugin.properties, що містять тільки текст зовні. Особливу увагу повинні бути прийняті з явним файли, такі як plugin.xml і fragment.xml, так як атрибути тегів може містити як перекладено та перекладеним текстом. Розглянемо доброякісних прикладі нижче:

Лістинг 1. Плагін файлу маніфесту, перед переведенням

   <plugin
     name="Jumpstart Example Plug-in"
     id="com.ibm.jumpstart.example"
     version="2.0.0"
     provider-name="IBM Corporation"
     class="com.ibm.jumpstart.example.ExamplePlugin"> 

Тут ми бачимо поєднання перекладається текст, неперекладні тексти, і "сірій зоні" перекладається текст, все як атрибутів тега. Очевидно, що ідентифікатор і клас атрибутів не перекладається, тому що вони представляють програмування ідентифікаторів. Це в рівній мірі впевнені, що ім'я атрибута повинно бути переведено.

Можна було б спробувати розглянути варіант атрибутів (через мови залежить від десяткового роздільника) або постачальника ім'я атрибута (через мови залежить від правового атрибуції "Корпорація") в якості кандидатів на переклад, так як вони будуть відображатися до кінця користувач. Тим не менш, номера версії, як правило, залишилося не переведеним з двох причин: кінцевим користувачам приписувати мало сенсу їх числове значення, і програмісти іноді писати код, який очікує, що номер версії буде складатися рядки, як "3.5.4". Це, можливо, кращий дизайн рішення про те, що інформація про версію зберігаються як окремі номери, як великих, малих і сервіс оновлення, щоб уникнути необхідності розібрати рядок версії, але це обговорення виходить за рамки цієї статті.

Постачальника ім'я може бути залишено без перекладу, а також, так як "Корпорація" має юридичного значення, які можуть кинути виклик точний переклад. Після визначення того, що текст повинен бути зовні, наш приклад буде виглядати наступним чином:

Лістинг 2. Плагін файлу маніфесту, після перекладу

  <plugin
    name="%plugin.name"
    id="com.ibm.jumpstart.example"
    version="2.0.0"
    provider-name="IBM Corporation"
    class="com.ibm.jumpstart.example.ExamplePlugin"> 

де plugin.properties містить зовні рядок "Jumpstart Приклад плагина", пов'язаних з ключовими plugin.name.

Цей простий приклад показує, що переклад не просто надання еквівалент слова чи фрази в тексті, воно також включає в себе розуміння місцевих культурних особливостей і можливих правових наслідків. Саме тому професійний переклад є необхідним, а також тестування переклад перевірки.

Форматування даних

Числа, дати, часу, валюти
бібліотека Java містить класи, які обробляють необхідні для форматування числа (десяткового роздільника, роздільник тисяч, угруповання), дати (МДГ, DMY, перший день робочого тижня), час (12 - або 24-годинний Формат, сепаратор) і валюти (місцевий символ, показаний як суфікс або префікс, провідні роздільник чи ні).

Телефонні номери, поштові адреси
Вони більш тонкі і менш загальні проблеми перекладу тексту, але все ж заслуговує на увагу. Багато додатків просто дозволити вільний формат вводу телефонних номерів, так як є дуже багато місцевих варіантів. Поштові адреси, прості: додавання "Область /Край" на місцях і дозволяє кілька рядків адресу, як правило, достатньо.

Регіональні та особисті заміни

Ввічливості та особисті назви
хоча рідше, в Сполучених Штатах, належним забезпеченням з ввічливості (г, г-жа д-р) вважається абсолютно необхідним в іншому місці, щоб уникнути серйозного порушення етикету.

Вимірювання
Вони рідше зустрічаються. Це передбачає заміщення вимірювання вказівки відповідним перетворення (наприклад, милі в порівнянні кілометрів). У багатьох випадках користувачі повинні будуть або одночасне відображення заходи в різних одиницях, або легкий спосіб перемикання між ними.

Мультимедіа міркувань

В цілому, продукти повинні вибрати нейтральний регіональному звуки, кольори, графіки та ікон.

Це означає, що не Гомера Сімпсона "D'Oh!" звук пов'язаний з повідомленнями про помилки. Якщо ви думаєте, що ніякого серйозного розвитку організації буде робити такі речі, розглянути значок, який є типовим з тих, що пропонуються і відкинув:

Розробники хотіли передати метафору "IP-маршрутизатор" за допомогою символів harkening до національних шосе, перетнув Сполучені Штати з Чикаго в Лос-Анджелесі, називається Route 66 [4]. Більшість американців знайшли б цю метафору тупий, уявіть, змішання нещасний неамериканських користувачів.

Крім того, на малюнку нижче може бути інтуїтивно багато північноамериканські учасники:

Але у визнанні дослідження, інші за межами Сполучених Штатів вже здогадалися, що це шпаківня. Це тим більш загальноприйнятого зображення для пошти:

Щоб уникнути плутанини та потенційно образливим візуальні ефекти, кращий курс є залучення професійних графічних художників, які знають про культурні питань.

Інтернаціоналізація кроки

Тепер давайте звернемося до реальні кроки для інтернаціоналізації вашого Eclipse, плагін:

Ми розглянемо кожен з цих кроків більш докладно.

Крок 1. Переміщення переказуються рядки в *. Властивості файлів

На щастя, Java Development Eclipse, Інструмент надає значну допомогу правильно відокремити переказуються рядка. Джерело> Пошук рядків у втілювати вибір меню відображається Externalize Струни майстра. Цей майстер проведе вас через всі кроки, щоб знайти жорстко рядків в коді, класифікувати їх як перекладні чи ні, потім змінити код, щоб використовувати набір ресурсів, де це необхідно.

Ми введемо Externalize Strings майстри з, наприклад, канонічної "Hello World" , перш ніж з допомогою майстра:

Лістинг 3. Привіт світ, перед переведенням

  package com.jumpstart.nls.example.helloworld;
  public class HelloWorld {
     static public void main(String[] args) {
       System.out.println("Copyright (c) IBM Corp. 2002.");
       System.out.println("Hello.");
       System.out.println("How are you?");
       System.out.println("Goodbye.");
   }
}

Вибір HelloWorld.java а потім Source> Externalize рядка відображатиметься майстра показано на малюнку 1:

Рисунок 1. Екстерналізації рядків майстра

При виборі записи з таблиці, а потім одну з кнопок праворуч, ви можете помітити рядки як належать до однієї з трьох випадків:

  • Перекладати Перевести
    дії: запис буде додана у властивостях файлів; автоматично згенерованого ключа і коду доступу замінюється на код вихідну рядок. Рядок використовується для вказівки ключових позначений як неперекладні з коментарем маркерів, таких як " //$ NON-NLS-1 $ "
  • Ніколи не перекладати Ніколи не перекладати
    дій: рядок позначається як неперекладні з коментарем маркером. Externalize Strings майстри не відзначити його як переведені в наступні страти.
  • Пропускати Пропустити
    дій: Нічого не змінити. Після страти Externalize Strings майстер відзначить рядок, як потенційно перекладається.

Задній номер //$ NON-NLS-1 $ коментар маркер вказує, які рядки не повинні бути переведені у випадку, якщо будуть їсти кілька рядків в один рядок. Наприклад: x.foo("Date", "TOD", "Time"); // $NON-NLS-2$

Тут середній параметр позначений як не NLS. Дві інші пропускаються.

Повертаючись до нашого прикладу, відзначимо, що загальна кількість рядків для кожної категорії наводиться нижче в списку. Ключовим імена зовні рядків формуються автоматично на основі значення рядка, але вони можуть бути перейменовані безпосередньо в таблиці. Крім того, додатковий префікс може бути зазначено ( S_ в приклад нижче).

Рисунок 2. Екстерналізації рядків майстра

 

Підказка : При натисканні на піктограму в першому стовпці цього рядка буде перейти до наступного вибору: Перекладач, Ніколи не перекладати, або пропустити.

Тепер, коли ми визначили, що переказуються рядки, перейдіть до наступного кроку, щоб вибрати, як вони будуть зовні. Ось сторінка відображається після вибору Далі, ім'я файлу нерухомості і пакет ресурсів доступу Ім'я класу були змінені на більш конкретні значення, ніж за замовчунням:

Рисунок 3. Екстерналізації рядків майстра

 

Доступу пакета ресурсів клас буде містити код для завантаження файлу властивостей і статичний метод для вилучення рядків із файлу. Майстер створення цього класу, або ви можете задати свій власний існуючої реалізації альтернативи. В останньому випадку, ви можете зняти заміщення використання за замовчуванням, вибір і вказати альтернативний зразок коду для отримання зовні рядків. Якщо доступу клас знаходиться за межами пакета (наприклад, централізований набір ресурсів доступу класу), можна додатково вказати, що ви хочете додати [] імпортної декларації в базовий джерело.

Externalize Strings майстер використовує JDT рамках рефакторинга, так наступних двох сторінках повинна бути вам знайома. По-перше, список попереджень:

Рисунок 4. Екстерналізації рядків майстра

Екстерналізації рядків майстра

 

І, нарешті, пліч-о-пліч презентації пропонованих змін:

Рисунок 5. Екстерналізації рядків майстра

 

Після того як ви оберете Готово, майстер виконує модифікації вихідного коду, створює доступу пакета ресурсів класу, і формує вихідний файл властивостей. Ось код для стандартного класу пучка доступу ресурсу:

Лістинг 4. Стандартний набір ресурсів доступу класу

  package com.jumpstart.nls.example.helloworld;
  import java.util.MissingResourceException;
  import java.util.ResourceBundle;

  public class HelloWorldMessages {

  private static final String BUNDLE_NAME =
     "com.jumpstart.nls.example.helloworld.HelloWorld"; //$NON-NLS-1$

  private static final ResourceBundle RESOURCE_BUNDLE =
     ResourceBundle.getBundle(BUNDLE_NAME);

  private HelloWorldMessages() {}

  public static String getString(String key) {
     try {
         return RESOURCE_BUNDLE.getString(key);
     } catch (MissingResourceException e) {
         return "!" + key + "!";
     }
   }
  }

Єдина зміна в цьому згенерований код є значення, присвоєне статичний фінал, BUNDLE_NAME. Перш ніж перейти до наступного кроку, нижче наведені деякі керівні принципи відзначити внесок Еріх Гамма і Томас Мадер з JDT команди.

Керівництво з управління пакетами ресурсів і властивостей файлів

Ці керівні принципи призначені для:

  • Скорочення числа NLS помилок, іншими словами, значення зовні рядки, які не зустрічаються під час виконання
  • Включити перехресних посилань між клавішами, на які посилається код і ключі визначені у властивостях файлу
  • Спрощення управління зовні рядків. Використання централізованої властивості файла може привести до частих конфліктів зміни. Крім того, потрібне використання префіксів, щоб зробити унікальні ключі і ускладнює управління ключами.

Для досягнення цих цілей, ми пропонуємо наступні рекомендації:

  1. Використовуйте властивості файла в пакеті, і кваліфікувати ключі на ім'я класу

    Наприклад, всі рядки для пошуку компонентів JDT в SearchMessages.properties з пар ключ /значення, як:

    SearchPage.expression.pattern=(? = any character, * = any string) ShowTypeHierarchyAction.selectionDialog.title=Show in Type Hierarchy

  2. Використовуйте виділений статичний набір ресурсів доступу класу

    Нехай Externalize Струни майстра створення цього класу. Він повинен бути названий як властивості файла. Таким чином, у нашому прикладі це буде називатися SearchMessages. Коли вам потрібно для створення форматованих рядків, додати зручність методу доступу класу розшарування. Наприклад:

    Лістинг 5. Статичні пакета ресурсів доступу класу

         public static String getFormattedString(String key, Object arg) { 
             String format= null; 
             try { 
                 format= RESOURCE_BUNDLE.getString(key); 
             } catch (MissingResourceException e) { 
                 return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ 
             } 
             if (arg == null) 
                 arg= ""; //$NON-NLS-1$ 
             return MessageFormat.format(format, new Object[] { arg }); 
         }
         public static String getFormattedString (String key, String[] args) { 
             return MessageFormat.format(RESOURCE_BUNDLE.getString(key), args); 
         }
    
  3. Не використовуйте клавіші комп'ютерної

    Існує простий спосіб зв'язати комп'ютерну введіть код з ключем у властивостях файлу. Зокрема, практично неможливо визначити, чи є ключ більше не використовується.

  4. Конвенції про ключові звуть <classname>. <qualifier>

    Приклад: PackageExplorerPart.title

Крок 2. Окремі презентації залежить від параметрів

Не всі зовні текст просто слова і фрази, які будуть переведені на мову перекладу. Деякі з них більш конкретно, пов'язані із здійсненням вашого плагіна. Приклади включають в себе властивості, настройки і настройки за замовчуванням діалог.

Ось кілька конкретних прикладів, які могли б знайти свій шлях у властивостях файлу:

  • Розмір і розташування обмежень. Наприклад, відповідний ширині, не змінювати розміри стовпців таблиці
  • За замовчуванням шрифти, які залежать від мови системи або операційної системи. Хороший шрифт за замовчуванням для Latin-1 мов є неприпустимим вибором для DBCS мовами.

Для тих плагінів, які підклас від AbstractUIPlugin [5], NL параметрів, пов'язаних також можна знайти в його переваги за замовчуванням [6] магазинів (pref_store.ini) і настройках [7] (dialog_settings.xml). Затемнення Workbench само по собі не використовувати магазинів за замовчуванням переваги, вважаючи за краще зберігати за замовчуванням у властивостях файлів, а потім ініціалізувати їх через AbstractUIPlugin в initializeDefaultPreferences (IPreferenceStore) методом.

Крок 3. Правильно мови з урахуванням форматування даних, заміна API,

Будь ласка, ознайомтеся з детальним покриттям в керівництві по Java: Інтернаціоналізація [8] слід.

Крок 4. Тест на національній мові

Перевірка готовності продукту для перекладу не є тривіальною і виходить за рамки цієї статті. Тим не менш, наступні за статтею Як перевірити вашу інтернаціоналізовані Eclipse Plug-в [9] подарунок стратегії для перевірки NL-чутливі аспекти вашого продукту.

Крок 5. Створити первинний переклад плагіна фрагмент

На даний момент, ми можемо просто скопіювати наш внутрішній мову власність файли однойменних файлів з ??локалі-суфікси (наприклад, MyMessages_xx.properties, де хх це мова), і переходите до кроку 6, підготувати і відправити вітчизняних матеріалів мовою переклад. В цьому випадку, продукт поставляється зі своїм кодом і все, що він підтримує мови як єдине установки.

Проте такий підхід має кілька недоліків. По-перше, код і свої національні ресурси мови переплітаються в тому ж каталозі /JAR файлу. Якщо переклад відстає код поставки, плагін в JAR-файл повинен бути оновлений, незважаючи на те, що вихідний код залишається незмінним. По-друге, файли, відмінні від властивостей файлів по суті не залежить від локалі, тому вони повинні бути виділені в окремі каталоги для кожної мови (наприклад, HTML, XML, зображення).

Щоб вирішити ці проблеми, платформи Eclipse вводить поняття іншим багаторазово використовується компонент, який доповнює плагіни, називається плагін фрагмент. Плагін фрагмент надає додаткові можливості для цільового модуля. Під час виконання цих плагінів у вигляді внесків зливаються разом з усіма залежними фрагментами. Ці матеріали можуть включати в себе код внески та внески ресурси, пов'язані з плагіном, як власність і HTML файли. Іншими словами, плагін має доступ до вмісту фрагмента за допомогою плагіна класів.

Як і чому потрібно використовувати фрагменти надати інформацію перекладається

Плагін фрагмент є ідеальним засобом для поширення Eclipse, переклад інформації в тому числі HTML, XML, INI, і растрові файли. Доставка переказу в ненав'язливим чином, переклади Eclipse Platform упаковані у файли JAR фрагмент і додаються в існуючі установки Eclipse, без зміни або модифікації кожного з оригінальних елементів виконання. Це призводить до поняття мовної пакет.

Платформа Eclipse об'єднує плагін фрагменти таким чином, що час виконання елементів в фрагменті збільшити початковий цільової модуль. Мета плагіна не переміщається, вилучені або змінені в будь-якому випадку. Оскільки ресурси фрагментів розташовані на завантажувача, розробника плагіна не потрібно знати, чи є ресурси завантажуються з плагіна файл JAR або один з його фрагментів файлів "JAR.

Затемнення Language Pack JAR

Мова Java підтримує поняття мовної пакет з установкою пакета ресурсів. Комплекти Java ресурсу не вимагає модифікації коду програми для підтримки іншої мови.. * Властивості файлу імен дозволяє уникнути зіткнення за допомогою наступних іменування: basename_lang_region_variant. Під час виконання ResourceBundle [10] об'єкт знаходить відповідний файл властивостей для даної місцевості.

Підхід до розгортання файлів, таких як HTML і XML-файли в фрагменти трохи відрізняється від Java пакети ресурсів в тому, що фрагмент Eclipse використовує структуру каталогів, щоб розібратися в різних мовних версіях.

Приклад вмісту фрагмента
плагінів і плагінів фрагменти знаходяться в окремих підкаталогах, знайдених безпосередньо під затемнення підкаталозі. Дивлячись на нашому прикладі фрагмент, як розгорнути на німецькій системі, ми бачимо, \ п папку, fragment.xml і nl1.jar файл.

Малюнок 6. Фрагменти підкаталоги

 

Як правило, переклад *. Властивості файлу суфікс відповідно до правил набору ресурсів та розміщені в JAR-файли. Навпаки, коли необхідно в цілях тип вхідного файлу, ім'я якого не залежить від локалі як пакети ресурсів (наприклад, *. XML), ми визначаємо піддиректорії для кожної мовної версії цього файлу. Де підкаталог вище, одним з таких прикладів, де де = німецьку мову.

Фрагмент проявляється
кожен плагін в папці може додатково містити файл фрагмент маніфесту, fragment.xml. Файл маніфесту описує підключається модуль фрагмент, і практично ідентичний маніфест плагіна (plugin.xml), з такими двома винятками:

  • Клас атрибутів пішло з фрагментами немає плагіна в своєму класі. Вони просто йдуть специфікації своєї мети.
  • Є не залежать, тому що фрагменти мають ті ж залежності, їх цільового модуля.

Маніфести, що використовується для опису національної мови фрагмента, як правило, досить прості, вказавши тільки <fragment> і <runtime> /<library> теги. Ось приклад маніфесту фрагмент файлу цілком:

Лістинг 6. Фрагмент файлу маніфесту

<?xml version="1.0" encoding="UTF-8"?>
<fragment
   id="com.jumpstart.nls.example.helloworld.nl1"
   name="NLS Example Plugin NL Support"
   version="1.0.0"
   provider-name="IBM"
   plugin-id="com.jumpstart.nls.example"
   plugin-version="1.0.0">
<runtime>
   <library name="nl1.jar" type="resource"/>
   <library name="$nl$/"/>
</runtime>
</fragment>

<fragment> атрибутів тега є:

  • name - User-відображуваних ім'я з розширенням.
  • ID - ідентифікатор для цього фрагмента конфігурації. Використовується для ідентифікації цього фрагмента інстанції.
  • plugin-ID - посилання на точки розширення мети. Цей плагін фрагмент зливається з цією метою розширення.
  • plugin-version - версія фрагмента плагіна.
  • version - версія специфікації major.minor.service форматі.
  • type - за умовчанням "код". Вказівка ??"ресурс" вказується бібліотека включає в себе файли ресурсів і не код. Це підвищує загальну продуктивність значно, тому що тільки ресурси бібліотек пропускаються при завантаженні коду.

<runtime> розділ містить визначення одного або декількох бібліотек, що входять до складу плагина фрагмент виконання. Посилання бібліотеки використовуються механізми платформи виконання, де плагін навантаження, зливається і виконує правильний код потрібно плагін. Ім'я атрибута приймає ім'я бібліотеки ("nl1.jar" вище) або каталог, що містить ресурси. Каталог посилання повинен містити завершальний роздільник шляху. За бажанням, може включати специфікацію заміни змінних. У наведеному вище прикладі, другий включає в себе бібліотеку заміна змінної $ NL $ на основі мови, використовується вище, щоб додати мову /регіон певну папку на шлях пошуку бібліотек (наприклад, мовної стандарт "it" = Italy, "fr" = France, "de" = Germany і т.д. хотів би додати відповідний плагін в підкаталозі він /, FR / або де / в список пошуку шляхів). Значення п, ос, WS, і арка замін змінних може бути відображено і зміна Window > Preferences > Plug-in Development > Target Environment сторінку. П підстановки змінних використовується в тих випадках, коли це неможливо або недоцільно суфікс файла з назвою мови.

Створення фрагмента
Workbench Eclipse поставляється з інструментом, використовуваним в розробці плагінів: Плагін Development Environment (PDE). PDE містить підтримку для розробки плагінів у вигляді фрагментів.

Давайте тепер розглянемо, як створити фрагмент національної перекладів мову за допомогою PDE. Існує ніяких практичних обмежень на кількість мов, в даному фрагменті. Фрагмент тоді лежить в основі нашого "мовного пакету", який містить одну або кілька перекладів мову. Проте в цьому прикладі ми обмежимося мовної пакет в німецькому перекладі.

Для створення плагінів фрагмент, запустіть майстер створення проекту ( Файл > Новий > Проект... ), виберіть Plug-в розвитку категорії, то фрагмент проекту типу. На першій сторінці майстра створення нового Фрагмент, введіть ім'я проекту. Майте на увазі, що назва проекту також стане фрагмент ID. Наприклад, починаючи з проекту додавання підтримки національних мов наприклад HelloWorld, ми б назвали наш проект "com.jumpstart.nls.example.helloworld.nl1". Наприкінці ". Nl1" не потрібно, але допомогти відрізнити фрагменти, які представляють собою "мовні пакети" з фрагментів, додавати додатковий код і функціональність.

Малюнок 7. Починаючи фрагмент проекту

Починаючи фрагмент проекту

 

Натисніть Next. Ми бачимо, що значення за замовчуванням для джерела проекту папку і бібліотека на другій сторінці:

Рисунок 8. Визначення фрагмента папки

Визначення фрагмента папки

 

Ці цінності здаються розумними, тому натиснувши Далі ми знову приходимо до "Фрагмент коду Генератори" сторінки. Виберіть другий перемикач, щоб вказати нам потрібно створити файл фрагмент маніфесту з шаблону, а потім виберіть Генератор замовчуванням Фрагмент майстер зі списку.

Малюнок 9. Вибір за замовчуванням майстер

Вибір за замовчуванням майстер

 

Після натискання кнопки Далі, ми бачимо, "Прості фрагмент вмісту" сторінки. Ця сторінка має два входи використовувати для цілей нашого фрагмента на існуючих плагінів. Ми повинні поставляти плагін ідентифікатор цілі і версії. Ми можемо використовувати Browse для вибору модуля, який ми хочемо розширити.

Малюнок 10. Орієнтація на фрагменті

Орієнтація на фрагменті

 

Тепер перейдемо до редактора фрагмент маніфесту, який схожий на маніфест плагіна редактора, що це багатосторінковий редактор Огляд виконання, розширення Точки розширення і джерело сторінок.

Малюнок 11. Редактор фрагментів проявляється

Редактор фрагментів проявляється

 

Зверніть увагу на вкладках відповідні розділи файлу фрагмента XML. Ми будемо використовувати виконання сторінці, щоб вказати фрагмент класами в бібліотеки, що містять наші переклади.

Ми визначили nl1.jar в новий майстер фрагмента, так що бібліотека вже включена в дорогу до класів цього фрагмента. Чого не вистачає на даному етапі є включення мовного певну папку. Ви можете додати нові бібліотеки, вибравши більш від виконання розділ Бібліотеки Огляд сторінки, або звернувшись до середовища виконання сторінки, вибравши New..., потім ввести $ NL $ /.

Малюнок 12. Інформація Фрагмент виконання

Інформація Фрагмент виконання

 

Поглянувши на джерело сторінці редактора проявляються фрагмент, ми бачимо, що PDE створює всі необхідні XML для опису нашого плагина фрагмента.

Малюнок 13. Фрагмент джерело

Фрагмент джерело

 

Крок 6. Підготувати та направити вітчизняних матеріалів мови для перекладу

Отримання правильних переказів вимагає певних навичок, які необхідно придбати. (На жаль, ваші чотири роки середньої школи німецької мови не мають права вас!) Є багато компаній, які будуть із задоволенням створювати професійні якості перекладів.

Для платформи Eclipse, цей крок було здійснено в два етапи. Перший етап полягав у відправці все зовні текст перекладу центру. Це перший прохід переклад робиться "з контексту". Перекладач не бачить працюючий продукт, вони не мають конкретного продукту досвідом. У них є в їх розпорядженні інструменти, щоб допомогти прискорити переклад і забезпечення узгодженості, але в підсумку вони покладаються на переклад тестерів для перевірки роботи продукту на цільовому мовою (друга фаза).

Ризики та наслідки виконання поза контекстом перекладу, результати яких іноді досить забавно, обговорюються в подальшій статті Як перевірити вашу інтернаціоналізовані Eclipse Plug-в [11].

Крок 7. Упаковка та перевірка перекладених матеріалів

Тепер, маючи перекладені файли, то зібрати їх у відповідні каталоги /JAR файли, як описано в кроці 5, створити первинний переклад плагіна фрагмент. NL1 папку Фрагмент містить мовні версії plugin.properties файл. Після переведення HelloWorld.properties файл на німецьку, ми перейменували його в HelloWorld_de.properties і зберегти його в папці NL1 джерело фрагментів. Зауважимо, що п \ де (німецька) папка є новим і створюється вручну, а не PDE. Ці мовні папки відокремити версії без властивостей файлів (наприклад, hello.xml показано нижче), ми додали переклад з плином часу.

Малюнок 14. Зібрані фрагмент проекту

Зібрані фрагмент проекту

 

Врахуйте, що переклад файлів властивостей, дуже ймовірно, містять акцентованих символів, кодування залежить, так що файли властивостей повинні бути перетворені в кодуванні ISO 8859-1 очікується PropertyResourceBundle [12] класу. Утиліта native2ascii буде обробляти кодування перетворення і вставити необхідні Unicode пагонів.

Термін Unicode втечі заслуговує трохи більше докладного пояснення. Утиліта native2ascii перетворення, в комплекті з Java SDK, приймає джерело кодування і виробляє вихідний закодований в ISO 8859-1, а також він перетворює символи поза цією кодової сторінки для позначення відомих як Unicode пагонів. Це позначення \ udddd, де DDDD = кодових точок шуканого символу в кодуванні Unicode.

Ось приклад. Розглянемо французька фраза "син-батько EST Аллі ? l'Hotel" (його батько вирушив у готель). Це містить чотири акцентованих символів, які не є частиною Latin-1 кодуванні. Перетворення цієї фрази з виходами native2ascii утиліти:

Son p\u00e8re est all\u00e9 \u00e0 h\u00f4tel

Є вже не акцентованих символів, і в результаті рядок складається тільки з символів, що мають кодів, які знаходяться в ISO 8859-1. Але які \ u00e8, \ u00e9, \ u00e0 і \ u00f4, які були замінені? Вони Unicode кодів з акцентованих символів в \ udddd позначень.

Трохи застереження при використанні утиліти native2ascii: Передбачається, що джерелом кодування так само, як активна кодова сторінка з машини, яка виконує його. Тим не менш, перекладачі зазвичай зберегти переклад в кодову сторінку за замовчуванням країна, і це кодова сторінка відрізняється в кожній країні і кожній операційної системи. Таким чином, особи, відповідальної за інтеграцію перекладів доведеться або (а) знати, в якому кодуванні, що перекладачі зберігати свої файли, або (б) попросіть, щоб вони зберегти його в загальну кодову сторінку. Ви можете вказати джерело кодування при виклику з native2ascii кодування параметрів.

Порада: Якщо ви не впевнені в джерелі кодової сторінки, ви можете виявити, перевірте висновок native2ascii проти кодів Unicode загальної акцентованих латинських символів таблиці далі в цій статті. Якщо ви знайшли \ udddd позначення в перетворені файли, які не є в цій таблиці (наприклад, \ u0205), цілком ймовірно, що ви вказали правильну кодування джерела. Існує немає еквівалента spotcheck для DBCS мовами, де практично всі символи перетворюються файли Unicode пагонів. Вам просто потрібно бути обережним і перевіряти проти працюючий продукт.

Перевірка перекладу гідності своїй статті. Подальшою статті Як перевірити вашу інтернаціоналізовані Eclipse Plug-В [13] описує процес і уроки, витягнуті в ході недавньої перевірки перекладу платформи Eclipse, і включає в себе уявлення (Eclipse, плагін, звичайно!) для виконання швидкої перевірки переклади файл властивостей.

Крок 8. Розгортання фрагментів

Фрагмент джерел, подібних плагінів джерел, можуть бути упаковані в JAR-файл. За допомогою рівнянь в приватних похідних для створення JAR пакет, виберіть "fragment.xml" файл і виберіть " Створити фрагмент JAR-файли... " у спливаючому меню. Майстер допоможе вам у створенні сценарію збірки, щоб провести всі необхідні JAR-файли для вашого фрагмента. Якщо fragment.xml файл містить перекладні рядки, розділити їх на plugin.properties файл (так само, як для plugin.xml файл, тобто, немає такого поняття, як "fragment.properties" файл). Це працює, тому що фрагменти є продовженням плагіна і, отже, успадковує його залежностей, у тому числі plugin.properties значення файлу.

Малюнок 15. Вибір файлу fragment.xml

Вибір файлу fragment.xml

 

Щоб розгорнути цей приклад фрагмент, скопіювати fragment.xml, в каталозі \ п, і JAR в com.jumpstart.example.helloworld.nl1 підкаталог в директорії плагінів. Це завершує наш приклад і кроки для інтернаціоналізації.

Резюме

Включення Вашого продукту на світовий ринок просто має економічний сенс. А описані вище дії показують, що процес досить простий. Тепер ось що тест ми згадували у вступі:

Вірно чи невірно: більшість світових доходів від програмного забезпечення IBM для продажів на території Сполучених Штатів.

False. Дійсно, більше 50% доходів від програмного забезпечення IBM йде за межами Сполучених Штатів.

На щастя, ці розробників продуктів на базі платформи Eclipse вигоду від того, чи готові переклад базового продукту. Все, що залишається тільки стежити за чіткі кроки, описані в цій статті, щоб відкрити Eclipse, на основі продукту на світовому ринку!

Глосарій

Кодових точок
символів може бути представлений один або кілька байт інформації. Кодів є шістнадцяткове значення присвоюється кожному графічний характер.

Кодову сторінку
кодування є специфікацією код точки для кожного графічного символу в набір, або набір графічних наборів символів. У даній кодової сторінки, кодових точок може мати тільки один певний сенс. Ви можете відобразити активну кодову сторінку на операційну систему Windows ® за допомогою команди CHCP (тільки однієї кодової сторінки активна в даний момент).

Кодування
кодових сторінок, пов'язаних з даним елементом даних. Файл називається "закодовані" в даній кодової сторінки, наприклад, Notepad буде кодувати свої дані в кодову сторінку 437 американських англійської машини за умовчанням. Зберегти як діалогове вікно дозволяє користувачеві вибрати декілька інші можливі кодування, Unicode та UTF-8 найбільш помітним серед них.

Інтернаціоналізація (іноді скорочено "i18n")
Інтернаціоналізація відноситься до процесу розробки програм без знання мови, культурних даних, або кодування схем вони повинні працювати. В системі термінів, це відноситься до забезпечення інтерфейсів, які дозволяють інтернаціоналізації програми змінити свою поведінку під час виконання конкретних операцій мови.

Однобайтових кодованого набору символів (SBCS)
в однобайтовий кодування, однобайтових кодових точок представляє кожен символ в наборі. Як правило, SBCS використовується для представлення символів англійської мови, європейських мов, слов'янські мови, арабська мова та іврит, щоб назвати декілька.

Двобайтові кодованого набору символів (DBCS)
в багатобайтових кодування (DBCS), багатобайтових кодових точок представляє кожен символ в наборі. Мови, які ідеографічний характер, такі як японська, китайська та корейська, більше символів, ніж можна уявити всередині коду 256 точок і, отже, вимагають багатобайтових кодовані набори символів.

Локалізація (іноді скорочено "L10N")
Локалізація відноситься до процесу створення інформації в комп'ютерній системі, специфічні для кожної мови, культурних даних, а кодовані комбінації набору символів.

Змішаного набору символів
змішаного байт кодування являє собою набір символів, що містять як однобайтових і двобайтових символів. На MBCS, кожен байт даних, повинні бути розглянуті, щоб переконатися, що це перший байт багатобайтових або однобайтових. Якщо цей байт в певному діапазоні (більш X'80 ', наприклад), то перший байт багатобайтових символів.

NLS
підтримки національних мов.

Unicode
безпосередньо з http://www.unicode.org [14] : "Unicode надає унікальний номер для кожного персонажа, незалежно від платформи, незалежно від того, які програми, незалежно від того, яка мова".
Примітка: В той час як вірно, що Java Класи з текстом є Unicode-орієнтованої, часто це не відноситься до даних, що зберігаються поза егідою вашої програми. Java-програмісти повинні враховувати кодування даних, виконуючи місцеві кодування в Юникод перетворень в разі потреби.

Unicode кодів загального акцентованих латинських символів

Персонажі
\ U00e0 серйозної
\ U00e1 гострий
\ U00c0 Могила
\ U00c1 Гострий
\ U00c2 Огинаючої
\ U00e2 огинаючої
\ U00c3 Тільда
\ U00e4 трема
\ U00c4 Трема
\ U00e8 електронної серйозної
\ U00c8 E серйозної
\ U00e9 електронної гострої
\ U00c9 E гострої
\ U00ea електронної огинаючої
\ U00eb електронної трема
\ U00cb E трема
\ U00ea електронної огинаючої
\ U00ca E огинаючої
\ U00ef я трьома
\ U00ec я могила
\ U00ed я гострий
\ U00cc Я серйозний
\ U00cd Я гострої
\ U00ee я огинаючої
\ U00ce Я огинаючої
\ U00f6 про трема
\ U00d6 Про трема
\ U00e3 Тільда
\ U00f4 про обвідної
\ U00d4 Про огинаючої
\ U00f2 про серйозну
\ U00d2 Ад
\ U00f3 про гостра
\ U00d3 Про гострої
\ U00f5 про тильда
\ U00d5 Про тильда
\ U00f1 я тильда
\ U00d1 N тильда
\ U00f9 у серйозних
\ U00d9 У серйозних
\ U00fa і гострої
\ U00da У гострій
\ U00fb у огинаючої
\ U00db У огинаючої
\ U00fc у трема
\ U00dc У трема
\ U00df з різким
Спеціальні символи
\ U00ba чоловічий порядковий показник
\ U00a7 Розділ знак
\ U00aa жіночий порядковий показник
\ U00ac не підписував
\ U00b9 1 індекс
\ U00b2 2 індекс
\ U00b3 3 індекс
\ U00a3 знак фунта
\ U00a2 центів знак
\ U00b0 Ступінь знак

Про авторів

Dan Kehn, старший інженер-програміст в IBM в Research Triangle Park, Північна Кароліна. Його інтереси в об'єктно-орієнтованому програмуванні повернутися до 1985 року, задовго до того, користувалися прийняття вона має сьогодні. Він має широкий спектр програмних досвід, працюючи на розвиток таких інструментів, як VisualAge для Smalltalk, експлуатаційні характеристики системи і пам'яті аналіз та дизайн інтерфейсу користувача. Ден працював в якості консультанта для об'єктно-орієнтованих проектів на всій території США, а також чотири роки в Європі. Його інтереси включають в себе останні об'єктно-орієнтованого аналізу /проектування, програмних засобів та веб-програмування з WebSphere Application Server. У минулому році він приєднався до Затемнення Jumpstart команди, основним завданням якого є допомога розробникам ПО створювати комерційних пропозицій на основі платформи Eclipse. В іншому житті, Ден написав кілька статей про різноманітні тим Smalltalk, як мета-програмування, команди розробників і аналізу пам'яті. Ви можете знайти їх на очі на SmallTalk [15].

Scott Fairbrother працює в команді Затемнення Jumpstart в IBM в Research Triangle Park, Північна Кароліна. Він є розробником програмного забезпечення з більш ніж 20-річним досвідом. Він розробив об'єктно-орієнтованої розробки додатків для управління бізнес-процесами. Він написав специфікації IBM проміжного рівня в Windows 2000 і також є автором по темі Microsoft Visual Studio. NET.

Cam-Thu Le  прийшов в IBM в 1983 році. Досвід Кама охоплює багато аспектів створення програмного забезпечення: розробка, тестування і підтримкою національних мов (NLS) планування і координації. Cam призвело національних версій продуктів IBM по всьому світу одночасно загальної доступності, у тому числі 4690 точки продажів продуктів і VisualAge для Smalltalk. Cam приєднався до проекту Eclipse, в минулому році, як NLS координаційного центру. Cam координував будівництво і тестування версії NL з Затемнення Workbench і WebSphere Studio Workbench.