Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: Гурман от Август 02, 2011, 23:47



Название: Кириллица в именах ключей QMap и QSettings
Отправлено: Гурман от Август 02, 2011, 23:47
Сделал хранение настроек загружаемых плагинов в соответствующих им QVariantMap, из которых собственно сохранение производится переносом пар в QSettings и дальше sync(). Все работает, но очень хочется, чтобы наименования настроек (то есть, ключи) хранились в национальном алфавите. А тут не знаю, насколько это будет корректно работать в QVariantMap и QSettings. Как я вижу, QSettings кириллицу сохраняет в файл шестнадцатеричных кодах. Не очевидно, что её можно в названиях ключей использовать.

Кто-нибудь делал что-то подобное? Если нельзя ключи по-русски хранить и обрабатывать, то придется городить параллельный QMap<QString key, QString cyrillic_name>, это выглядит самым простым решением.


Название: Re: Кириллица в именах ключей QMap и QSettings
Отправлено: GreatSnake от Август 03, 2011, 10:37
И в чём проблемы?
В Qt строки хранятся в юникоде. Какая тебе разница как они будут сохранятся в файле?


Название: Re: Кириллица в именах ключей QMap и QSettings
Отправлено: Странник от Август 03, 2011, 11:52
И в чём проблемы?
В Qt строки хранятся в юникоде. Какая тебе разница как они будут сохранятся в файле?
ini немножко human-readable формат, мало ли чего человек хочет)


Название: Re: Кириллица в именах ключей QMap и QSettings
Отправлено: Гурман от Август 03, 2011, 12:40
Цитировать
ini немножко human-readable формат

это во-1ых, а во-2ых мне не очевидно, как будет работать пара ключ-значение такого вида:

\x41f\x440\x438\x43c\x435\x440=\x441\x442\x440\x43e\x43a\x438


Название: Re: Кириллица в именах ключей QMap и QSettings
Отправлено: LisandreL от Август 03, 2011, 15:21
Цитировать
ini немножко human-readable формат

это во-1ых, а во-2ых мне не очевидно, как будет работать пара ключ-значение такого вида:

\x41f\x440\x438\x43c\x435\x440=\x441\x442\x440\x43e\x43a\x438

С установленным кодеком значение будет вполне читаемо, ключ - увы.


Название: Re: Кириллица в именах ключей QMap и QSettings
Отправлено: Гурман от Август 03, 2011, 15:34
на читаемость плевать, ну... почти плевать (на мультиплатформенность не плевать), но не очевидно, что будет вообще работать, увы, сейчас не могу проверить, другим занят


Название: Re: Кириллица в именах ключей QMap и QSettings
Отправлено: Гурман от Август 03, 2011, 15:55
проверил - пары ключ-значение с кириллицей в имени ключа, и в значении, обе передаются через tr() сохраняет в виде:

%U0441%U0442%U0440%U043E%U043A%U0430%20%U0441%20%U043D%U0430%U0441%U0442%U0440%U043E%U0439%U043A%U043E%U0439=\x41f\x440\x438\x43c\x435\x440 \x441\x442\x440\x43e\x43a\x438

тем не менее, это работает, это уже хоть кое-что

однако все-таки, читабельность хотелось бы, хотя не обязательно

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

или я не прав?




Название: Re: Кириллица в именах ключей QMap и QSettings
Отправлено: LisandreL от Август 03, 2011, 16:10
%U0441%U0442%U0440%U043E%U043A%U0430%20%U0441%20%U043D%U0430%U0441%U0442%U0440%U043E%U0439%U043A%U043E%U0439=\x41f\x440\x438\x43c\x435\x440 \x441\x442\x440\x43e\x43a\x438

    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8"));
    QSettings settings("ini.ini", QSettings::IniFormat);
   settings.setIniCodec( "utf8" );
    settings.setValue( QString( "Раз" ), QString( "И появляется солнце" ) );

Код
INI
[General]
%U0420%U0430%U0437=И появляется солнце

Для
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp1251"));
    QSettings settings("ini.ini", QSettings::IniFormat);
    settings.setIniCodec( "utf8" );
    settings.setValue( QString( "Раз" ), QString( "И появляется солнце" ) );
результат аналогичный.


Название: Re: Кириллица в именах ключей QMap и QSettings
Отправлено: Гурман от Август 03, 2011, 16:20
да это все и без подсказки понятно, что можно кодек подвесить... но меня волнует не читабельность внутри INI файла, а полная переносимость между платформами - и ключи, и значения должны восприниматься одинаково, со значениями понятно, это одинаковым кодеком решается, а вот с ключами...  :-\ увы, нет сейчас под руками Линукс-машины с установленным Qt, чтобы проверить


Название: Re: Кириллица в именах ключей QMap и QSettings
Отправлено: Янковский Александр от Октябрь 25, 2011, 11:11
да это все и без подсказки понятно, что можно кодек подвесить... но меня волнует не читабельность внутри INI файла, а полная переносимость между платформами - и ключи, и значения должны восприниматься одинаково, со значениями понятно, это одинаковым кодеком решается, а вот с ключами...  :-\ увы, нет сейчас под руками Линукс-машины с установленным Qt, чтобы проверить


интересует схожий вопрос!
Гурман, получилось что-нибудь у Вас?


Название: Re: Кириллица в именах ключей QMap и QSettings
Отправлено: Гурман от Февраль 17, 2012, 12:12
Занимался другими вещами, сюда не заглядывал, извиняюсь за поздний ответ.

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


Название: Re: Кириллица в именах ключей QMap и QSettings
Отправлено: Авварон от Февраль 19, 2012, 01:05
нахрена пользователю отображать ключи настроек??


Название: Re: Кириллица в именах ключей QMap и QSettings
Отправлено: LisandreL от Февраль 19, 2012, 11:45
нахрена пользователю отображать ключи настроек??
Что-то вроде property editor'а. Таблица в 2 столбца. Первый - фиксированное название, второй - редактируемое значение.


Название: Re: Кириллица в именах ключей QMap и QSettings
Отправлено: Авварон от Февраль 19, 2012, 12:07
Ужас. А поля у вас связанными не бывают?)