Недавно сталкнулась с такой проблемой - необходимо было урезать количество языков в окне логина до двух: английский и русский. После долгого ковыряния по настройкам выяснилось, что они не настраиваются. Нигде. Вообще никак. Изначально искала по этому пути 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; (кроме одного места, где ставится дефолтный).
Теперь все работает, как надо.
Итак, не буду вас долго томить и сразу говорю решение.
Этот список формируется в классе 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; (кроме одного места, где ставится дефолтный).
Теперь все работает, как надо.
Комментариев нет:
Отправить комментарий