For a project I had been working on we needed to allow users to select the Languages that they could speak as part of a profile page. After a bit of research I found it difficult to find a comprehensive list of languages available in a format that could easily be used by Ruby.
Rails’ build in language files means that we’re all used to these shorthand prefixes like en to mean English. The issue was finding a nice list of all possible languages that could resolve to these codes. If we don’t take localised dialects into account such as en-gb or en-us then we can make use of the ISO standard list of languages housed in ISO-639-1 and ISO-639-3 for example.
After creating a script to compile these languages into a yml file that could easily be retrieved I launched this as a Ruby Gem that can be used in the following way:
all_languages = LanguageList::ALL_LANGUAGES # Finding a language based on its ISO-639-1 or ISO-639-3 code english = LanguageList::LanguageInfo.find('en') english.name.inspect #=> "English" english.iso_639_1.inspect #=> "en" english.iso_639_3.inspect #=> "eng"
The only thing left was to add some helpers to be able to retrieve a list of common languages. Rather than re-invent the wheel I found a list of common langauges on this website. The author has compiled the list of common languages based upon the list of langauges that Microsoft use and a Wikipedia page of common languages.
I then added a common? flag to these langauges allowing for the following:
all_languages = LanguageList::ALL_LANGUAGES common_languages = LanguageList::COMMON_LANGUAGES # Finding a language based on its ISO-639-1 or ISO-639-3 code english = LanguageList::LanguageInfo.find('en') english.name.inspect #> "English" english.iso_639_1.inspect #=> "en" english.iso_639_3.inspect #=> "eng" english.common? #=> true
I’m not 100% certain of the license of the ISO country list so use it at your own risk but any of the code I have created is released under the MIT license.
I am also sure that the datafile itself could be tweaked to include better names and punctuation so send any pull requests to the project on GitHub.