Есть ли способ заставить программу выводить ошибки на английском языке?

Я бы выбрал basename (при условии реализации GNU):

basename --suffix=.png -- *.png
1
21.01.2017, 00:50
4 ответа

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

Однако вам не нужно устанавливать какие-либо системные настройки. Просто запустите программу на этот раз с другими настройками. Установкой языкового стандарта для сообщений является LC_MESSAGES (см. Что я должен установить для своего языкового стандарта и каковы последствия этого? ), поэтому вы можете установить его, установив переменную среды LC_MESSAGES . Специальное значение C поддерживается во всех системах и означает непереведенные сообщения по умолчанию (обычно на английском языке).

Из оболочки следующая команда запускает myprogram с переменной среды LC_MESSAGES , установленной на C , т.е. запускает myprogram с сообщениями на английском языке и другие настройки локали не изменились (поэтому программа по-прежнему использует ваш любимый набор символов, порядок сортировки, формат даты и т. д.).

LC_MESSAGES=C myprogram

После запуска программы другие программы, выполняемые из той же оболочки, будут использовать ваши обычные настройки локали, изменение не сохраняется. Если вы хотите, чтобы изменение сохранялось в терминале, запустите

export LC_MESSAGES=C

. Это не повлияет на программы, запущенные с других терминалов.

1
29.04.2021, 00:05

Сделайте это перед запуском программы:

export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8

Если программа запускается скриптом, как в /etc/init.d, вам нужно поместить это внутрь скрипта.

0
29.04.2021, 00:05

Для запуска служебной программы (программы) с измененной локалью:

$ env LC_ALL=C somecommand

Утилита env изменяет среду служебной программы, которую она выполняется, и установка переменной среды LC_ALL на C (или POSIX ) гарантирует, что вы получите локализованные сообщения об ошибках в локали POSIX. Это также может повлиять на сортировку, форматы даты и времени и числовые форматы.

Временное переключение языкового стандарта не повлияет на среду за пределами утилиты (оболочка или система в целом).

Прочтите руководство locale (1) вашей системы ( man 1 locale ).

2
29.04.2021, 00:05

«Помимо переключения языкового стандарта» - Краткий ответ: Нет.

Длинный ответ:

Если разработчики приложения решат печатать все сообщения об ошибках на английском языке , независимо от локали, они чертовски легко могут это сделать. Все, что им нужно сделать, - это не отправлять эти строки через функции перевода gettext.

Если разработчики приложения решат ввести другую переменную среды (или другие средства) для указания другой локали для сообщений об ошибках, они также могут относительно легко реализовать это. Функции newlocale () и * _ l () , вероятно, пригодятся. Однако я никогда не видел такого приложения и не вижу причин для беспокойства разработчиков по этому поводу.

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

Если предположить, что это обычное интернационализированное приложение, которое переводит свои сообщения об ошибках (я считаю, что это именно то, что вам нужно), невозможно обмануть его, заставив использовать один языковой стандарт для строк, которые будут выводиться на стандартный вывод, и другой языковой стандарт для строки, которые появятся при стандартной ошибке. Это невозможно "взломать" с помощью уловок вроде библиотеки LD_PRELOAD или чего-то подобного.Причина очень проста: во время создания переведенной строки еще не известно, где эта строка появится (stdout, stderr, файл журнала, графический интерфейс, отправлено по сети и т. Д., Может быть, даже больше из них) в то же время). Тем не менее, для возможности обработки строка уже должна быть создана в ее переведенной форме.


Если вы предпочитаете использовать приложение в языковом стандарте, отличном от английского, то вот моя рекомендация:

Попытайтесь найти большую подстроку сообщения об ошибке, которая, вероятно, будет исходить из фиксированная строка, то есть не имеет замененных чисел или слов. Выполните команду grep для этой строки в / usr / share / locale / (yourlocale) / LC_MESSAGES, чтобы определить, из какого файла она взята. Если совпадений нет, повторите с подстрокой, содержащей только 7-битные символы ASCII (английский), поскольку файлы * .mo / * .gmo могут быть в любой кодировке (хотя для современного программного обеспечения они обычно используются в UTF-8). Как только вы нашли файл, из которого пришло сообщение об ошибке, запустите msgunfmt для этого файла, чтобы найти исходную строку на английском языке.


Обновление: я только что понял, что вы упомянули в комментарии, что видите проблемы с AUR и makepkg.

Как ответили другие, легко запустить определенную программу с английской локалью. Это настоятельно рекомендуется для сборки пакетов.

Так что, наверное, я неправильно понял ваш вопрос.Мой ответ выше отвечает на вопрос: «Возможно ли, чтобы приложение работало в моем предпочтительном неанглийском языке, но [тот же самый процесс] печатал сообщения об ошибках на английском языке?»

0
29.04.2021, 00:05

Теги

Похожие вопросы