11 Apr 2025
Okay, so this is a super niche app, I admit. But itās been so useful to me as I play through the mainline pokemon games in Japanese.
If you know me at all, you know Iāve been learning Japanese for a long time now. It started 11 years ago when I met my wife, who is half-Japanese. Since then weāve visited Japan a few times, and Iāve always loved spending time with her Japanese family. However, the language barrier is real! Even after 10 years, I still struggle, a lot, with the language - especially with vocabulary and comprehension speed.
In order to build up my skills, I like to immerse myself in the language daily, whether that be listening to podcasts in Japanese, reading books (like Harry Potter) in Japanese, or playing video games (my favorite immersion technique) in Japanese. About a year ago, I started playing the old pokemon games in Japanese - at this point Iāve finished Gen I (Letās go Pikachu), Gen II (Soul Silver), Gen III (Alpha Sapphire), and Pokemon Legends: Arceus. Iām currently going through Gen IV (Brilliant Diamond).
However, while the general language used in the mainline games is very easy, remembering the Japanese names of Pokemon is not. Think about the names in English. While itās obvious to a native speaker that Charmander is a combination of ācharā and āsalamanderā, this is not so obvious for a non-native speaker, especially one still learning the language.
So I had an idea - create an iOS app that allows you to quickly look up the Japanese origins of Pokemon names. And then I built it!
I call it GogenDex. āGogenā (čŖčØ) means āorigin of a word; deriviation of a word; etymologyā in Japanese so I thought it was fitting. āDexā obviously comes from PokeDex, since similar to the Pokedex, this app contains a reference entry for every pokemon - but the entry is just the name origin rather than stats, skills, etc.
As you can see in the splash image at the top of this post, I took the first character of āGogenā (čŖ) and made it look like a PokeDex. I thought it was pretty clever š.
Building the app didnāt take too long - just a week or so (using a framework called SwiftUI and an MVC architecture). The most time-consuming part, actually, was writing the entries for each pokemon. I sourced entries from sites like bulbapedia as well as Japanese sites providing info on name origins. However, I noticed that some entries were really long, needlessly convoluted, or just wrong in some cases. So I went through each entry one-by-one to revise it with the following rules:
I also had to make my app searchable. I added a search bar to the top and added logic so that you can:
I made it so you can search all of the above using romaji (English characters to write Japanese sounds), hiragana/katakana (Japanese characters), or using the English translation. You can also search by number (e.g. Bulbasaur = 1).
Apple provides methods that made this (suprisingly) easy to do. Here is a taste:
func filterPokemon() {
if searchQuery.isEmpty {
filteredPokemon = allPokemon
} else {
let katakanaSearchQuery1 = searchQuery.applyingTransform(.latinToKatakana, reverse: false) ?? ""
let katakanaSearchQuery2 = searchQuery.applyingTransform(.hiraganaToKatakana, reverse: false) ?? ""
let hiraganaSearchQuery1 = searchQuery.applyingTransform(.latinToHiragana, reverse: false) ?? ""
let hiraganaSearchQuery2 = searchQuery.applyingTransform(.hiraganaToKatakana, reverse: true) ?? ""
filteredPokemon = allPokemon.filter {
$0.id == convertToInt(string: searchQuery) ||
$0.name.localizedStandardContains(searchQuery) ||
$0.englishName.localizedStandardContains(searchQuery) ||
$0.pokemonType.localizedStandardContains(searchQuery) ||
$0.originDescription.localizedStandardContains(searchQuery) ||
$0.name.localizedStandardContains(katakanaSearchQuery1) ||
$0.pokemonType.localizedStandardContains(katakanaSearchQuery1) ||
$0.originDescription.localizedStandardContains(katakanaSearchQuery1) ||
$0.name.localizedStandardContains(katakanaSearchQuery2) ||
$0.pokemonType.localizedStandardContains(katakanaSearchQuery2) ||
$0.originDescription.localizedStandardContains(katakanaSearchQuery2) ||
$0.pokemonType.localizedStandardContains(hiraganaSearchQuery1) ||
$0.originDescription.localizedStandardContains(hiraganaSearchQuery1) ||
$0.pokemonType.localizedStandardContains(hiraganaSearchQuery2) ||
$0.originDescription.localizedStandardContains(hiraganaSearchQuery2)
}
}
}
There is a lot of other work I had to do that I wonāt go into here (data cleaning, UI navigation, background colors, etc.), but after just a week or so, I had an app that did exactly what I set out to do!
For the past year, Iāve used GogenDex on my phone while playing through the mainline Pokemon games. Itās proved super useful and has also inspired me to make a few tweaks here and there. I figured it might also be useful to the broader Japanese learning community, so I plan to now polish it up and submit it to the App Store within the next month or so.
Whatās left on the TODO list? Well..
I plan on making the app entirely free (no ads, no in-app purchases, no nothing), mainly because I donāt think itād make a ton of money anyway - itās only useful to a very niche community of people. I also like to think of this as a small way to give back to the online Japanese language learning community, which Iāve interacted with quite a bit across different platforms (reddit, Natively, WaniKani, etc.) and learned so much from.
Anyway, thatās it for today - look out for my next post, where I (hopefully) will have released GogenDex on the App Store!