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

Требуется помощь от знатоков Linux

Пн дек 23, 2019 09:46:47

вопрос у меня очень простой, но правильно сформулировать его я не могу, чтобы гуру линуха отвечали мне на профильных форумах.

неправильно вопрос формулируется так: ОС поддерживает разные локали (языки), причем их количество может быть различным, как и сами поддерживаемые локали. в API винды есть функция, которой передаешь номер поддерживаемой локали (0 - локаль по умолчанию, а потом просто номера локалей, т.е. для русской локали 0 будет 'RU' и где-то, допустим, 27 тоже будет 'RU'). кроме идентификатора названия локали ('RU', 'EN', 'GB' и т.п.) эта функция может возвращать и "кодировку" или "кодовую страницу" указанной локали, например, для 'RU' возвращает '1251'.

то есть в винде я тупо в цикле передаю этой функции числа от 1 до 400 (с запасом), и полчаю соответствующие строчки наименований локалей или кодовых страниц, если локали кончились, функция возвращает NULL - значит, цикл пора прервать. так я составляю список всех кратких названий локалей с соответствующими кодовыми страницами, котоые поддерживает OS MSWindows. Может, это и не совсем оптимально, но работает.

так вот, очень интересуюсь: каким образом получить такую же информацию в Linux? текущую локаль можно узнать из переменной окружения LANG, но интересует не текущая, а любая поддерживаемая ОС, а так же соответствующая кодировка символов для любой поддерживаемой локали.

Re: Требуется помощь от знатоков Linux

Вт дек 24, 2019 16:51:19

cat /etc/locale.gen

Но это редко бывает, чтобы пользователь выбрал недефолтную локаль. Обычно народ как-то хрюникодом довольствуется.
Вот у меня по умолчанию КОИ8-Р…

P.S. С такими названиями темы помощи вряд ли можно дождаться…

Re: Требуется помощь от знатоков Linux

Вт дек 24, 2019 22:33:47

не выходит каменный цветок... нашел в /etc/ файл locale.alias... Linux Mint на виртуалке.
это что ж выходит: системной функции нет, а файлы в разных версиях OS могут называться по-разному?! и как тогда писать программы под это все?

Re: Требуется помощь от знатоков Linux

Вт дек 24, 2019 22:53:34

В линуксе много чего делается через файлы или их эмуляции.

Re: Требуется помощь от знатоков Linux

Вт дек 24, 2019 23:08:48

да я не против, делайется - так делается. но если названия файлов произвольно меняются от версии к версии - это просто кошмар какой-то! написал программу, которая о языках узнает из одной папке, у пользователя другая версия OS - все, сливай масло, программа работать не будет? по-моему, это хня какая-то...

Re: Требуется помощь от знатоков Linux

Вт дек 24, 2019 23:10:47

ARV писал(а):это хня какая-то...
Нет, это линукс!

Re: Требуется помощь от знатоков Linux

Вт дек 24, 2019 23:24:33

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

Re: Требуется помощь от знатоков Linux

Ср дек 25, 2019 00:00:04

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

Re: Требуется помощь от знатоков Linux

Ср дек 25, 2019 07:59:15

Eddy_Em писал(а):нет никакого смысла узнавать, какие локали в системе поддерживаются
знаете, когда кто-то решает за другого, есть смысл что-то делать или нет, мы и получаем ситуацию, когда даже апологеты одного семейства OS считают одну её разновидность must die, а другую must have. возможности должны быть предоставлены, а уж пользоваться ими или нет, каждый решит сам.

Re: Требуется помощь от знатоков Linux

Ср дек 25, 2019 08:22:28

ARV, можно четко сформулировать задачу?
Я стопудово уверен, что после мастдайки у вас сформировалось несколько искаженное восприятие…
Дело в том, что если у пользователя установлена локаль А, то нет смысла выдавать ему текст в локали Б — он увидит "крякозябры". Вот файлы сохранять можно в любой локали, для этого есть библиотека enca.
Если имеете дело с хрюникодом, не забывайте, что в utf8 полным-полно запрещенных последовательностей и всяких косяков. Поэтому крайне рекомендую этим дерьмом не пользоваться, а если нужен хрюникод, то ставить utf32, где все однозначно.

