This document provides an overview on how to create your own Yomitan dictionary.
- Yomichan Dictionary Builder: A node package that simplifies the process of making dictionaries, particularly useful for those using TypeScript or JavaScript.
- hasUTF16SurrogatePairAt: Important for checking if a kanji/hanzi is a surrogate pair, which affects string operations in JavaScript.
- japanese-furigana-normalize: A utility function to normalize Japanese readings containing furigana, ensuring proper alignment with kanji characters.
Familiarity with the Yomitan schemas is essential. These schemas define the structure of Yomitan dictionaries. Helpful resources for interpreting JSON schemas include codebeautify, json-schema-viewer, and jsonhero.
Below is a list of Yomitan dictionary schemas, their expected filenames, and their usage:
Schema | Expected Filename | Usage |
---|---|---|
dictionary-index-schema.json |
index.json |
Metadata about the dictionary. Please include as much detail as possible. |
dictionary-kanji-bank-v3-schema.json |
kanji_bank_${number}.json |
Information used in the kanji viewer - meanings, readings, statistics, and codepoints. |
dictionary-kanji-meta-bank-v3-schema.json |
kanji_meta-bank_${number}.json |
Stores kanji frequency data. |
dictionary-tag-bank-v3-schema.json |
tag_bank_${number}.json |
Defines tags for kanji and term dictionaries, like parts of speech or kanken level. |
dictionary-term-bank-v3-schema.json |
term_bank_${number}.json |
Stores dictionary readings, definitions, etc. |
dictionary-term-meta-bank-v3-schema.json |
term_meta_bank_${number}.json |
Stores meta information about terms, such as frequency data and pitch accent data. |
You can add custom CSS to a dictionary simply by adding a styles.css
file to the root of the dictionary zip archive. This file will be loaded by Yomitan and applied to the dictionary viewer with the styles scoped to the dictionary. For example, observe the styles.css
file in the official test dictionary.
A dictionary can contain various types of information within the zip file. After creating an index.json
and the relevant data files, zip them with all data .json
files in the root directory of the zip, not in subfolders. Use the highest compression level possible to reduce the size.
- The official test dictionary showcases the full range of features available in Yomitan dictionaries.
To validate schemas, configure VSCode to validate schemas or use a website such as jsonschemavalidator.
For VSCode validation, use the following settings JSON:
"json.schemas": [
{
"fileMatch": ["kanji_bank_*.json"],
"url": "https://github.com/yomidevs/yomitan/raw/master/ext/data/schemas/dictionary-kanji-bank-v3-schema.json"
},
{
"fileMatch": ["kanji_meta_bank_*.json"],
"url": "https://github.com/yomidevs/yomitan/raw/master/ext/data/schemas/dictionary-kanji-meta-bank-v3-schema.json"
},
{
"fileMatch": ["tag_bank_*.json"],
"url": "https://github.com/yomidevs/yomitan/raw/master/ext/data/schemas/dictionary-tag-bank-v3-schema.json"
},
{
"fileMatch": ["term_bank_*.json"],
"url": "https://github.com/yomidevs/yomitan/raw/master/ext/data/schemas/dictionary-term-bank-v3-schema.json"
},
{
"fileMatch": ["term_meta_bank_*.json"],
"url": "https://github.com/yomidevs/yomitan/raw/master/ext/data/schemas/dictionary-term-meta-bank-v3-schema.json"
}
],
For Yomitan to conjugate Japanese terms, they need the appropriate part of speech tag. The part of speech labels are documented on the official JMDict page. For other languages, find the part of speech tags in ext/js/language/{language}/{language}-transforms.js
under the conditions
label, for labels that aren't prefixed with "Intermediate".
The second item in the array of the tag bank schema determines the tag category, affecting the tag color in the user interface. The categories include:
- name
- expression
- popular
- frequent
- archaism
- dictionary
- frequency
- partOfSpeech
- search
- pronunciation-dictionary
- search
You can view the tag colors here.
If you have any questions, need help, or want to share a new dictionary, feel free to pop in the Yomitan Discord server. We're happy to help you get started!