feat(dictionary): characters of Chinese, Korean and Greek, written by hand; pinyin typed

Parity with Japanese's kanji and kana:

- The characters' tab is named by its language (Hanzi, Hangul & Hanja,
  Alphabet), its groups too: HSK levels and the characters in common use
  (Hong Kong's grades for traditional ones); Hangul and the Hanja taught
  in schools; Greek's letters. Radicals for Chinese and Korean in their
  own forms (讠 for 言 in simplified Chinese), none for Greek.
- A character's readings are named as its language names them: On and
  Kun, Pinyin, Eum and Hun (음, 훈); a letter means its sound and name.
- How characters are written comes by language: Chinese from Make Me a
  Hanzi (its medians in KanjiVG's square, Arphic Public License, a data
  file beside the app, never in cards), the Hangul letters drawn by the
  curator; a Korean word is written letter by letter (닭: ㄷ ㅏ ㄺ). Words
  of alphabets (German, Greek) aren't written by hand.
- A Chinese word's pinyin is typed in a session, tone numbers turning
  into marks (ni3 → nǐ); KRDict's levels (초급, 중급, 고급) tag Korean
  words; a Korean word's pronunciation shows in brackets ([가치]).
- Smaller: Look up in the composer keeps a noun's article; the Watch
  filter names its level list; hints and placeholders by language.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-14 12:35:17 +02:00
commit 5479b973fc
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -2412,6 +2412,56 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get dictionaryTabCharacters => 'Kanji & kana';
@override
String get dictionaryTabCharactersChinese => 'Hanzi';
@override
String get dictionaryTabCharactersKorean => 'Hangul & Hanja';
@override
String get dictionaryTabCharactersGreek => 'Alphabet';
@override
String get dictionaryCharacterSearchHintChinese =>
'A character, its pinyin, or a meaning';
@override
String get dictionaryCharacterSearchHintKorean =>
'A Hanja or Hangul letter, its sound, or a meaning';
@override
String get dictionaryCharacterSearchHintGreek => 'A letter or its name';
@override
String get dictionaryGroupHsk => 'HSK levels';
@override
String get dictionaryGroupCommonCharacters => 'In common use';
@override
String get dictionaryGroupHongKongGrades => 'Hong Kong school grades';
@override
String get dictionaryGroupHangul => 'Hangul';
@override
String get dictionaryGroupEducationHanja => 'Hanja taught in schools';
@override
String get dictionaryGroupGreek => 'Letters';
@override
String get dictionaryLabelHangul => 'Hangul letters';
@override
String get dictionaryLabelEducationHanja => '1,800 basic Hanja';
@override
String get dictionaryLabelGreek => 'Greek alphabet';
@override
String get dictionaryLabelCommonCharacters => '3,500 common characters';
@override
String get dictionaryLabelHiragana => 'Hiragana';
@ -2561,14 +2611,14 @@ class AppLocalizationsEn extends AppLocalizations {
String get kanjiComponents => 'Components';
@override
String get studySettingsCharacters => 'Kanji & kana';
String get studySettingsCharacters => 'Characters';
@override
String get studySettingsWriteByHand => 'Write by hand';
@override
String get studySettingsWriteByHandDescription =>
'Kanji, kana and words are written stroke by stroke and checked as you go, on a schedule of their own. Words written aren\'t quizzed or typed.';
'Kanji, hanzi, Hanja, kana, Hangul and words written with them are written stroke by stroke and checked as you go, on a schedule of their own (a Korean word letter by letter). Words written aren\'t quizzed or typed.';
@override
String get writingHint => 'Hint';
@ -3031,6 +3081,57 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get characterKun => 'Kun';
@override
String get characterPinyin => 'Pinyin';
@override
String get characterEum => 'Eum';
@override
String get characterHun => 'Hun';
@override
String get characterPinyinReadings => 'Pinyin';
@override
String get characterPinyinReadingsHint =>
'With tone marks or numbers: shuǐ, shui3';
@override
String get characterEumReadings => 'Sounds (eum)';
@override
String get characterEumReadingsHint => 'Sino-Korean, in Hangul: 수';
@override
String get characterHunReadings => 'Native meanings (hun)';
@override
String get characterHunReadingsHint =>
'Korean words for its meaning, in Hangul: 물';
@override
String get characterPrimaryMeaningHintLetter =>
'Primary meaning, or a letter\'s sound';
@override
String get composerPlaceholderCharacterChinese => 'Add a character';
@override
String get composerPlaceholderCharacterKorean =>
'Add a Hanja or Hangul letter';
@override
String get composerPlaceholderCharacterGreek => 'Add a letter';
@override
String get vocabularyReadingHintPinyin =>
'Pinyin, with tone marks or numbers';
@override
String get vocabularyReadingHintPronunciation =>
'Pronunciation, where it differs from the spelling';
@override
String get matchingCategories => 'Categories';
@ -3521,11 +3622,14 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get studySettingsTypeReadingDescription =>
'Words with kanji ask for their reading, typed in kana; romaji turn into kana as you type.';
'Words with kanji ask for their reading, typed in kana (romaji turn into kana as you type); Chinese words for their pinyin (tone numbers turn into marks: ni3 becomes nǐ).';
@override
String get studyTypedHint => 'The reading, in kana or romaji';
@override
String get studyTypedHintPinyin => 'The pinyin, with tone numbers or marks';
@override
String get studyTypedRight => 'Right';
@ -3548,7 +3652,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get studySettingsAspectDescription =>
'What to recall — the meaning, the kana reading, or the expression itself (shown the meaning). Mixed varies meaning and reading per card; cards that can’t be quizzed stay a normal flip.';
'What to recall — the meaning, the reading (kana, pinyin), or the expression itself (shown the meaning). Mixed varies meaning and reading per card; cards that can’t be quizzed stay a normal flip.';
@override
String get studySortOldestFirst => 'Oldest first';
@ -6751,7 +6855,9 @@ class AppLocalizationsEn extends AppLocalizations {
String get watchFilterAll => 'All words';
@override
String get watchFilterNoLevel => 'No JLPT level';
String watchFilterNoLevel(String levels) {
return 'No $levels level';
}
@override
String get watchFilterClass => 'Word class';