Repository: joke2k/faker

Issue:
New feature: language_name
Hi. I want to add a new method that would return random language name (e.g. English, Spanish, Dutch). I'm not sure where I should place this method. Initially I wanted to add this to BaseProvider near the language_code method, but this provider has no locale support.
Any thoughts?

Discussion:
fcurella: Thank you! ✨ 

Patch:
diff --git a/faker/providers/person/__init__.py b/faker/providers/person/__init__.py
index 05ecb61a..f19f9f71 100644
--- a/faker/providers/person/__init__.py
+++ b/faker/providers/person/__init__.py
@@ -10,6 +10,42 @@ class Provider(BaseProvider):
 
     last_names = ['Doe']
 
+    # https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
+    language_names = [
+        'Afar', 'Abkhazian', 'Avestan', 'Afrikaans', 'Akan', 'Amharic',
+        'Aragonese', 'Arabic', 'Assamese', 'Avaric', 'Aymara', 'Azerbaijani',
+        'Bashkir', 'Belarusian', 'Bulgarian', 'Bihari languages', 'Bislama',
+        'Bambara', 'Bengali', 'Tibetan', 'Breton', 'Bosnian', 'Catalan',
+        'Chechen', 'Chamorro', 'Corsican', 'Cree', 'Czech', 'Church Slavic',
+        'Chuvash', 'Welsh', 'Danish', 'German', 'Divehi', 'Dzongkha', 'Ewe',
+        'Greek', 'English', 'Esperanto', 'Spanish', 'Estonian', 'Basque',
+        'Persian', 'Fulah', 'Finnish', 'Fijian', 'Faroese', 'French',
+        'Western Frisian', 'Irish', 'Gaelic', 'Galician', 'Guarani',
+        'Gujarati', 'Manx', 'Hausa', 'Hebrew', 'Hindi', 'Hiri Motu',
+        'Croatian', 'Haitian', 'Hungarian', 'Armenian', 'Herero',
+        'Interlingua', 'Indonesian', 'Interlingue', 'Igbo', 'Sichuan Yi',
+        'Inupiaq', 'Ido', 'Icelandic', 'Italian', 'Inuktitut', 'Japanese',
+        'Javanese', 'Georgian', 'Kongo', 'Kikuyu', 'Kuanyama', 'Kazakh',
+        'Kalaallisut', 'Central Khmer', 'Kannada', 'Korean', 'Kanuri',
+        'Kashmiri', 'Kurdish', 'Komi', 'Cornish', 'Kirghiz', 'Latin',
+        'Luxembourgish', 'Ganda', 'Limburgan', 'Lingala', 'Lao', 'Lithuanian',
+        'Luba-Katanga', 'Latvian', 'Malagasy', 'Marshallese', 'Maori',
+        'Macedonian', 'Malayalam', 'Mongolian', 'Marathi', 'Malay', 'Maltese',
+        'Burmese', 'Nauru', 'North Ndebele', 'Nepali',
+        'Ndonga', 'Dutch', 'Norwegian Nynorsk', 'Norwegian', 'South Ndebele',
+        'Navajo', 'Chichewa', 'Occitan', 'Ojibwa', 'Oromo', 'Oriya',
+        'Ossetian', 'Panjabi', 'Pali', 'Polish', 'Pushto', 'Portuguese',
+        'Quechua', 'Romansh', 'Rundi', 'Romanian', 'Russian', 'Kinyarwanda',
+        'Sanskrit', 'Sardinian', 'Sindhi', 'Northern Sami', 'Sango', 'Sinhala',
+        'Slovak', 'Slovenian', 'Samoan', 'Shona', 'Somali', 'Albanian',
+        'Serbian', 'Swati', 'Sotho, Southern', 'Sundanese', 'Swedish',
+        'Swahili', 'Tamil', 'Telugu', 'Tajik', 'Thai', 'Tigrinya', 'Turkmen',
+        'Tagalog', 'Tswana', 'Tonga', 'Turkish', 'Tsonga', 'Tatar', 'Twi',
+        'Tahitian', 'Uighur', 'Ukrainian', 'Urdu', 'Uzbek', 'Venda',
+        'Vietnamese', 'Walloon', 'Wolof', 'Xhosa', 'Yiddish',
+        'Yoruba', 'Zhuang', 'Chinese', 'Zulu',
+    ]
+
     def name(self):
         """
         :example 'John Doe'
@@ -96,3 +132,7 @@ class Provider(BaseProvider):
         if hasattr(self, 'suffixes_female'):
             return self.random_element(self.suffixes_female)
         return self.suffix()
+
+    def language_name(self):
+        """Generate a random i18n language name (e.g. English)."""
+        return self.random_element(self.language_names)
diff --git a/faker/providers/person/ru_RU/__init__.py b/faker/providers/person/ru_RU/__init__.py
index b122f32c..44e213cd 100644
--- a/faker/providers/person/ru_RU/__init__.py
+++ b/faker/providers/person/ru_RU/__init__.py
@@ -272,6 +272,35 @@ class Provider(PersonProvider):
 
     middle_names = middle_names_male + middle_names_female
 
+    language_names = (
+        'Афарский', 'Абхазский', 'Авестийский', 'Африкаанс', 'Акан',
+        'Амхарский', 'Арагонский', 'Арабский', 'Ассамский', 'Аварский',
+        'Аймарский', 'Азербайджанский', 'Башкирский', 'Белорусский',
+        'Болгарский', 'Бислама', 'Бенгальский', 'Тибетский', 'Бретонский',
+        'Боснийский', 'Каталанский', 'Чеченский', 'Чаморро', 'Корсиканский',
+        'Кри', 'Чешский', 'Чувашский', 'Валлийский', 'Датский', 'Немецкий',
+        'Греческий', 'Английский', 'Эсперанто', 'Испанский', 'Эстонский',
+        'Персидский', 'Финский', 'Фиджийский', 'Фарси', 'Французский',
+        'Ирландский', 'Гэльский', 'Галийский', 'Иврит', 'Хинди',
+        'Хорватский', 'Гавайский', 'Болгарский', 'Армянский',
+        'Индонезийский', 'Исландский', 'Итальянский', 'Японский',
+        'Яванский', 'Грузинский', 'Казахский', 'Корейский', 'Кашмири',
+        'Курдский', 'Коми', 'Киргизский', 'Латинский', 'Люксембургский',
+        'Лимбургский', 'Лингала', 'Лаосский', 'Литовский', 'Латвийский',
+        'Малагасийский', 'Маршалльский', 'Маори', 'Македонский', 'Малаялам',
+        'Монгольский', 'Маратхи', 'Малайский', 'Мальтийский', 'Непальский',
+        'Нидерландский', 'Норвежский', 'Навахо', 'Оромо', 'Ория',
+        'Осетинский', 'Пали', 'Польский', 'Пушту', 'Португальский',
+        'Романшский', 'Румынский', 'Русский', 'Киньяруанда',
+        'Санскрит', 'Сардинский', 'Санго', 'Сингальский',
+        'Словацкий', 'Словенский', 'Самоанский', 'Сомалийский', 'Албанский',
+        'Сербский', 'Сунданский', 'Шведский', 'Суахили', 'Тамильский',
+        'Телугу', 'Таджикский', 'Тайский', 'Тигринья', 'Туркменский',
+        'Тагальский', 'Тсвана', 'Тонга', 'Турецкий', 'Тсонга', 'Татарский',
+        'Таитянский', 'Уйгурский', 'Украинский', 'Урду', 'Узбекский', 'Венда',
+        'Вьетнамский', 'Идиш', 'Йоруба', 'Китайский', 'Зулу',
+    )
+
     prefixes_male = ('г-н', 'тов.')
 
     prefixes_female = ('г-жа', 'тов.')


Test patch:
diff --git a/tests/providers/test_person.py b/tests/providers/test_person.py
index cbcb28bf..6a114d60 100644
--- a/tests/providers/test_person.py
+++ b/tests/providers/test_person.py
@@ -594,3 +594,7 @@ class TestRuRU(unittest.TestCase):
         assert middle_name in RuProvider.middle_names_male
         last_name = self.fake.last_name_male()
         assert last_name in RuProvider.last_names_male
+
+    def test_language_name(self):
+        language_name = self.fake.language_name()
+        assert language_name in RuProvider.language_names