2013-03-11 2 views
0

Я работаю над программой на C++ под названием RoboJournal. Он использует Hunspell для проверки орфографии. Прямо сейчас он автоматически устанавливает свои собственные словарные файлы (en_US.dic) в домашнюю папку пользователя (т. Е. ~/.robojournal/en_US.dic). Это прекрасно работает как на ОС, таких как Windows, которые не содержат совместимых словарей из коробки, но есть проблема с дизайном, которую я хочу исправить:Работа с словарями системного уровня

В Linux существует несколько экземпляров en_US.dic (наиболее заметно в/usr/share/hunspell/en_US.dic). Эта копия, очевидно, предназначена для совместного использования всеми программами, использующими Hunspell, что означает, что моя программа должна использовать ее, если это возможно, вместо того, чтобы полагаться на свою собственную копию. Однако копия в/usr/share/hunspell/требует прав суперпользователя для изменения; в то время как это означает, что пользователи могут читать из него, они не могут добавлять к нему слова, если только программа не работает с правами суперпользователя или если я не chmod файл, чтобы позволить всем писать на него. Эта проблема делает копию /usr/share/hunspell/en_US.dic гораздо менее полезной.

Есть ли способ для изменения файла /usr/share/hunspell/en_US.dic без с правами суперпользователя или с требованием сначала выполнить chmod файл? Мой помощник пакета Debian сказал, что мое приложение должно использовать глобальные системные ресурсы, когда это возможно.

ответ

1

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

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

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

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

Модель, которой я следую за настройками, а что нет, объясняется в QSettings.

http://qt-project.org/doc/qt-4.8/qsettings.html#details

http://qt-project.org/doc/qt-4.8/qsettings.html#platform-specific-notes

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

Надеюсь, что это поможет.

Смежные вопросы