https://github.com/esnaultdev/wanakana-kt
Kotlin port of WanaKana, a library for detecting and transliterating Hiragana <--> Katakana <--> Romaji
https://github.com/esnaultdev/wanakana-kt
japanese kotlin wanakana
Last synced: 4 months ago
JSON representation
Kotlin port of WanaKana, a library for detecting and transliterating Hiragana <--> Katakana <--> Romaji
- Host: GitHub
- URL: https://github.com/esnaultdev/wanakana-kt
- Owner: esnaultdev
- License: mit
- Created: 2020-12-26T09:18:11.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2021-05-15T12:25:19.000Z (about 5 years ago)
- Last Synced: 2025-05-13T13:46:57.745Z (about 1 year ago)
- Topics: japanese, kotlin, wanakana
- Language: Kotlin
- Homepage: https://esnaultdev.github.io/wanakana-kt/
- Size: 652 KB
- Stars: 19
- Watchers: 1
- Forks: 5
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-java - WanaKana Kt
README
ワナカナ <--> WanaKana <--> わなかな
Kotlin utility library for detecting and transliterating Hiragana, Katakana, and Romaji
Ported from [WaniKani/WanaKana][wanakana-repo] v4.0.2.
This library is written in Kotlin, but it can be used from Java.
## Demo
Visit the [website][wanakana-website] to see WanaKana in action (JS version).
Or use the demo Android app included in this repository: `./gradlew demo:installDebug`.
## Usage
```
// Android bindings
implementation 'dev.esnault.wanakana:wanakana-android:1.1.1'
// Conversion and detection
// You don't need to include this if you use wanakana-android.
implementation 'dev.esnault.wanakana:wanakana-core:1.1.1'
```
The artifacts are available on mavenCentral, make sure that your buildscript repositories include mavenCentral.
## Documentation
- [Index][docs-index]
- [Wanakana (core functions)][docs-wanakana]
- [WanakanaAndroid (Android bindings)][docs-wanakana-android]
## Quick Reference
### Android bindings
```kotlin
// Automatically converts text using a TextWatcher.
// Uses `toKanaIme()` as converter by default
val binding = WanakanaAndroid.bind(editText)
// Adds a listener for text updates.
binding.addListener(initialize = true) { convertedText -> /* Do something. */ }
// Turns off the conversion.
// Not needed for cleanup, you can ignore the binding safely.
binding.clear()
```
### Text conversion
```kotlin
Wanakana.toKana("ONAJI buttsuuji")
// => "オナジ ぶっつうじ"
Wanakana.toKana("座禅‘zazen’スタイル")
// => "座禅「ざぜん」スタイル"
Wanakana.toKana("batsuge-mu")
// => "ばつげーむ"
Wanakana.toHiragana("toukyou, オオサカ")
// => "とうきょう、 おおさか"
Wanakana.toHiragana("only カナ", passRomaji = true)
// => "only かな"
Wanakana.toHiragana("wi", useObsoleteKana = true)
// => "ゐ"
Wanakana.toKatakana("toukyou, おおさか")
// => "トウキョウ、 オオサカ"
Wanakana.toKatakana("only かな", passRomaji = true)
// => "only カナ"
Wanakana.toKatakana("wi", useObsoleteKana = true)
// => "ヰ"
Wanakana.toRomaji("ひらがな カタカナ")
// => "hiragana katakana"
Wanakana.toRomaji("ひらがな カタカナ", upcaseKatakana = true)
// => "hiragana KATAKANA"
```
### Text checking utilities
```kotlin
// Available for both Char and String.
// Extensions functions are also available.
Wanakana.isJapanese("泣き虫。!〜2¥zenkaku")
// => true
Wanakana.isKana("あーア")
// => true
Wanakana.isHiragana("すげー")
// => true
Wanakana.isKatakana("ゲーム")
// => true
Wanakana.isKanji("切腹")
// => true
Wanakana.isKanji("勢い")
// => false
Wanakana.isRomaji("Tōkyō and Ōsaka")
// => true
```
### Extra utilities
```kotlin
Wanakana.stripOkurigana("お祝い")
// => "お祝"
Wanakana.stripOkurigana("踏み込む")
// => "踏み込"
Wanakana.stripOkurigana("お腹", leading = true)
// => "腹"
Wanakana.stripOkurigana("ふみこむ", matchKanji = "踏み込む")
// => "ふみこ"
Wanakana.stripOkurigana("おみまい", matchKanji = "お祝い", leading = true)
// => "みまい"
Wanakana.tokenize("ふふフフ")
// => ["ふふ", "フフ"]
Wanakana.tokenize("hello 田中さん")
// => ["hello", " ", "田中", "さん"]
Wanakana.tokenize("I said 私はすごく悲しい", compact = true)
// => [ "I said ", "私はすごく悲しい"]
```
## Differences with Wanakana JS
| | Wakakana JS | Wanakana KT |
| ------------- | ------------- | ------------- |
| String detection | `false` if the input is empty | `true` if the input is empty
(matches the behavior of `String::all`) |
| Detailed tokenize | tokenize(input, { detailed: true }) | tokenizeWithType(input) |
Custom mappings are not implemented yet.
## Credits
Original JavaScript library sponsored by [Tofugu][tofugu] & [WaniKani][wanikani].
[wanakana-repo]: https://github.com/WaniKani/WanaKana
[wanakana-website]: http://www.wanakana.com
[wanikani]: http://www.wanikani.com
[tofugu]: http://www.tofugu.com
[docs-index]: https://esnaultdev.github.io/wanakana-kt/wanakana-core/index.html
[docs-wanakana]: https://esnaultdev.github.io/wanakana-kt/wanakana-core/wanakana-core/dev.esnault.wanakana.core/-wanakana/index.html
[docs-wanakana-android]: https://esnaultdev.github.io/wanakana-kt/wanakana-android/wanakana-android/dev.esnault.wanakana.android/-wanakana-android/index.html