LINUX.ORG.RU

GIMP настройка RU языка

 


0

1

#You will have to restart GIMP for the following changes to take effect:

undo-preview-size import-raw-plug-in

Глупый вопрос.Как установить RU язык.Что именно надо по порядку если не сложно.

Установлено на Windows



Последнее исправление: michelin (всего исправлений: 1)

Ответ на: комментарий от James_Holden

Начинаю подозревать, что баг может быть в GTK

Скорее всего нужно смотреть исходники диалогового окна, используемого для смены интерфейса и какие функции для этого используются.

Forum0888
()
Ответ на: комментарий от James_Holden

Эти файлы?

app\dialogs\file-open-location-dialog.c
app\dialogs\file-open-location-dialog.h

В них много обращений к функциям gtk.

Посмотрите какие *.h app\dialogs\file-open-location-dialog.c использует.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 2)
Ответ на: комментарий от Forum0888

Нашел кажись

Вот тут

https://gitlab.gnome.org/GNOME/gimp/-/blob/master/app/core/gimp-utils.c

Строки 155-171

Если не задана переменная окружения LANG (а ее нет если не создать руками), то используется функция-преобразователь из glib g_win32_getlocale. Она преобразует виндовское название локали в юниксовое.

И я очень сильно подозреваю, что на настройках винды типа Беларусь/Русский(Беларусь) оно работает некорректно, либо возвращает такую локаль которой у Гимпа нету, что и вызывает сабжевый баг в Гимпе. Дальше надо смотреть уже исходники glib.

James_Holden ★★★
()
Последнее исправление: James_Holden (всего исправлений: 1)
Ответ на: комментарий от James_Holden

Все остается как и было, единственная разница - выбран другой язык в этой выбиралке.

Тогда причина все же в
app\dialogs\file-open-location-dialog.c
app\dialogs\file-open-location-dialog.h

так как интерфейс не был изменен.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 1)
Ответ на: комментарий от Forum0888

Он и не должен быть изменен.

Я же говорил - при изменении языка просто меняется текстовый конфиг. Далее требуется перезапуск Гимпа, и он должен подхватить новые настройки. Это не срабатывает, потому что он не может корректно получить локаль из настроек винды.

file-open-location-dialog.c - это вообще диалог открытия файла, он тут вообще никаким боком к этой проблеме не относится.

James_Holden ★★★
()
Ответ на: комментарий от James_Holden

file-open-location-dialog.c - это вообще диалог открытия файла, он тут вообще никаким боком к этой проблеме не относится.

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

Forum0888
()
Ответ на: комментарий от James_Holden

Этот диалог - вот эта штука.

Тогда в директории app\dialogs нужно найти тот исходник, который отвечает за работу диалогового окна в котором производится смена интерфейса.

preferences-dialog.c
preferences-dialog.h

  /***************/
  /*  Interface  */
  /***************/
  vbox = gimp_prefs_box_add_page (GIMP_PREFS_BOX (prefs_box),
                                  "gimp-prefs-interface",
                                  _("User Interface"),
                                  _("Interface"),
                                  GIMP_HELP_PREFS_INTERFACE,
                                  NULL,
                                  &top_iter);
  gimp_prefs_box_set_page_scrollable (GIMP_PREFS_BOX (prefs_box), vbox, TRUE);
...

Вы правы в
app\dialogs\file-open-location-dialog.c
app\dialogs\file-open-location-dialog.h

нет полей для смены интерфейса.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 3)
Ответ на: комментарий от hobbit

Не помню и я общаюсь с ними как и все, через багтрекер.

Судя по тому, что а) надо принудительно выставлять переменные локали, и б) воспроизводится не во всех версиях гимпа и винды, это опять какая-то полюбень в glib.

AP ★★★★★
()

А зачем задавать глупые вопросы? Если мозгов зарегистрироваться на ЛОРе хватило, может попробуешь погуглить? Удивительно что комментариев на 3 страницы набролось. Дизлайк всем отписавшимся (кроме меня)

perl5_guy ★★★★★
()

undo-preview-size import-raw-plug-in

Уже несколько человек пыталось объяснить, но, видимо, безрезультатно.

Это названия переменных в настройках. Ты поменял размер миниатюр в панели отката и возврата действий и плагин для открытия raw-файлов. Сообщение просто информирует тебя, что вот эти параметры поменялись, и для вступления изменений в силу надо перезапустить программу.

AP ★★★★★
()
Ответ на: комментарий от hobbit

