Причина тривиальна: я являюсь поклонником заставки «Слово дня» и хотел бы добавить словари для языков, отличных от английского и японского (это два, которые я теперь могу выбрать в параметрах заставки).
Как мне это сделать?
В довольно малоизвестной ветке комментариев кто-то объяснил, где можно найти список слов, который Apple использует для включения заставки. Это в /System/Library/Graphics/Quartz\ Composer\ Plug-Ins/WOTD.plugin/Contents/Resources/NOAD_wotd_list.txt
. Файл выглядит так:
m_en_us1282510 quinsy
m_en_us1273791 orbicular
m_en_us1220945 alimony
m_en_us1250517 genome
Это список записей, разделенных табуляцией. Справа у вас есть слово, а слева что-то похожее на удостоверение личности. Но что это за идентификатор и как найти его для другого слова, которого еще нет в списке?
Как и следовало ожидать, идентификатор относится к статье в стандартном словаре Apple, New Oxford American Dictionary. (Это то, что означает «NOAD» в приведенном выше пути к списку слов.)
Как найти идентификаторы для других слов?
Парень по имени Джозеф Джентл в серии сообщений в блоге показывает, как получить данные, лежащие в основе словарей Apple. В своем посте «Словари Apple, часть 2» он указывает на код, который распаковывает соответствующий двоичный файл (хранящийся в /Library/Dictionaries
) в XML. Используя файлы dedict.c
и , найденные здесь , и следуя примеру Джентла, я использовал следующие команды bash, чтобы получить XML NOAD (эти команды запускаются из каталога, в который вы скачали файлы и ):strip.c
dedict.c
strip.c
clang dedict.c -Wall -lz -o dedict
clang strip.c -Wall -lz -o strip
./dedict "New Oxford American Dictionary" | ./strip > dict.xml
Когда я head
отредактировал первые несколько строк dict.xml
файла, я увидел нечто многообещающее с записями, которые выглядели так:
<d:entry xmlns:d="http://www.apple.com/DTDs/DictionaryService-1.0.rng" id="m_en_us1219333" d:title="abode" class="entry">
Обратите внимание, что id
параметр... это идентификатор, который выглядит точно так же, как в списке слов заставки!
Я написал следующий скрипт Ruby для анализа XML, а затем, используя свой собственный список слов, создал новый файл заставки, который сопоставляет мои собственные слова с их идентификаторами в словаре:
raw = File.open("./dict.xml").read
my_words = File.open("./word_list.csv").readlines.map { |line| line.split(',')[1] }
word_id_map = {}
raw.scan(/<d:entry .*? id="(.*?)" d:title="(.*?)" class="entry">/).each do |entry|
word_id_map[entry[1]] = entry[0]
end
my_words.each do |word|
if id = word_id_map[word]
puts [id, word].join(' ')
end
end
Когда я заменил исходный файл скринсейвера на новый, все заработало. Теперь у вас может быть заставка «Слово дня», которая дает определения для выбранных вами слов.
Если у вас 10.8, вы можете включить французский, немецкий, упрощенный китайский и испанский словари в настройках Dictionary.app:
Однако они, похоже, не отображаются в качестве вариантов для заставки «Слово дня»:
Я также попытался перезапустить после включения словарей.
В случае, если кто-то все еще заинтересован в этом в 2018 году и наткнулся на это ..
Я только что обновился до OS X Mojave и нашел Word of the Day.saver
файл по адресу /System/Library/Screen Savers/
. В этом пакете перейдите к Contents/Resources/WordLists/
, и вы можете найти 5 файлов .plist, используемых в Mojave WotD (они добавили три словаря мандаринского/кантонского диалекта китайского). Там вы можете использовать метод jsomers выше.
Кроме того, прошло некоторое время с тех пор, как Apple добавила защиту целостности системы в OS X, поэтому вам придется отключить ее перед записью в файл .plist.
Я очень рад, что Apple не отказалась от старого доброго WotD и немного обновила его в Мохаве. Надеюсь, что в будущем они смогут предоставить еще больше вариантов словарей.
Это должно решить вашу проблему: http://www.makeuseof.com/tag/easily-expanding-apple-dictionary---mac-only/
xji
xji