Re: Требуется помощь от знатоков Linux

Ср дек 25, 2019 09:25:31

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

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

Re: Требуется помощь от знатоков Linux

Ср дек 25, 2019 09:31:12

Ну так если приложение графическое, то при чем здесь локаль пользователя? Локаль влияет лишь на терминал и имена файлов, а в иксовых приложениях все в юникоде.
Для смены языка нужно всего лишь поменять переменные LC_MESSAGES и LANG, чтобы gettext автоматом выбрал другой перевод из своей базы (если он, конечно, есть).

В общем, текущая локаль пользователя в данном случае не имеет никакого значения (если вы хотите насильно в обход нее сменить язык).

Вот только обычно пользователь не просто так себе локаль назначает. Если у меня локаль ru_RU.koi8r, это означает, что я ожидаю увидеть либо текст по-английски, либо по-русски. Но не на турецком или китайском!

Короче: я не вижу в ваших действиях вообще никакого смысла!!!

Re: Требуется помощь от знатоков Linux

Ср дек 25, 2019 09:43:10

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

Re: Требуется помощь от знатоков Linux

Ср дек 25, 2019 09:48:01

ARV, линукс - не мастдайка!
Нет абсолютно никакого смысла выдумывать какую-то чушь!
Если у вас есть в gettext перевод на заданный язык, он автоматом по настройке локали пользователя всплывет. Если нет - будет дефолт (английский).
Кодировка здесь абсолютно лесом, т.к. внутри иксов все в utf8!

В общем, не надо пагубные мастдайские привычки в линукс тащить! И не надо юзеру "предлагать" какие-то языки в обход его локали. Если он захочет другой язык, просто соответствующие переменные locale изменит.

Понятно теперь, почему на профильных форумах вам не могли ответить: потому что вопрос поставлен в корне неверно. Почитайте на SO, например, как правильно вопрос задавать.

Re: Требуется помощь от знатоков Linux

Ср дек 25, 2019 11:22:07

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

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

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

Re: Требуется помощь от знатоков Linux

Ср дек 25, 2019 11:43:13

ARV, это в мастдайке невозможно. А в линуксе просто меняете нужные переменные локали, запускаете обновление интерфейса и у вас gettext автоматом меняет перевод. Кстати, в Qt есть кроссплатформенные утилиты для этих вещей. Сам я точно сказать не могу, т.к. презираю GUI и пишу исключительно CLI-утилиты (ну, а если вдруг мне нужен GUI, делаю веб-морду).
Вот в консоли так делать нельзя: там локаль та, которую выбрал пользователь, и смена локали приложения ни к чему хорошему не приведет.

P.S. Кажется, в qt-designer есть возможность просмотра интерфейса с выбранными LANG, чтобы посмотреть, как будут переводы выглядеть на разных языках и не будет ли интерфейс от этого коробить. Но, опять же, интересуйтесь у кутешников. Я не то, что культяпки не люблю, у меня к самому С++ крайне негативное отношение.

Re: Требуется помощь от знатоков Linux

Ср дек 25, 2019 12:09:19

Eddy_Em писал(а):это в мастдайке невозможно
как же невозможно, если я это УЖЕ сделал? а вот повторить подоное в линуксе не знаю как.

Re: Требуется помощь от знатоков Linux

Ср дек 25, 2019 12:12:11

Я уже сказал, как повторить: просто поменять нужные переменные и обновить интерфейс!

Re: Требуется помощь от знатоков Linux

Ср дек 25, 2019 12:14:17

Я уже сказал, как повторить: просто поменять нужные переменные и обновить интерфейс!

вы отвечаете на свой вопрос, а вы ответьте на мой: как узнать список тех локалей, которые поддерживаются (установлены?) в OS? интерфейс рисовать будет же OS, и если я установлю кыргызскую локаль, а её всистеме нет, то будет английская? мне надо не дать установить кыргызскую, если её в системе нет.

Re: Требуется помощь от знатоков Linux

Ср дек 25, 2019 13:09:23

ARV, это не нужно. Поддерживается все, что поддерживается в utf8!
Единственное ограничение - какие переводы у вас есть под gettext.
Ответить