GIMP 2.10.34 Винда 10 x64 Извеняйте что раньше не ответил так как не сижу здесь а заходил спросить по вопросу.И обратно вернулся просто посмотреть название альтернативных программ.

michelin
() автор топика
Ответ на: комментарий от Forum0888

Явно из винды оно локаль получает не RU, а что-то еще (у меня не россия/русский, а беларусь в настройках). А что именно и почему оно ломает - я не вижу пока, для этого надо тест написать и собрать под виндой.

James_Holden ★★★
()
Ответ на: комментарий от James_Holden

Видео посмотрел.

Добавление в environment переменной решило проблему.
gimp для Windows использует значение этой переменной?
Если да, то зачем?
Ведь имеется диалог для выбора языка интерфейса.

Forum0888
()
Ответ на: комментарий от Forum0888

Если кратко, то конечно, должно это делаться через диалог, а точнее - вообще по умолчанию должен быть системный (русский) язык. Но из-за некорректной работы портированных с линукса библиотек - это не работает. Баг я сейчас в коде пытаюсь найти, но там черт ногу сломит.

А переменная - это как-бы запасная возможность, на случай если оно само не работает.

James_Holden ★★★
()
Ответ на: комментарий от James_Holden

Все получилось.От души спасибо. ЛОР еще тот)

Всем спасибо,проблему решил и узнал много нового.А тем кто там пытался умничать и дерзить посоветовал бы извениться перед James_Holden

michelin
() автор топика
Ответ на: комментарий от James_Holden

В app\dialogs\preferences-dialog-utils.c смотрим

#ifdef HAVE_ISO_CODES
GtkWidget *
prefs_language_combo_box_add (GObject      *config,
                              const gchar  *property_name,
                              GtkBox       *vbox)
{
  GtkWidget *combo = gimp_prop_language_combo_box_new (config, property_name);

  if (combo)
    gtk_box_pack_start (vbox, combo, FALSE, FALSE, 0);

  return combo;
}
#endif

app\dialogs\preferences-dialog-utils.h


#ifdef HAVE_ISO_CODES
GtkWidget * prefs_language_combo_box_add     (GObject      *config,
                                              const gchar  *property_name,
                                              GtkBox       *vbox);
#endif

И см. исходник app\widgets\gimplanguagestore-parser.c

Имеется #defined для HAVE_ISO_CODES?

Скорее всего при сборке нет определения на HAVE_ISO_CODES.

  /*  Only add the language entry if the iso-codes package is available.  */

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 2)
Ответ на: комментарий от Forum0888

Скорее всего при сборке нет определения на HAVE_ISO_CODES

Тогда бы вообще не работало, а оно же чинится при смене страны в винде.

По этому диалогу - если мы меняем значение комбобокса, то он должен писать в файл конфига gimprc выбранное значение языка.

Я открываю этот файл конфига, и там у меня написано - language "ru". То есть, сам диалог корректно работает.

При этом, язык всего все равно английский. Почему-то из конфига, правильно заданная опция дальше не применяется.

А вот где она читается из gimprc и как дальше работает, я пока не могу понять.

James_Holden ★★★
()
Ответ на: комментарий от James_Holden

В meson.build

################################################################################
# ISO codes

isocodes = dependency('iso-codes', required: false)
if isocodes.found()
  isocodes_prefix = isocodes.get_variable(pkgconfig: 'prefix')
  isocodes_location = isocodes_prefix / get_option('datadir') / 'xml' / 'iso-codes'
  isocodes_localedir= isocodes_prefix / get_option('datadir') / 'locale'
endif
conf.set('HAVE_ISO_CODES', isocodes.found())

В архиве нет xml с ISO codes (а он нужен).
Точнее нет доступа к директории с этим xml.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 2)
Ответ на: комментарий от James_Holden

Ты нагуглил решение вендопроблемы и запостил резултаты своих гуглений на форуме о Linux. Лично тебе говорю, что отвечать на неуместные и глупые вопросы так же плохо, как такие вопросы задавать.

perl5_guy ★★★★★
()
Ответ на: комментарий от Forum0888

Лично я крайне сомневаюсь что в этом xml проблема.

Вот где при запуске Гимпа идет задание локали

https://gitlab.gnome.org/GNOME/gimp/-/blob/master/app/language.c

в нем функция language_init ставит переменную окружения LANGUAGE, и потом, видимо, GTK подхватывает эту переменную и делает нужный язык.

Думаю что в ней что-то идет не так

James_Holden ★★★
()
Ответ на: комментарий от Forum0888

