An open Cantonese dictionary for iOS and Android built with Flutter
wordshk
words.hk dictionary for Android and iOS
![]()
Download
Setup
- Install Flutter by following the official doc: https://docs.flutter.dev/get-started/install
- Download and install Android Studio to develop for Android: https://developer.android.com/studio
- Start Android Studio, and go through the βAndroid Studio Setup Wizardβ. This installs the latest Android SDK, Android SDK Command-line Tools, and Android SDK Build-Tools, which are required by Flutter when developing for Android.
- Run
flutter doctorto confirm your installation is working. You should see some output like below.
[β] Flutter (Channel stable, 3.19.3, on Ubuntu 20.04.6 LTS 6.2.0-1019-azure, locale C.UTF-8)
[β] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
[β] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
...
[β] Linux toolchain - develop for Linux desktop
...
[!] Android Studio (not installed)
[β] Connected device (1 available)
[β] Network resources
If you want to build for iOS, you are required to use a Mac. You will need the latest version of Xcode as well.
- Run the
setup.shat the root of this project to install the Rust backend.
- Run
flutter runto run the app, or
flutter build appbundle to create an Android app bundle
* flutter build apk to build an Android APK
* flutter build ios to build for iOS
Notes:
- Build command for F-Droid (which forbids proprietary components like Google's MLKit):
flutter build appbundle --flavor foss - Build command for Huawei AppGallery (which forbids sensitive content):
flutter build appbundle --flavor huawei - Build command for Google Play Store (full version):
flutter build appbundle --flavor full
Release Checklist
- Bump app version in
pubspec.yaml - Open the wordshk-tools project and update the app version in
examples/exportsqlitedb/src/main.rs:
- api.exportdictassqlitedb(&dictpath, "{oldversion}")
+ api.exportdictassqlitedb(&dictpath, "{newversion}")
- Regenerate dictionary data with updated words.hk content
dict.db.gz:
cd exportsqlitedb/
cargo run --release
gzip app_tmp/dict.db
Copy the two files back to this project. Copy the dict.db.gz back to assets/.
- Generate TTS recordings for new sentences
dict.json by going to examples/exportjsondict and run cargo run --release
b. Copy the generated app_tmp/dict.json to project root
c. Generate TTS by going to tts/, activate conda environment conda activate wordshk, and run python tts.py
d. Upload newly generated audios to Alicloud OSS bucket by running python uploadtobucket.py
- Build iOS and Android binaries:
flutter clean
flutter pub get
cd ios/
pod install
cd ..
# Go to Xcode and Product -> Archive
flutter build appbundle --flavor full
- TAG the commit for F-droid.
Normalize jyutping syllable audios
- Open Adobe Audition, run the "Match Loudness" with these settings:
- Export the files with matched loudness
- Change directory into
assets/jyutpingfemaleorassets/jyutpingmale.
- Run
process_audios.sh. This script does three things:
Legal
Software: Copyright (C) 2022 Xiang Li, licensed under the MIT license. Dictionary: Copyright (C) 2014-2022 Hong Kong Lexicography Limited.
"words.hk", "wordshk", "η²΅ε Έ" are trade names of Hong Kong Lexicography Limited. Permission by Hong Kong Lexicography Limited must be obtained to promote or distribute materials containing these names. In particular, notwithstanding any permission (if applicable) to redistribute the source code of this project and/or its derivative works by the copyright owner(s), unless you obtain explicit permission from Hong Kong Lexicography Limited, you are required to remove all mentions of "words.hk", "wordshk", "η²΅ε Έ" from your redistributions.
The dictionary contents published by words.hk is copyrighted by Hong Kong Lexicography Limited. You may be eligible to obtain a license from https://words.hk/base/hoifong/


