Причина тривіальна: я шанувальник заставки «Слово дня» і хотів би додати словники для інших мов, крім англійської та японської (це два, які я зараз можу вибрати в параметрах заставки).
Як я можу це зробити?
Причина тривіальна: я шанувальник заставки «Слово дня» і хотів би додати словники для інших мов, крім англійської та японської (це два, які я зараз можу вибрати в параметрах заставки).
Як я можу це зробити?
Відповіді:
У досить незрозумілій темі коментарів хтось пояснив, де ви можете знайти список слів, який 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 за замовчуванням, "Новий американський словник Оксфорда". (Ось що означає "NOAD" у шляху списку слів вище.)
Як знайти ідентифікатори для інших слів?
У ряді публікацій в блозі співробітник на ім'я Джозеф Джентльент показує, як отримати дані, що лежать в основі словників Apple. У своїй публікації "Словники Apple, частина 2" він вказує на код, який розпаковує відповідний бінарний файл (зберігається в /Library/Dictionaries
) у XML. Використовуючи файли dedict.c
та strip.c
файли, знайдені тут , та наслідуючи приклад Джентльмена, я використовував наступні команди bash, щоб потрапити на XML NOAD (ці команди виконуються з каталогу, куди ви завантажили файли 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 році і натрапить на це ..
Я щойно оновив ОС X Mojave і знайшов Word of the Day.saver
файл у /System/Library/Screen Savers/
. У цьому пакеті перейдіть до Contents/Resources/WordLists/
, і ви зможете знайти 5 .plist файлів, які використовуються в Mojave WotD (вони додали три словники Mandarin / Cantonese китайською мовою). Там ви можете використовувати метод jsomers вище.
Крім того, минуло певний час, коли Apple додала захист цілісності системи до ОС X, тому вам доведеться відключити її перед тим, як писати у файл .plist.
Я дуже щасливий, що Apple не відмовилася від старого хорошого WotD і трохи оновила його в Mojave. Сподіваємось, вони зможуть запропонувати ще більше варіантів словника у майбутньому.
Це повинно вирішити вашу проблему: http://www.makeuseof.com/tag/easily-expanding-apple-dictionary-–-mac-only/