Там, именно для винды, вот такой комментарий

/* FIXME: This is a hack. gettext doesn't pick the right language
       * by default on Windows, so we enforce the right one. The
       * following code is an adaptation of Python code from
       * pynicotine. For reasons why this approach is needed, and why
       * the GetLocaleInfo() approach in other libs falls flat, see:
       * http://blogs.msdn.com/b/michkap/archive/2007/04/15/2146890.aspx
       */


James_Holden ★★★
()
Ответ на: комментарий от James_Holden

См.

#ifdef G_OS_WIN32
  if ((! language || strlen (language) == 0) &&
      g_getenv ("LANG")        == NULL       &&
      g_getenv ("LC_MESSAGES") == NULL       &&
      g_getenv ("LC_ALL")      == NULL       &&
      g_getenv ("LANGUAGE")    == NULL)

Скорее всего в xml имеются значения для этих переменных.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 1)
Ответ на: комментарий от Forum0888

Короче, из кода этой функции, кажется я немного понял в чем конкретно проблема.

Оно вызывает виндовую функцию (из WinAPI) - GetUserDefaultUILanguage

Эта функция возвращает код языка. Дальше Гимп делает с кодом вот так

switch (GetUserDefaultUILanguage())
        {
        case 1078:
          language = "af";          /* Afrikaans - South Africa */
          break;
        case 1052:
          language = "sq";          /* Albanian - Albania */
          break;
        case 1118:
          language = "am";          /* Amharic - Ethiopia */
          break;
        case 1025:
          language = "ar_SA";       /* Arabic - Saudi Arabia */
          break;
        case 5121:
          language = "ar_DZ";       /* Arabic - Algeria */
          break;

То есть по коду, выбирает юниксовый вариант локали. Если выдается неизвестный Гимпу код, как у меня для Беларуси + Русский язык, то ставится language = null.

И видимо, дальше это ломает выбор языка.

James_Holden ★★★
()
Ответ на: комментарий от Forum0888

Да нет, это же просто переменные окружения. Они не берутся не из какой XML, они могут быть заданы в винде, и тогда функция сразу возвращает заданный язык.

А если они не заданы - то начинает работать вот этот развесистый switch case.

James_Holden ★★★
()
Последнее исправление: James_Holden (всего исправлений: 1)
Ответ на: комментарий от Forum0888

actual_language будет установлен, если эта функция уже вызывалась ранее после текущего запуска Гимпа. Второй раз, естественно, ей уже ничего ставить не надо. Она ставит один раз после запуска Гимпа.

По XML файлу выяснил. Этот файл ставится пакетом в дистрибутивах, как зависимость. У меня на арче они лежат в usr/share/xml/iso-codes и оттуда подхватываются при сборке, значит.

А в винде, в сборочной среде должны ставиться отдельно.

James_Holden ★★★
()
Последнее исправление: James_Holden (всего исправлений: 2)
Ответ на: комментарий от Forum0888

Виндовая сборка 100% собрана с этим XML файлом, просто его отдельно подсовывают в сборочной среде.

Насколько я понял, тут проблема вот в чем, и что мне надо сделать.

Мне надо определить, какой именно код языка возвращает GetUserDefaultUILanguage на моей системе. Далее, надо добавить этот код в switch case из функции init_language, с установкой русского языка.

Тогда все должно заработать.

Но я очень сомневаюсь - делать это или нет, потому что на винде сейчас мне поднимать сборочную среду для Гимпа это дикая боль и страдание.

James_Holden ★★★
()
Ответ на: комментарий от perl5_guy

Дизлайк всем отписавшимся (кроме меня)

И запомните: верить в наше время нельзя никому, порой даже самому себе.
Мне — можно.

(c) самизнаетекто

hobbit ★★★★★
()
Ответ на: комментарий от James_Holden

Но я очень сомневаюсь - делать это или нет, потому что на винде сейчас мне поднимать сборочную среду для Гимпа это дикая боль и страдание.

Если бы sln для Visual Studio был, то попробовал бы подебажить, а самому его не охота создавать.

Forum0888
()
Ответ на: комментарий от James_Holden

на винде сейчас мне поднимать сборочную среду для Гимпа это дикая боль и страдание

Думаю, не только «сейчас» и не только «мне».

Я в своё время провоцировал на ЛОРе дискуссии, нужна ли кроссплатформа и стоит ли её писать на GTK. Но я к тому времени уже сильно осел на Qt, поэтому хаять GTK (которую я весьма плохо знаю) не буду.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)