šŸ“± GogenDex - a Handy iOS Reference for Japanese Name Origins of Pokemon

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.

GogenDex Splash Screen

The Problem

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.

The Idea

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!

GogenDex Demo GIF

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

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!

Future Work

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!