# Язык проекта, локализация интерфейса


- На **Английском** пишем:
    - Исходный код проекта, имена классов, строковые литералы и т.д.
    - Документирующие комментарии для разработчиков JavaDoc
    - Основной интерфейс пользователя (default language)
    - Код тестов JUnit
    - Документацию по проверкам в корне каталога `/check.descriptions/` (основной язык)
    - Тестовые примеры кода 1С (желательно)

- На **Русском** пишем:
    - Второй дополнительный интерфейс
    - Документацию по проверкам в корне каталога `/check.descriptions/ru/`
    - Тестовые примеры кода 1С (допустимо)


## Подробнее...

Исходный код должен быть написан на Английском языке. Английский язык - является языком по умолчанию. 
Не допускается использование транслита или иных, не английских слов и терминов. 
Если вы затрудняетесь в выборе подходящего термина на английском - обратитесь за помощью в issue по вашей функциональности к владельцам проекта - мы всегда поможем!

Язык ведения проекта (issue, аудит и т.д.) - Русский, т.к. ориентация на русское сообщество программистов. 
Поддержка разработчиков на других языка в будущем может быть решена дополнительно.

## Локализация интерфейса

Все интерфейсные тексты, которые видит пользователь, должны быть написаны на английском языке и локализированы - вынесены в отдельные ресурсные файлы `*.properties`. 

Кодировка файлов  `*.properties` - UTF-8.

Все локализируемые ресурсные файлы должны быть переведены на дополнительный русский язык.

Например:

- `messages.properties` - основной интерфейс, должен содержать английский интерфейс
- `messages_ru.properties` - дополнительный интерфейс на русском языке

В проекте используется система локализации **Eclipse NLS**:

- Необходимо создавать final-класс наследник `org.eclipse.osgi.util.NLS`
- В классе указывается константа `BUNDLE_NAME` с полным квалификатором файла `messages` в котором хранятся локализованные сообщения.
- Создаются публичные константы, которые являются ключами в ресурсных файлах

```java
final class Messages
    extends NLS
{
    private static final String BUNDLE_NAME = "com.e1c.v8codestyle.md.check.messages"; //$NON-NLS-1$
    public static String CommonModuleNameClient_description;
    public static String CommonModuleNameClient_message;
    static
    {
        // initialize resource bundle
        NLS.initializeMessages(BUNDLE_NAME, Messages.class);
    }

    private Messages()
    {
    }
}
```

Для большего удобства используйте помощник Eclipse Externalize Strings Wizard, который помогает переносить интерфейсные строки из кода в ресурсные файлы, с автоматическим созданием файла констант NLS.

Для редактирования ресурсных файлов следует использовать плагин из Eclipse Marketplace: [ResourceBundle Editor](https://marketplace.eclipse.org/node/2628188) или аналогичный, позволяющий синхронно редактировать интерфейсы на нескольких языках, корректно учитывающий кодировку UTF-8.

