Skip to content

Simple Flutter app to learn Japanese writing systems Hiragana, Katakana and Kanji.

License

Notifications You must be signed in to change notification settings

krille-chan/fun-with-kanji

Repository files navigation

Fun With Kanji

Simple Flutter app to learn Japanese writing systems Hiragana, Katakana and Kanji.

With Fun With Kanji you are able to learn all common used Japanese characters. All starts with Hiragana, Katakana and their special cases and combinations. After this you learn the Kanji Radicals and then you are ready to start with the 2136 Jōyō-Kanji. You no longer need 4 different apps to learn them!

The app also contains a dictionary and a full-text search over all characters.

Fun With Kanji is open source under Mozilla Public License 2.0. Contributions and new translations are always welcome <3.

Screenshots:

Install:

Get it on F-Droid Get it on Google Play

Build:

Install Flutter and run with:

flutter run

Translate Kanji into more languages:

Import translator package and run this script:

import 'dart:io';

import 'package:translator/translator.dart';

void main() async {
  const language = 'de';
  for (var i = 1; i <= 8; i++) {
    print('Load Kanji Level $i');
    final radicalsFile = File('assets/data/kanji_level_$i.json');
    final radicals = jsonDecode(radicalsFile.readAsStringSync()) as List;

    final translator = GoogleTranslator();
    for (final radical in radicals) {
      final input = radical['meanings'].join(', ');
      print('Translate: ${radical['kanji']} (ID: ${radical['id']}) $input ...');
      try {
        final translated =
            await translator.translate(input, from: 'en', to: language);
        radical['meanings'] = translated.text.split(', ');
      } catch (e, s) {
        print('Translation failed! Stop here!');
        print(e);
        print(s);
        break;
      }
    }

    print('Write to output file...');
    final outputFile = File('assets/data/kanji_level_${i}_${language}.json');
    await outputFile.writeAsString(jsonEncode(radicals));
    print('Finished!');
  }
}