7 июня 2011 г.

Настройка языков в окне логина Adempiere

Недавно сталкнулась с такой проблемой - необходимо было урезать количество языков в окне логина до двух: английский и русский. После долгого ковыряния по настройкам выяснилось, что они не настраиваются. Нигде. Вообще никак. Изначально искала по этому пути http://www.adempiere.ru/book/1468. Но это немного другое.

Итак, не буду вас долго томить и сразу говорю решение.

Этот список формируется в классе base/src/org/compiere/util/Language.java. Там сразу видно, что создается массив s_languages - в самом начале файла. Так что просто нужно удалить или закомментить ненужное.
Вот исходный файл (вернее его чать).


public class Language implements Serializable
{

/** Base Language               */
public static final String AD_Language_en_US = "en_US";
/** Additional Languages         */
private static final String AD_Language_en_GB = "en_GB";

private static final String AD_Language_ru_RU = "ru_RU";

/***
* System Languages.
* If you want to add a language, extend the array
* - or use the addLanguage() method.
**/
static private Language[]   s_languages = {

new Language ("English",
AD_Language_en_US, Locale.US,     null, null,
MediaSize.NA.LETTER)    // Base Language

new Language ("\u0420\u0443\u0441\u0441\u043a\u0438\u0439 (Russian)",
AD_Language_ru_RU, new Locale("ru","RU"), new Boolean(false), "dd-MM-yyyy",
MediaSize.ISO.A4),

};
/** Default Language           */
private static Language     s_loginLanguage = s_languages[0];


/**
* Is it the base language
* @param langInfo either language (en) or locale (en-US) or display name
* @return true if base language
*/
public static boolean isBaseLanguage (String langInfo)
{
if (langInfo == null || langInfo.length() == 0
|| langInfo.equals(s_languages[0].getName())
|| langInfo.equals(s_languages[0].getLanguageCode())
|| langInfo.equals(s_languages[0].getAD_Language()))
return true;
return false;
}   // isBaseLanguage

/**
* Get Base Language
* @return Base Language
*/
public static Language getBaseLanguage()
{
return s_languages[0];
}   // getBase

/**
* Get Base Language code. (e.g. en-US)
* @return Base Language
*/
public static String getBaseAD_Language()
{
return s_languages[0].getAD_Language();
}   // getBase


Но, не так оно все просто. Дело в том, что мне необходимо было сделать так, чтобы первый в списке шел русский, который должен устанавливаться по умолчанию. Я не просто так включила в листинг еще некоторые части. Просто поставить нулевым русский в массиве не получилось. Начились проблемы с базовым языком. Если перевода на какой-нибудь язык нет, то система берет базовый. Поэтому, чтобы все было отлично, вместо s_languages[0] написала s_languages[baseLanguageIndex] и добавила переменную private static int baseLanguageIndex = 1; (кроме одного места, где ставится дефолтный).
Теперь все работает, как надо.

Комментариев нет:

Отправить комментарий