├── MANIFEST.in ├── requirements.txt ├── word2word.gif ├── word2word ├── __init__.py ├── utils.py ├── methods.py ├── tokenization.py ├── word2word.py └── supporting_languages.txt ├── setup.py ├── .gitignore ├── make.py ├── README.md ├── google_grader.py └── LICENSE /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include word2word/supporting_languages.txt 2 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | requests 2 | wget 3 | numpy 4 | tqdm 5 | -------------------------------------------------------------------------------- /word2word.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakaobrain/word2word/HEAD/word2word.gif -------------------------------------------------------------------------------- /word2word/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | r"""word2word 3 | """ 4 | from __future__ import absolute_import 5 | 6 | from .word2word import Word2word 7 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | import setuptools 2 | 3 | with open("README.md", mode="r", encoding="utf-8") as fh: 4 | long_description = fh.read() 5 | 6 | REQUIRED_PACKAGES = [ 7 | 'requests', 8 | 'wget', 9 | 'numpy', 10 | 'tqdm', 11 | ] 12 | 13 | setuptools.setup( 14 | name="word2word", 15 | version="1.0.0", 16 | author="Kyubyong Park, Dongwoo Kim, Yo Joong Choe", 17 | author_email="kbpark.linguist@gmail.com, kimdwkimdw@gmail.com, yjchoe33@gmail.com", 18 | description="Easy-to-use word translations for 3,564 language pairs", 19 | install_requires=REQUIRED_PACKAGES, 20 | license='Apache License 2.0', 21 | long_description=long_description, 22 | long_description_content_type="text/markdown", 23 | url="https://github.com/kakaobrain/word2word", 24 | packages=setuptools.find_packages(), 25 | package_data={'word2word': ['word2word/supporting_languages.txt']}, 26 | python_requires=">=3.6", 27 | include_package_data=True, 28 | classifiers=[ 29 | 'Development Status :: 5 - Production/Stable', 30 | 'Intended Audience :: Developers', 31 | 'Intended Audience :: Science/Research', 32 | "License :: OSI Approved :: Apache Software License", 33 | "Operating System :: OS Independent", 34 | "Programming Language :: Python :: 3", 35 | 'Programming Language :: Python :: 3.6', 36 | 'Programming Language :: Python :: 3.7', 37 | ], 38 | ) 39 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | MANIFEST 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | .pytest_cache/ 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | local_settings.py 57 | db.sqlite3 58 | 59 | # Flask stuff: 60 | instance/ 61 | .webassets-cache 62 | 63 | # Scrapy stuff: 64 | .scrapy 65 | 66 | # Sphinx documentation 67 | docs/_build/ 68 | 69 | # PyBuilder 70 | target/ 71 | 72 | # Jupyter Notebook 73 | .ipynb_checkpoints 74 | 75 | # pyenv 76 | .python-version 77 | 78 | # celery beat schedule file 79 | celerybeat-schedule 80 | 81 | # SageMath parsed files 82 | *.sage.py 83 | 84 | # Environments 85 | .env 86 | .venv 87 | env/ 88 | venv/ 89 | ENV/ 90 | env.bak/ 91 | venv.bak/ 92 | 93 | # Spyder project settings 94 | .spyderproject 95 | .spyproject 96 | 97 | # Rope project settings 98 | .ropeproject 99 | 100 | # mkdocs documentation 101 | /site 102 | 103 | # mypy 104 | .mypy_cache/ 105 | 106 | # PyCharm 107 | .idea/ 108 | -------------------------------------------------------------------------------- /word2word/utils.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import platform 3 | import wget 4 | import requests 5 | import os 6 | import pickle 7 | from zipfile import ZipFile 8 | from os.path import expanduser 9 | 10 | 11 | def get_savedir(savedir=None): 12 | if savedir: 13 | os.makedirs(savedir, exist_ok=True) 14 | return savedir 15 | 16 | pf = platform.system() 17 | if pf == "Windows": 18 | savedir = "C:\word2word" 19 | else: 20 | homedir = expanduser("~") 21 | savedir = os.path.join(homedir, ".word2word") 22 | 23 | if not os.path.exists(savedir): 24 | os.makedirs(savedir, exist_ok=True) 25 | return savedir 26 | 27 | 28 | def exists(path): 29 | r = requests.head(path) 30 | return r.status_code == requests.codes.ok 31 | 32 | 33 | def get_download_url(lang1, lang2): 34 | filepath = os.path.dirname(os.path.abspath(__file__)) + '/supporting_languages.txt' 35 | for line in open(filepath, 'r'): 36 | l1, l2 = line.strip().split("-") 37 | if lang1 == l1 and lang2 == l2: 38 | return f"https://mk.kakaocdn.net/dn/kakaobrain/word2word/{lang1}-{lang2}.pkl" 39 | raise Exception(f"Language pair {lang1}-{lang2} is not supported.") 40 | 41 | 42 | def download_or_load(lang1, lang2, custom_savedir): 43 | savedir = get_savedir(savedir=custom_savedir) 44 | fpath = os.path.join(savedir, f"{lang1}-{lang2}.pkl") 45 | if not os.path.exists(fpath): 46 | # download from cloud 47 | url = get_download_url(lang1, lang2) 48 | if url is None: 49 | raise ValueError(f"Dataset not found for {lang1}-{lang2}.") 50 | 51 | if not exists(url): 52 | raise ValueError("Sorry. There seems to be a problem with cloud access.") 53 | 54 | print("Downloading data ...") 55 | wget.download(url, fpath) 56 | word2x, y2word, x2ys = pickle.load(open(fpath, 'rb')) 57 | return word2x, y2word, x2ys 58 | 59 | 60 | def download_os2018(lang1, lang2): 61 | """Download corpora from OpenSubtitles2018. 62 | 63 | :return (lang1_file, lang2_file) 64 | """ 65 | datadir = "data" 66 | filepref = f"OpenSubtitles.{lang1}-{lang2}" 67 | if all(os.path.exists(os.path.join(datadir, f"{filepref}.{lang}")) 68 | for lang in [lang1, lang2]): 69 | print(f"Found existing {filepref} files. loading...") 70 | else: 71 | # Download and unzip parallel corpus 72 | url = f"http://opus.nlpl.eu/download.php?f=OpenSubtitles/v2018/moses/{lang1}-{lang2}.txt.zip" 73 | zipname = os.path.join(datadir, f"{lang1}-{lang2}.txt.zip") 74 | print(f"Downloading {filepref}...") 75 | wget.download(url, zipname) 76 | with ZipFile(zipname) as zf: 77 | for fname in zf.namelist(): 78 | if fname.startswith(filepref): 79 | zf.extract(fname, datadir) 80 | os.remove(zipname) 81 | lang1_file, lang2_file = [ 82 | os.path.abspath(os.path.join(datadir, f"{filepref}.{lang}")) 83 | for lang in [lang1, lang2] 84 | ] 85 | return lang1_file, lang2_file 86 | -------------------------------------------------------------------------------- /make.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | r""" 3 | A command line script for building a word2word bilingual lexicon. 4 | 5 | By default, builds from a (downloaded) OpenSubtitles2018 dataset; 6 | also supports building from a custom parallel corpus. 7 | 8 | Usage: 9 | # Build with OpenSubtitles2018 10 | python make.py --lang1 en --lang2 es 11 | # Save files to a custom location (also see Word2word.load) 12 | python make.py --lang1 ko --lang2 en --savedir ko-en.w2w 13 | # Build with a custom dataset 14 | python make.py --lang1 en --lang2 fr --datapref data/pubmed.en-fr 15 | 16 | Authors: 17 | Kyubyong Park (kbpark.linguist@gmail.com), YJ Choe (yjchoe33@gmail.com), Dongwoo Kim (kimdwkimdw@gmail.com) 18 | """ 19 | 20 | import argparse 21 | 22 | from word2word import Word2word 23 | 24 | 25 | def main(): 26 | parser = argparse.ArgumentParser() 27 | parser.add_argument('--lang1', type=str, required=True, 28 | help="ISO 639-1 code of language. " 29 | "See `http://opus.nlpl.eu/OpenSubtitles2018.php`") 30 | parser.add_argument('--lang2', type=str, required=True, 31 | help="ISO 639-1 code of language. " 32 | "See `http://opus.nlpl.eu/OpenSubtitles2018.php`") 33 | parser.add_argument('--datapref', type=str, default=None, 34 | help="data prefix to a custom parallel corpus. " 35 | "builds a bilingual lexicon using OpenSubtitles2018 " 36 | "unless this option is provided.") 37 | parser.add_argument('--n_lines', type=int, default=100000000, 38 | help="number of parallel sentences used") 39 | parser.add_argument('--cutoff', type=int, default=5000, 40 | help="number of words that are used in calculating collocates within each language") 41 | parser.add_argument('--rerank_width', default=100, type=int, 42 | help="maximum number of target-side collocates considered for reranking") 43 | parser.add_argument('--rerank_impl', default="multiprocessing", type=str, 44 | help="choice of reranking implementation: simple, multiprocessing (default)") 45 | parser.add_argument('--cased', dest="cased", action="store_true", 46 | help="Keep the case.") 47 | parser.add_argument('--n_translations', type=int, default=10, 48 | help="number of final word2word translations kept") 49 | parser.add_argument('--save_cooccurrence', dest="save_cooccurrence", action="store_true", 50 | help="Save the cooccurrence results") 51 | parser.add_argument('--save_pmi', dest="save_pmi", action="store_true", 52 | help="Save the pmi results") 53 | parser.add_argument('--savedir', type=str, default=None, 54 | help="location to store bilingual lexicons." 55 | "make sure to use this input when loading from " 56 | "a custom-bulit lexicon.") 57 | parser.add_argument('--num_workers', default=16, type=int, 58 | help="number of workers used for multiprocessing") 59 | args = parser.parse_args() 60 | 61 | Word2word.make(**vars(args)) 62 | 63 | 64 | if __name__ == "__main__": 65 | main() 66 | -------------------------------------------------------------------------------- /word2word/methods.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | """ 4 | word2word/methods.py: bilingual lexicon extraction methods 5 | 6 | Speed comparison using OpenSubtitles.en-eo (64,485 sentences): 7 | - rerank (single process): 105s 8 | - rerank_mp (multiprocessing), 8 CPUs: 33s (3.2x faster) 9 | - rerank_mp (multiprocessing), 16 CPUs: 26s (4.0x faster) 10 | - rerank_mp (multiprocessing), 32 CPUs: 47s (2.2x faster) 11 | 12 | Optimal number of CPUs may differ depending on corpus size. 13 | """ 14 | 15 | import itertools as it 16 | import numpy as np 17 | import operator 18 | from tqdm import tqdm 19 | 20 | 21 | def rerank(x2ys, x2cnt, x2xs, width, n_trans): 22 | """Re-rank word translations by computing CPE scores. 23 | 24 | See paper for details about the CPE method.""" 25 | x2ys_cpe = dict() 26 | for x, ys in tqdm(x2ys.items()): 27 | cntx = x2cnt[x] 28 | y_scores = [] 29 | for y, cnty in sorted(ys.items(), key=operator.itemgetter(1), reverse=True)[:width]: 30 | ts = cnty / float(cntx) # translation score: initial value 31 | if x in x2xs: 32 | for x2, cntx2 in x2xs[x].items(): # Collocates 33 | p_x_x2 = cntx2 / float(cntx) 34 | p_x2_y2 = 0 35 | if x2 in x2ys: 36 | p_x2_y2 = x2ys[x2].get(y, 0) / float(x2cnt[x2]) 37 | ts -= (p_x_x2 * p_x2_y2) 38 | y_scores.append((y, ts)) 39 | _ys_ = sorted(y_scores, key=lambda y_score: y_score[1], reverse=True)[:n_trans] 40 | _ys_ = [each[0] for each in _ys_] 41 | x2ys_cpe[x] = _ys_ 42 | 43 | return x2ys_cpe 44 | 45 | 46 | def _rerank_mp(x_and_ys, shared_inputs): 47 | """Internal multiprocessing function for `rerank_fast()`.""" 48 | x, ys = x_and_ys 49 | x2ys, x2cnt, x2xs, width, n_trans = shared_inputs 50 | 51 | sorted_ys = sorted(ys.items(), 52 | key=operator.itemgetter(1), 53 | reverse=True)[:width] 54 | if x not in x2xs: 55 | return x, [y for y, score in sorted_ys[:n_trans]] 56 | 57 | def _correction(y): 58 | return sum( 59 | cntx2 * x2ys[x2][y] / float(x2cnt[x2]) 60 | for x2, cntx2 in x2xs[x].items() if x2 in x2ys and y in x2ys[x2] 61 | ) 62 | 63 | y_scores = [(y, cnty - _correction(y)) for y, cnty in sorted_ys] 64 | y_scores = sorted(y_scores, key=operator.itemgetter(1), reverse=True) 65 | reranked_ys = [y for y, score in y_scores[:n_trans]] 66 | return x, reranked_ys 67 | 68 | 69 | def rerank_mp(x2ys, x2cnt, x2xs, width, n_trans, num_workers): 70 | """Re-rank word translations by computing CPE scores. 71 | 72 | Uses multiprocessing to speed up computation (significantly). 73 | In Python 3.8+, shared_inputs can be implemented directly as shared_memory. 74 | 75 | See paper for details about the CPE method.""" 76 | from multiprocessing import Pool 77 | 78 | shared_inputs = x2ys, x2cnt, x2xs, width, n_trans 79 | print(f"Entering multiprocessing with {num_workers} workers..." 80 | f" (#words={len(x2ys)})") 81 | with Pool(num_workers) as p: 82 | x2ys_cpe = dict(p.starmap( 83 | _rerank_mp, 84 | zip(x2ys.items(), it.repeat(shared_inputs)), 85 | )) 86 | return x2ys_cpe 87 | 88 | 89 | def get_trans_co(x2ys, n_trans): 90 | """Use co-occurrences to compute scores.""" 91 | x2ys_co = dict() 92 | for x, ys in x2ys.items(): 93 | ys = [y for y, cnt in sorted(ys.items(), key=operator.itemgetter(1), reverse=True)[:n_trans]] 94 | x2ys_co[x] = ys 95 | return x2ys_co 96 | 97 | 98 | def get_trans_pmi(x2ys, x2cnt, y2cnt, Nxy, Nx, Ny, width, n_trans): 99 | """Use pointwise mutual information to compute scores.""" 100 | x2ys_pmi = dict() 101 | pmi_diff = -np.log2(Nxy) + np.log2(Nx) + np.log2(Ny) 102 | for x, ys in tqdm(x2ys.items()): 103 | l_scores = [] 104 | for y, cnt in sorted(ys.items(), key=operator.itemgetter(1), 105 | reverse=True)[:width]: 106 | pmi = np.log2(cnt) - np.log2(x2cnt[x]) - np.log2(y2cnt[y]) 107 | pmi += pmi_diff 108 | l_scores.append((y, pmi)) 109 | trans = sorted(l_scores, key=operator.itemgetter(1, 0), reverse=True)[:n_trans] 110 | trans = [each[0] for each in trans] 111 | x2ys_pmi[x] = trans 112 | 113 | return x2ys_pmi 114 | -------------------------------------------------------------------------------- /word2word/tokenization.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from collections import Counter, defaultdict 4 | from itertools import chain, islice, product, repeat 5 | from multiprocessing import Pool 6 | import operator 7 | import re 8 | from tqdm import tqdm 9 | 10 | 11 | def load_tokenizer(lang): 12 | if lang == "ko": 13 | from konlpy.tag import Mecab 14 | tokenizer = Mecab() 15 | elif lang == "ja": 16 | import Mykytea 17 | opt = "-model jp-0.4.7-1.mod" 18 | tokenizer = Mykytea.Mykytea(opt) 19 | elif lang == "zh_cn": 20 | import Mykytea 21 | opt = "-model ctb-0.4.0-1.mod" 22 | tokenizer = Mykytea.Mykytea(opt) 23 | elif lang == "zh_tw": 24 | import jieba 25 | tokenizer = jieba 26 | elif lang == "vi": 27 | from pyvi import ViTokenizer 28 | tokenizer = ViTokenizer 29 | elif lang == "th": 30 | from pythainlp.tokenize import word_tokenize 31 | tokenizer = word_tokenize 32 | elif lang == "ar": 33 | import pyarabic.araby as araby 34 | tokenizer = araby 35 | # elif lang=="en": 36 | # from nltk import word_tokenize 37 | # tokenizer = word_tokenize 38 | else: 39 | from nltk.tokenize import ToktokTokenizer 40 | tokenizer = ToktokTokenizer() 41 | 42 | return tokenizer 43 | 44 | 45 | def word_segment(sent, lang, tokenizer): 46 | if lang == 'ko': 47 | words = [word for word, _ in tokenizer.pos(sent)] 48 | elif lang == 'ja': 49 | words = [elem for elem in tokenizer.getWS(sent)] 50 | elif lang == 'th': 51 | words = tokenizer(sent, engine='mm') 52 | elif lang == 'vi': 53 | words = tokenizer.tokenize(sent).split() 54 | elif lang == 'zh_cn': 55 | words = [elem for elem in tokenizer.getWS(sent)] 56 | elif lang == "zh_tw": 57 | words = list(tokenizer.cut(sent, cut_all=False)) 58 | elif lang == "ar": 59 | words = tokenizer.tokenize(sent) 60 | # elif lang=="en": 61 | # words = tokenizer(sent) 62 | else: # Most european languages 63 | sent = re.sub("([A-Za-z])(\.[ .])", r"\1 \2", sent) 64 | words = tokenizer.tokenize(sent) 65 | 66 | return words 67 | 68 | 69 | def process_line(line, lang, tokenizer, cased): 70 | """Strip, uncase (optionally), and tokenize line. 71 | 72 | multiprocessing helper for get_sents().""" 73 | line = line.strip() if cased else line.strip().lower() 74 | return word_segment(line, lang, tokenizer) 75 | 76 | 77 | def get_sents(fin, lang, tokenizer, cased, n_lines, num_workers=8): 78 | """Load parallel corpus and segment words using multiprocessing.""" 79 | 80 | with open(fin, encoding='utf-8') as f: 81 | lines = islice(f, n_lines) 82 | if num_workers <= 1: 83 | return [process_line(line, lang, tokenizer, cased) 84 | for line in lines] 85 | else: 86 | print(f"Entering multiprocessing with {num_workers} workers...") 87 | with Pool(num_workers) as p: 88 | return p.starmap( 89 | process_line, 90 | zip(lines, repeat(lang), repeat(tokenizer), repeat(cased)) 91 | ) 92 | 93 | 94 | def get_vocab(sents): 95 | word2idx, idx2word, idx2cnt = dict(), dict(), dict() 96 | 97 | word2cnt = Counter(tqdm(list(chain.from_iterable(sents)))).most_common() 98 | word2cnt.sort(key=operator.itemgetter(1, 0), reverse=True) 99 | for idx, (word, cnt) in enumerate(tqdm(word2cnt)): 100 | word2idx[word] = idx 101 | idx2word[idx] = word 102 | idx2cnt[idx] = cnt 103 | 104 | return word2idx, idx2word, idx2cnt 105 | 106 | 107 | def update_dicts(sents1, sents2, vocab1, vocab2, cutoff): 108 | """Get monolingual and cross-lingual count dictionaries. 109 | 110 | 'cutoff' determines how many collocates are considered in each language. 111 | """ 112 | 113 | def u2_iter(t1, t2, same_ignore=False, cut_t2=None): 114 | for _ in product(t1, t2): 115 | if (not same_ignore or _[0] != _[1]) and (not cut_t2 or _[1] < cut_t2): 116 | yield _ 117 | 118 | def build_ddi(): 119 | return defaultdict(lambda: defaultdict(int)) 120 | 121 | x_x_dict = build_ddi() 122 | y_y_dict = build_ddi() 123 | x_y_dict = build_ddi() 124 | y_x_dict = build_ddi() 125 | 126 | for sent1, sent2 in tqdm(zip(sents1, sents2), total=len(sents1)): 127 | xs = [vocab1[wx] for wx in sent1 if wx in vocab1] 128 | ys = [vocab2[wy] for wy in sent2 if wy in vocab2] 129 | 130 | for xx1, xx2 in u2_iter(xs, xs, same_ignore=True, cut_t2=cutoff): 131 | x_x_dict[xx1][xx2] += 1 132 | for yy1, yy2 in u2_iter(ys, ys, same_ignore=True, cut_t2=cutoff): 133 | y_y_dict[yy1][yy2] += 1 134 | for xx, yy in u2_iter(xs, ys, same_ignore=False): 135 | x_y_dict[xx][yy] += 1 136 | y_x_dict[yy][xx] = x_y_dict[xx][yy] 137 | 138 | # convert to ordinary dicts for pickling 139 | def ddi2dict(ddi): 140 | return {k: dict(v) for k, v in ddi.items()} 141 | 142 | return tuple(ddi2dict(ddi) 143 | for ddi in [x_x_dict, y_y_dict, x_y_dict, y_x_dict]) 144 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![image](https://img.shields.io/pypi/v/word2word.svg)](https://pypi.org/project/word2word/) 2 | [![image](https://img.shields.io/pypi/l/word2word.svg)](https://pypi.org/project/word2word/) 3 | [![image](https://img.shields.io/pypi/pyversions/word2word.svg)](https://pypi.org/project/word2word/) 4 | [![image](https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg)](https://saythanks.io/to/kimdwkimdw) 5 | 6 | # word2word 7 | 8 | Easy-to-use word translations for 3,564 language pairs. 9 | 10 | This is the official code accompanying [our LREC 2020 paper](https://arxiv.org/abs/1911.12019). 11 | 12 | ## Summary 13 | 14 | * A large collection of freely & publicly available bilingual lexicons 15 | **for 3,564 language pairs across 62 unique languages.** 16 | * Easy-to-use Python interface for accessing top-k word translations and 17 | for building a new bilingual lexicon from a custom parallel corpus. 18 | * Constructed using a simple approach that yields bilingual lexicons with 19 | high coverage and competitive translation quality. 20 | 21 | ## Usage 22 | 23 | First, install the package using `pip`: 24 | ```shell script 25 | pip install word2word 26 | ``` 27 | 28 | OR 29 | 30 | ```shell script 31 | git clone https://github.com/kakaobrain/word2word 32 | python setup.py install 33 | ``` 34 | 35 | Then, in Python, download the model and retrieve top-5 word translations 36 | of any given word to the desired language: 37 | ```python 38 | from word2word import Word2word 39 | en2fr = Word2word("en", "fr") 40 | print(en2fr("apple")) 41 | # out: ['pomme', 'pommes', 'pommier', 'tartes', 'fleurs'] 42 | ``` 43 | 44 | ![gif](./word2word.gif) 45 | 46 | ## Supported Languages 47 | 48 | We provide top-k word-to-word translations across all available pairs 49 | from [OpenSubtitles2018](http://opus.nlpl.eu/OpenSubtitles2018.php). 50 | This amounts to a total of 3,564 language pairs across 62 unique languages. 51 | 52 | The full list is provided [here](word2word/supporting_languages.txt). 53 | 54 | ## Methodology 55 | 56 | Our approach computes top-k word translations based on 57 | the co-occurrence statistics between cross-lingual word pairs in a parallel corpus. 58 | We additionally introduce a correction term that controls for any confounding effect 59 | coming from other source words within the same sentence. 60 | The resulting method is an efficient and scalable approach that allows us to 61 | construct large bilingual dictionaries from any given parallel corpus. 62 | 63 | For more details, see the Methodology section of [our paper](https://arxiv.org/abs/1911.12019). 64 | 65 | 66 | ## Building a Bilingual Lexicon on a Custom Parallel Corpus 67 | 68 | The `word2word` package also provides interface for 69 | building a custom bilingual lexicon using a different parallel corpus. 70 | Here, we show an example of building one from 71 | the [Medline English-French dataset](https://drive.google.com/drive/folders/0B3UxRWA52hBjQjZmYlRZWHQ4SUE): 72 | ```python 73 | from word2word import Word2word 74 | 75 | # custom parallel data: data/pubmed.en-fr.en, data/pubmed.en-fr.fr 76 | my_en2fr = Word2word.make("en", "fr", "data/pubmed.en-fr") 77 | # ...building... 78 | print(my_en2fr("mitochondrial")) 79 | # out: ['mitochondriale', 'mitochondriales', 'mitochondrial', 80 | # 'cytopathies', 'mitochondriaux'] 81 | ``` 82 | 83 | When built from source, the bilingual lexicon can also be constructed from the command line as follows: 84 | ```shell script 85 | python make.py --lang1 en --lang2 fr --datapref data/pubmed.en-fr 86 | ``` 87 | 88 | In both cases, the custom lexicon (saved to `datapref/` by default) can be re-loaded in Python: 89 | ```python 90 | from word2word import Word2word 91 | my_en2fr = Word2word.load("en", "fr", "data/pubmed.en-fr") 92 | # Loaded word2word custom bilingual lexicon from data/pubmed.en-fr/en-fr.pkl 93 | ``` 94 | 95 | ### Multiprocessing 96 | 97 | In both the Python interface and the command line interface, 98 | `make` uses multiprocessing with 16 CPUs by default. 99 | The number of CPU workers can be adjusted by setting 100 | `num_workers=N` (Python) or `--num_workers N` (command line). 101 | 102 | ## References 103 | 104 | If you use word2word for research, please cite [our paper](https://arxiv.org/abs/1911.12019): 105 | ```bibtex 106 | @inproceedings{choe2020word2word, 107 | author = {Yo Joong Choe and Kyubyong Park and Dongwoo Kim}, 108 | title = {word2word: A Collection of Bilingual Lexicons for 3,564 Language Pairs}, 109 | booktitle = {Proceedings of the 12th International Conference on Language Resources and Evaluation (LREC 2020)}, 110 | year = {2020} 111 | } 112 | ``` 113 | 114 | All of our pre-computed bilingual lexicons were constructed from the publicly available 115 | [OpenSubtitles2018](http://opus.nlpl.eu/OpenSubtitles2018.php) dataset: 116 | ```bibtex 117 | @inproceedings{lison-etal-2018-opensubtitles2018, 118 | title = "{O}pen{S}ubtitles2018: Statistical Rescoring of Sentence Alignments in Large, Noisy Parallel Corpora", 119 | author = {Lison, Pierre and 120 | Tiedemann, J{\"o}rg and 121 | Kouylekov, Milen}, 122 | booktitle = "Proceedings of the Eleventh International Conference on Language Resources and Evaluation ({LREC} 2018)", 123 | month = may, 124 | year = "2018", 125 | address = "Miyazaki, Japan", 126 | publisher = "European Language Resources Association (ELRA)", 127 | url = "https://www.aclweb.org/anthology/L18-1275", 128 | } 129 | ``` 130 | 131 | ## Authors 132 | 133 | [Kyubyong Park](https://github.com/Kyubyong), 134 | [Dongwoo Kim](https://github.com/kimdwkimdw), and 135 | [YJ Choe](https://github.com/yjchoe) 136 | 137 | -------------------------------------------------------------------------------- /google_grader.py: -------------------------------------------------------------------------------- 1 | import json 2 | import argparse 3 | from glob import glob 4 | from itertools import chain 5 | from collections import defaultdict 6 | 7 | import numpy as np 8 | 9 | 10 | def get_survey_summary_reference(survey_reference_base, l1, l2): 11 | # word, base, cpe, pmi 12 | basefile = survey_reference_base.format(l1, l2) 13 | rr = [] 14 | with open(glob(basefile)[-1], "r") as f: 15 | for line in f: 16 | item = line.strip() 17 | trans = {'baseline': f.readline().strip().split("\t"), 18 | 'cpe': f.readline().strip().split("\t"), 19 | 'pmi': f.readline().strip().split("\t"), 20 | } 21 | rr.append((item, trans)) 22 | 23 | return rr 24 | 25 | 26 | def convert_google_translate(item, level=2): 27 | ratings = ["Common translation", "Uncommon translation", "Rare translation"][:level] 28 | # Rare translation 29 | return [e[1].lower() for e in item['trans'] if e[0] in ratings] 30 | 31 | 32 | def get_google_translate(gt, l1, l2, level=2): 33 | basefile = gt.format(l1, l2) 34 | rr = [] 35 | with open(glob(basefile)[-1], "r") as f: 36 | for line in f: 37 | item = line.strip().split("\t") 38 | if len(item[0]) == 0: 39 | continue 40 | word = item[0] 41 | trans = json.loads(item[1]) 42 | 43 | main_trans = trans[0] 44 | sub_trans = list(chain.from_iterable([convert_google_translate(tt, level=level) for tt in trans[1:] 45 | if len(tt['trans']) > 0])) 46 | 47 | trans_dict = { 48 | "main": main_trans["trans"].lower(), 49 | "verified": main_trans["verified"], 50 | "subs": [word.lower() for word in sub_trans] 51 | } 52 | rr.append((word, trans_dict)) 53 | 54 | return rr 55 | 56 | 57 | language_map = { 58 | "ar": "Arabic", 59 | "en": "English", 60 | "es": "Spanish", 61 | "tr": "Turkish", 62 | "fr": "French", 63 | "fi": "Finnish", 64 | "de": "German", 65 | "zh-CN": "Chinese (Simplified)", 66 | "zh": "Chinese (Simplified)", 67 | "no": "Norwegian", 68 | "vi": "Vietnamese", 69 | "ms": "Malay", 70 | "ko": "Korean", 71 | "ja": "Japanese", 72 | "th": "Thai"} 73 | 74 | if __name__ == "__main__": 75 | 76 | parser = argparse.ArgumentParser() 77 | parser.add_argument('--l1', default='en', 78 | help="""ISO 639-1 code of target language. \n 79 | 'See `http://opus.lingfil.uu.se/OpenSubtitles2016.php`""") 80 | parser.add_argument('--l2', default='es', 81 | help="""ISO 639-1 code of target language. \n 82 | 'See `http://opus.lingfil.uu.se/OpenSubtitles2016.php`""") 83 | parser.add_argument('--wordfile', default='./word_list', 84 | help="""list of words language l1""") 85 | parser.add_argument('--out', default='./google_translate.out', 86 | help="""output text file""") 87 | parser.add_argument('--headless', default=False, 88 | action="store_true") 89 | parser.add_argument('--survey', default="./csvs/survey_table_reference_{}_{}_*", 90 | help="""survey reference file base""") 91 | parser.add_argument('--google', default="./google_translate_dump/google_translate.{}.{}.out", 92 | help="""google translate file base""") 93 | 94 | args = parser.parse_args() 95 | l1, l2 = args.l1, args.l2 96 | 97 | survey_summary = get_survey_summary_reference(args.survey, l1, l2) 98 | 99 | google_translate = get_google_translate(args.google, l1, l2) 100 | 101 | precision_at1 = defaultdict(int) 102 | precision_at5 = defaultdict(int) 103 | total = 0 104 | 105 | # check same thing 106 | for (word, three_trans), (gword, g_trans) in zip(survey_summary, google_translate): 107 | try: 108 | assert word == gword 109 | except AssertionError as e: 110 | print(word, gword) 111 | raise e 112 | 113 | g_main = g_trans['main'] 114 | verified = g_trans['verified'] 115 | sub_trans = g_trans['subs'] 116 | translate_words = [g_main] + sub_trans 117 | 118 | # print(word, g_main, verified) 119 | flags = [0, 0, 0] 120 | idx = 0 121 | for method in three_trans: 122 | # print("\t", key) 123 | assert translate_words[0] is not None 124 | assert len(translate_words) > 0 125 | 126 | trans = three_trans[method] 127 | precision_at1[method] += len(set(translate_words) & set(trans[:1])) > 0 128 | precision_at5[method] += len(set(translate_words) & set(trans[:5])) > 0 129 | 130 | idx += 1 131 | total += 1 132 | if flags[1] == 0 and flags[0] > 0 and flags[2] > 0: 133 | # print(word, three_trans) 134 | pass 135 | 136 | methods = ['baseline', 'cpe', 'pmi'] 137 | for method in methods: 138 | precision_at1[method] /= total 139 | precision_at5[method] /= total 140 | precision_at1[method + '_se'] = \ 141 | np.sqrt(precision_at1[method] * (1.0 - precision_at1[method]) / total) 142 | precision_at5[method + '_se'] = \ 143 | np.sqrt(precision_at1[method] * (1.0 - precision_at5[method]) / total) 144 | 145 | print(total) 146 | top1 = precision_at1 147 | top5 = precision_at5 148 | print("[top1]") 149 | for method in methods: 150 | print(method, round(top1[method], 3), "+/-", round(top1[method + '_se'], 3)) 151 | print("[top5]") 152 | for method in methods: 153 | print(method, round(top5[method], 3), "+/-", round(top5[method + '_se'], 3)) 154 | 155 | # not a word 156 | # proper noun 157 | # suggestion - 정답적기 158 | 159 | # partial 160 | -------------------------------------------------------------------------------- /word2word/word2word.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import os 4 | import pickle 5 | from time import time 6 | 7 | from word2word.utils import ( 8 | download_or_load, download_os2018, get_savedir 9 | ) 10 | from word2word.tokenization import ( 11 | load_tokenizer, get_sents, get_vocab, update_dicts 12 | ) 13 | from word2word.methods import ( 14 | rerank, rerank_mp, get_trans_co, get_trans_pmi 15 | ) 16 | 17 | 18 | class Word2word: 19 | """The word2word class. 20 | 21 | Usage: 22 | from word2word import Word2word 23 | 24 | # Download and load a pre-computed bilingual lexicon 25 | en2fr = Word2word("en", "fr") 26 | print(en2fr("apple")) 27 | # out: ['pomme', 'pommes', 'pommier', 'tartes', 'fleurs'] 28 | 29 | # Build a custom bilingual lexicon 30 | # (requires two aligned files, e.g., my_corpus.en, my_corpus.fr) 31 | my_en2fr = Word2word.make("en", "fr", "my_corpus") 32 | """ 33 | 34 | def __init__(self, lang1, lang2, 35 | word2x=None, y2word=None, x2ys=None, custom_savedir=None): 36 | self.lang1 = lang1 37 | self.lang2 = lang2 38 | 39 | if all(d is not None for d in [word2x, y2word, x2ys]): 40 | # load a custom-built word2word bilingual lexicon 41 | self.word2x, self.y2word, self.x2ys = word2x, y2word, x2ys 42 | elif any(d is not None for d in [word2x, y2word, x2ys]): 43 | raise ValueError( 44 | f"custom bilingual lexicon is only partially provided. " 45 | f"use Word2word.make() or Word2word.load() to " 46 | f"properly build or load custom lexicons.") 47 | else: 48 | # default: download/load the word2word dataset 49 | self.word2x, self.y2word, self.x2ys = download_or_load( 50 | lang1, lang2, custom_savedir 51 | ) 52 | 53 | # lazily keep summary statistics of the learned bilingual lexicon 54 | self.summary = {} 55 | 56 | def __call__(self, query, n_best=5): 57 | """Retrieve top-k word translations for the query word.""" 58 | try: 59 | x = self.word2x[query] 60 | ys = self.x2ys[x] 61 | words = [self.y2word[y] for y in ys] 62 | except KeyError: 63 | raise KeyError( 64 | f"query word {query} not found in the bilingual lexicon." 65 | ) 66 | return words[:n_best] 67 | 68 | def __len__(self): 69 | """Return the number of source words for which translation exists.""" 70 | return len(self.x2ys) 71 | 72 | def compute_summary(self): 73 | """Compute basic summaries for the bilingual lexicon.""" 74 | n_unique_ys = len(set([y for ys in self.x2ys.values() for y in ys])) 75 | n_ys = [len(ys) for ys in self.x2ys.values()] 76 | self.summary = { 77 | "n_valid_words": len(self), 78 | "n_valid_targets": n_unique_ys, 79 | "n_total_words": len(self.word2x), 80 | "n_total_targets": len(self.y2word), 81 | "n_translations_per_word": sum(n_ys) / len(n_ys), 82 | "n_sentences": None, # original file required 83 | } 84 | return self.summary 85 | 86 | @classmethod 87 | def make( 88 | cls, 89 | lang1: str, 90 | lang2: str, 91 | datapref: str = None, 92 | n_lines: int = 100000000, 93 | cutoff: int = 5000, 94 | rerank_width: int = 100, 95 | rerank_impl: str = "multiprocessing", 96 | cased: bool = True, 97 | n_translations: int = 10, 98 | save_cooccurrence: bool = False, 99 | save_pmi: bool = False, 100 | savedir: str = None, 101 | num_workers: int = 16, 102 | ): 103 | """Build a bilingual lexicon using a parallel corpus.""" 104 | 105 | print("Step 0. Check files") 106 | lang1, lang2 = sorted([lang1, lang2]) 107 | if datapref: 108 | lang1_file, lang2_file = [ 109 | f"{datapref}.{lang}" for lang in [lang1, lang2] 110 | ] 111 | assert os.path.exists(lang1_file), \ 112 | f"custom parallel corpus file missing at {datapref}.{lang1}" 113 | assert os.path.exists(lang2_file), \ 114 | f"custom parallel corpus file missing at {datapref}.{lang2}" 115 | else: 116 | lang1_file, lang2_file = download_os2018(lang1, lang2) 117 | 118 | print("Step 1. Load tokenizer") 119 | tokenizer1 = load_tokenizer(lang1) 120 | tokenizer2 = load_tokenizer(lang2) 121 | 122 | t0 = time() 123 | print("Step 2. Constructing sentences") 124 | sents1 = get_sents( 125 | lang1_file, lang1, tokenizer1, cased, n_lines, num_workers 126 | ) 127 | sents2 = get_sents( 128 | lang2_file, lang2, tokenizer2, cased, n_lines, num_workers 129 | ) 130 | print(f"Time taken for step 2: {time() - t0:.2f}s") 131 | 132 | assert len(sents1) == len(sents2), ( 133 | f"{lang1} and {lang2} files must have the same number of lines.\n" 134 | f"({lang1}: {len(sents1)} lines, {lang2}: {len(sents2)} lines)" 135 | ) 136 | 137 | # input savedir if provided, else datapref (custom data location); 138 | # system default otherwise 139 | savedir = get_savedir(savedir if savedir else datapref) 140 | 141 | print("Step 3. Compute vocabularies") 142 | # word <-> index 143 | word2x, x2word, x2cnt = get_vocab(sents1) 144 | word2y, y2word, y2cnt = get_vocab(sents2) 145 | 146 | print("Step 4. Update count dictionaries") 147 | # monolingual and cross-lingual dictionaries 148 | x2xs, y2ys, x2ys, y2xs = update_dicts( 149 | sents1, sents2, word2x, word2y, cutoff 150 | ) 151 | 152 | t0 = time() 153 | print("Step 5. Translation using CPE scores") 154 | if rerank_impl == "simple": 155 | x2ys_cpe = rerank(x2ys, x2cnt, x2xs, rerank_width, n_translations) 156 | y2xs_cpe = rerank(y2xs, y2cnt, y2ys, rerank_width, n_translations) 157 | elif rerank_impl == "multiprocessing": 158 | x2ys_cpe = rerank_mp( 159 | x2ys, x2cnt, x2xs, rerank_width, n_translations, num_workers 160 | ) 161 | y2xs_cpe = rerank_mp( 162 | y2xs, y2cnt, y2ys, rerank_width, n_translations, num_workers 163 | ) 164 | else: 165 | raise ValueError("unrecognized --rerank_impl argument. " 166 | "Options: simple, multiprocessing") 167 | print(f"Time taken for step 5: {time() - t0:.2f}s") 168 | 169 | print("Saving...") 170 | Word2word.save(lang1, lang2, savedir, word2x, word2y, x2word, 171 | x2ys_cpe, y2word, y2xs_cpe) 172 | 173 | if save_cooccurrence: 174 | print("Step 5-1. Translation using co-occurrence counts") 175 | subdir = os.path.join(savedir, "co") 176 | os.makedirs(subdir, exist_ok=True) 177 | 178 | x2ys_co = get_trans_co(x2ys, n_translations) 179 | y2xs_co = get_trans_co(y2xs, n_translations) 180 | Word2word.save(lang1, lang2, subdir, word2x, word2y, x2word, 181 | x2ys_co, y2word, y2xs_co) 182 | 183 | if save_pmi: 184 | print("Step 5-2. Translation using PMI scores") 185 | subdir = os.path.join(savedir, "pmi") 186 | os.makedirs(subdir, exist_ok=True) 187 | 188 | seqlens1 = [len(sent) for sent in sents1] 189 | seqlens2 = [len(sent) for sent in sents2] 190 | Nx = sum(seqlens1) 191 | Ny = sum(seqlens2) 192 | Nxy = sum([seqlen_x * seqlen_y 193 | for seqlen_x, seqlen_y in zip(seqlens1, seqlens2)]) 194 | 195 | x2ys_pmi = get_trans_pmi(x2ys, x2cnt, y2cnt, Nxy, Nx, Ny, 196 | rerank_width, n_translations) 197 | y2xs_pmi = get_trans_pmi(y2xs, y2cnt, x2cnt, Nxy, Ny, Nx, 198 | rerank_width, n_translations) 199 | 200 | Word2word.save(lang1, lang2, subdir, word2x, word2y, x2word, 201 | x2ys_pmi, y2word, y2xs_pmi) 202 | 203 | print("Done!") 204 | return cls(lang1, lang2, word2x, y2word, x2ys_cpe) 205 | 206 | @staticmethod 207 | def save(lang1, lang2, savedir, word2x, word2y, x2word, x2ys, y2word, y2xs): 208 | with open(os.path.join(savedir, f"{lang1}-{lang2}.pkl"), "wb") as f: 209 | pickle.dump((word2x, y2word, x2ys), f) 210 | with open(os.path.join(savedir, f"{lang2}-{lang1}.pkl"), "wb") as f: 211 | pickle.dump((word2y, x2word, y2xs), f) 212 | 213 | @classmethod 214 | def load(cls, lang1, lang2, savedir): 215 | """Loads this object with a custom-built bilingual lexicon. 216 | 217 | savedir is the directory containing {lang1}-{lang2}.pkl files 218 | built from the make function. 219 | """ 220 | path = os.path.join(savedir, f"{lang1}-{lang2}.pkl") 221 | assert os.path.exists(path), \ 222 | f"processed lexicon file not found at {path}" 223 | with open(path, "rb") as f: 224 | word2x, y2word, x2ys = pickle.load(f) 225 | print(f"Loaded word2word custom bilingual lexicon from {path}") 226 | return cls(lang1, lang2, word2x, y2word, x2ys) 227 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /word2word/supporting_languages.txt: -------------------------------------------------------------------------------- 1 | af-ar 2 | af-bg 3 | af-bn 4 | af-bs 5 | af-cs 6 | af-da 7 | af-de 8 | af-el 9 | af-en 10 | af-eo 11 | af-es 12 | af-et 13 | af-fa 14 | af-fi 15 | af-fr 16 | af-he 17 | af-hi 18 | af-hr 19 | af-hu 20 | af-id 21 | af-it 22 | af-ja 23 | af-lt 24 | af-lv 25 | af-mk 26 | af-ml 27 | af-ms 28 | af-nl 29 | af-no 30 | af-pl 31 | af-pt 32 | af-pt_br 33 | af-ro 34 | af-ru 35 | af-si 36 | af-sk 37 | af-sl 38 | af-sq 39 | af-sr 40 | af-sv 41 | af-ta 42 | af-th 43 | af-tr 44 | af-uk 45 | af-vi 46 | af-ze_en 47 | af-zh_cn 48 | af-zh_tw 49 | ar-af 50 | ar-bg 51 | ar-bn 52 | ar-br 53 | ar-bs 54 | ar-ca 55 | ar-cs 56 | ar-da 57 | ar-de 58 | ar-el 59 | ar-en 60 | ar-eo 61 | ar-es 62 | ar-et 63 | ar-eu 64 | ar-fa 65 | ar-fi 66 | ar-fr 67 | ar-gl 68 | ar-he 69 | ar-hi 70 | ar-hr 71 | ar-hu 72 | ar-hy 73 | ar-id 74 | ar-is 75 | ar-it 76 | ar-ja 77 | ar-ka 78 | ar-kk 79 | ar-ko 80 | ar-lt 81 | ar-lv 82 | ar-mk 83 | ar-ml 84 | ar-ms 85 | ar-nl 86 | ar-no 87 | ar-pl 88 | ar-pt 89 | ar-pt_br 90 | ar-ro 91 | ar-ru 92 | ar-si 93 | ar-sk 94 | ar-sl 95 | ar-sq 96 | ar-sr 97 | ar-sv 98 | ar-ta 99 | ar-te 100 | ar-th 101 | ar-tl 102 | ar-tr 103 | ar-uk 104 | ar-ur 105 | ar-vi 106 | ar-ze_en 107 | ar-ze_zh 108 | ar-zh_cn 109 | ar-zh_tw 110 | bg-af 111 | bg-ar 112 | bg-bn 113 | bg-br 114 | bg-bs 115 | bg-ca 116 | bg-cs 117 | bg-da 118 | bg-de 119 | bg-el 120 | bg-en 121 | bg-eo 122 | bg-es 123 | bg-et 124 | bg-eu 125 | bg-fa 126 | bg-fi 127 | bg-fr 128 | bg-gl 129 | bg-he 130 | bg-hi 131 | bg-hr 132 | bg-hu 133 | bg-hy 134 | bg-id 135 | bg-is 136 | bg-it 137 | bg-ja 138 | bg-ka 139 | bg-kk 140 | bg-ko 141 | bg-lt 142 | bg-lv 143 | bg-mk 144 | bg-ml 145 | bg-ms 146 | bg-nl 147 | bg-no 148 | bg-pl 149 | bg-pt 150 | bg-pt_br 151 | bg-ro 152 | bg-ru 153 | bg-si 154 | bg-sk 155 | bg-sl 156 | bg-sq 157 | bg-sr 158 | bg-sv 159 | bg-ta 160 | bg-te 161 | bg-th 162 | bg-tl 163 | bg-tr 164 | bg-uk 165 | bg-ur 166 | bg-vi 167 | bg-ze_en 168 | bg-ze_zh 169 | bg-zh_cn 170 | bg-zh_tw 171 | bn-af 172 | bn-ar 173 | bn-bg 174 | bn-bs 175 | bn-ca 176 | bn-cs 177 | bn-da 178 | bn-de 179 | bn-el 180 | bn-en 181 | bn-es 182 | bn-et 183 | bn-eu 184 | bn-fa 185 | bn-fi 186 | bn-fr 187 | bn-gl 188 | bn-he 189 | bn-hi 190 | bn-hr 191 | bn-hu 192 | bn-id 193 | bn-is 194 | bn-it 195 | bn-ja 196 | bn-ka 197 | bn-ko 198 | bn-lt 199 | bn-lv 200 | bn-mk 201 | bn-ml 202 | bn-ms 203 | bn-nl 204 | bn-no 205 | bn-pl 206 | bn-pt 207 | bn-pt_br 208 | bn-ro 209 | bn-ru 210 | bn-si 211 | bn-sk 212 | bn-sl 213 | bn-sq 214 | bn-sr 215 | bn-sv 216 | bn-ta 217 | bn-th 218 | bn-tl 219 | bn-tr 220 | bn-uk 221 | bn-ur 222 | bn-vi 223 | bn-ze_en 224 | bn-ze_zh 225 | bn-zh_cn 226 | bn-zh_tw 227 | br-ar 228 | br-bg 229 | br-bs 230 | br-ca 231 | br-cs 232 | br-da 233 | br-de 234 | br-el 235 | br-en 236 | br-eo 237 | br-es 238 | br-et 239 | br-eu 240 | br-fa 241 | br-fi 242 | br-fr 243 | br-gl 244 | br-he 245 | br-hr 246 | br-hu 247 | br-id 248 | br-is 249 | br-it 250 | br-mk 251 | br-ml 252 | br-nl 253 | br-no 254 | br-pl 255 | br-pt 256 | br-pt_br 257 | br-ro 258 | br-ru 259 | br-sk 260 | br-sl 261 | br-sq 262 | br-sr 263 | br-sv 264 | br-tr 265 | br-uk 266 | br-zh_cn 267 | bs-af 268 | bs-ar 269 | bs-bg 270 | bs-bn 271 | bs-br 272 | bs-ca 273 | bs-cs 274 | bs-da 275 | bs-de 276 | bs-el 277 | bs-en 278 | bs-eo 279 | bs-es 280 | bs-et 281 | bs-eu 282 | bs-fa 283 | bs-fi 284 | bs-fr 285 | bs-gl 286 | bs-he 287 | bs-hi 288 | bs-hr 289 | bs-hu 290 | bs-hy 291 | bs-id 292 | bs-is 293 | bs-it 294 | bs-ja 295 | bs-ka 296 | bs-kk 297 | bs-ko 298 | bs-lt 299 | bs-lv 300 | bs-mk 301 | bs-ml 302 | bs-ms 303 | bs-nl 304 | bs-no 305 | bs-pl 306 | bs-pt 307 | bs-pt_br 308 | bs-ro 309 | bs-ru 310 | bs-si 311 | bs-sk 312 | bs-sl 313 | bs-sq 314 | bs-sr 315 | bs-sv 316 | bs-ta 317 | bs-te 318 | bs-th 319 | bs-tl 320 | bs-tr 321 | bs-uk 322 | bs-ur 323 | bs-vi 324 | bs-ze_en 325 | bs-ze_zh 326 | bs-zh_cn 327 | bs-zh_tw 328 | ca-ar 329 | ca-bg 330 | ca-bn 331 | ca-br 332 | ca-bs 333 | ca-cs 334 | ca-da 335 | ca-de 336 | ca-el 337 | ca-en 338 | ca-es 339 | ca-et 340 | ca-eu 341 | ca-fa 342 | ca-fi 343 | ca-fr 344 | ca-gl 345 | ca-he 346 | ca-hi 347 | ca-hr 348 | ca-hu 349 | ca-id 350 | ca-is 351 | ca-it 352 | ca-ja 353 | ca-ka 354 | ca-ko 355 | ca-lt 356 | ca-lv 357 | ca-mk 358 | ca-ml 359 | ca-ms 360 | ca-nl 361 | ca-no 362 | ca-pl 363 | ca-pt 364 | ca-pt_br 365 | ca-ro 366 | ca-ru 367 | ca-si 368 | ca-sk 369 | ca-sl 370 | ca-sq 371 | ca-sr 372 | ca-sv 373 | ca-th 374 | ca-tr 375 | ca-uk 376 | ca-vi 377 | ca-ze_en 378 | ca-ze_zh 379 | ca-zh_cn 380 | ca-zh_tw 381 | cs-af 382 | cs-ar 383 | cs-bg 384 | cs-bn 385 | cs-br 386 | cs-bs 387 | cs-ca 388 | cs-da 389 | cs-de 390 | cs-el 391 | cs-en 392 | cs-eo 393 | cs-es 394 | cs-et 395 | cs-eu 396 | cs-fa 397 | cs-fi 398 | cs-fr 399 | cs-gl 400 | cs-he 401 | cs-hi 402 | cs-hr 403 | cs-hu 404 | cs-hy 405 | cs-id 406 | cs-is 407 | cs-it 408 | cs-ja 409 | cs-ka 410 | cs-kk 411 | cs-ko 412 | cs-lt 413 | cs-lv 414 | cs-mk 415 | cs-ml 416 | cs-ms 417 | cs-nl 418 | cs-no 419 | cs-pl 420 | cs-pt 421 | cs-pt_br 422 | cs-ro 423 | cs-ru 424 | cs-si 425 | cs-sk 426 | cs-sl 427 | cs-sq 428 | cs-sr 429 | cs-sv 430 | cs-ta 431 | cs-te 432 | cs-th 433 | cs-tl 434 | cs-tr 435 | cs-uk 436 | cs-ur 437 | cs-vi 438 | cs-ze_en 439 | cs-ze_zh 440 | cs-zh_cn 441 | cs-zh_tw 442 | da-af 443 | da-ar 444 | da-bg 445 | da-bn 446 | da-br 447 | da-bs 448 | da-ca 449 | da-cs 450 | da-de 451 | da-el 452 | da-en 453 | da-eo 454 | da-es 455 | da-et 456 | da-eu 457 | da-fa 458 | da-fi 459 | da-fr 460 | da-gl 461 | da-he 462 | da-hi 463 | da-hr 464 | da-hu 465 | da-id 466 | da-is 467 | da-it 468 | da-ja 469 | da-ka 470 | da-kk 471 | da-ko 472 | da-lt 473 | da-lv 474 | da-mk 475 | da-ml 476 | da-ms 477 | da-nl 478 | da-no 479 | da-pl 480 | da-pt 481 | da-pt_br 482 | da-ro 483 | da-ru 484 | da-si 485 | da-sk 486 | da-sl 487 | da-sq 488 | da-sr 489 | da-sv 490 | da-ta 491 | da-te 492 | da-th 493 | da-tl 494 | da-tr 495 | da-uk 496 | da-ur 497 | da-vi 498 | da-ze_en 499 | da-ze_zh 500 | da-zh_cn 501 | da-zh_tw 502 | de-af 503 | de-ar 504 | de-bg 505 | de-bn 506 | de-br 507 | de-bs 508 | de-ca 509 | de-cs 510 | de-da 511 | de-el 512 | de-en 513 | de-eo 514 | de-es 515 | de-et 516 | de-eu 517 | de-fa 518 | de-fi 519 | de-fr 520 | de-gl 521 | de-he 522 | de-hi 523 | de-hr 524 | de-hu 525 | de-hy 526 | de-id 527 | de-is 528 | de-it 529 | de-ja 530 | de-ka 531 | de-kk 532 | de-ko 533 | de-lt 534 | de-lv 535 | de-mk 536 | de-ml 537 | de-ms 538 | de-nl 539 | de-no 540 | de-pl 541 | de-pt 542 | de-pt_br 543 | de-ro 544 | de-ru 545 | de-si 546 | de-sk 547 | de-sl 548 | de-sq 549 | de-sr 550 | de-sv 551 | de-ta 552 | de-te 553 | de-th 554 | de-tl 555 | de-tr 556 | de-uk 557 | de-ur 558 | de-vi 559 | de-ze_en 560 | de-ze_zh 561 | de-zh_cn 562 | de-zh_tw 563 | el-af 564 | el-ar 565 | el-bg 566 | el-bn 567 | el-br 568 | el-bs 569 | el-ca 570 | el-cs 571 | el-da 572 | el-de 573 | el-en 574 | el-eo 575 | el-es 576 | el-et 577 | el-eu 578 | el-fa 579 | el-fi 580 | el-fr 581 | el-gl 582 | el-he 583 | el-hi 584 | el-hr 585 | el-hu 586 | el-hy 587 | el-id 588 | el-is 589 | el-it 590 | el-ja 591 | el-ka 592 | el-kk 593 | el-ko 594 | el-lt 595 | el-lv 596 | el-mk 597 | el-ml 598 | el-ms 599 | el-nl 600 | el-no 601 | el-pl 602 | el-pt 603 | el-pt_br 604 | el-ro 605 | el-ru 606 | el-si 607 | el-sk 608 | el-sl 609 | el-sq 610 | el-sr 611 | el-sv 612 | el-ta 613 | el-te 614 | el-th 615 | el-tl 616 | el-tr 617 | el-uk 618 | el-ur 619 | el-vi 620 | el-ze_en 621 | el-ze_zh 622 | el-zh_cn 623 | el-zh_tw 624 | en-af 625 | en-ar 626 | en-bg 627 | en-bn 628 | en-br 629 | en-bs 630 | en-ca 631 | en-cs 632 | en-da 633 | en-de 634 | en-el 635 | en-eo 636 | en-es 637 | en-et 638 | en-eu 639 | en-fa 640 | en-fi 641 | en-fr 642 | en-gl 643 | en-he 644 | en-hi 645 | en-hr 646 | en-hu 647 | en-hy 648 | en-id 649 | en-is 650 | en-it 651 | en-ja 652 | en-ka 653 | en-kk 654 | en-ko 655 | en-lt 656 | en-lv 657 | en-mk 658 | en-ml 659 | en-ms 660 | en-nl 661 | en-no 662 | en-pl 663 | en-pt 664 | en-pt_br 665 | en-ro 666 | en-ru 667 | en-si 668 | en-sk 669 | en-sl 670 | en-sq 671 | en-sr 672 | en-sv 673 | en-ta 674 | en-te 675 | en-th 676 | en-tl 677 | en-tr 678 | en-uk 679 | en-ur 680 | en-vi 681 | en-ze_en 682 | en-ze_zh 683 | en-zh_cn 684 | en-zh_tw 685 | eo-af 686 | eo-ar 687 | eo-bg 688 | eo-br 689 | eo-bs 690 | eo-cs 691 | eo-da 692 | eo-de 693 | eo-el 694 | eo-en 695 | eo-es 696 | eo-et 697 | eo-eu 698 | eo-fa 699 | eo-fi 700 | eo-fr 701 | eo-gl 702 | eo-he 703 | eo-hi 704 | eo-hr 705 | eo-hu 706 | eo-hy 707 | eo-id 708 | eo-is 709 | eo-it 710 | eo-ja 711 | eo-kk 712 | eo-ko 713 | eo-lt 714 | eo-lv 715 | eo-mk 716 | eo-ml 717 | eo-ms 718 | eo-nl 719 | eo-no 720 | eo-pl 721 | eo-pt 722 | eo-pt_br 723 | eo-ro 724 | eo-ru 725 | eo-si 726 | eo-sk 727 | eo-sl 728 | eo-sq 729 | eo-sr 730 | eo-sv 731 | eo-th 732 | eo-tl 733 | eo-tr 734 | eo-uk 735 | eo-vi 736 | eo-ze_en 737 | eo-ze_zh 738 | eo-zh_cn 739 | eo-zh_tw 740 | es-af 741 | es-ar 742 | es-bg 743 | es-bn 744 | es-br 745 | es-bs 746 | es-ca 747 | es-cs 748 | es-da 749 | es-de 750 | es-el 751 | es-en 752 | es-eo 753 | es-et 754 | es-eu 755 | es-fa 756 | es-fi 757 | es-fr 758 | es-gl 759 | es-he 760 | es-hi 761 | es-hr 762 | es-hu 763 | es-hy 764 | es-id 765 | es-is 766 | es-it 767 | es-ja 768 | es-ka 769 | es-kk 770 | es-ko 771 | es-lt 772 | es-lv 773 | es-mk 774 | es-ml 775 | es-ms 776 | es-nl 777 | es-no 778 | es-pl 779 | es-pt 780 | es-pt_br 781 | es-ro 782 | es-ru 783 | es-si 784 | es-sk 785 | es-sl 786 | es-sq 787 | es-sr 788 | es-sv 789 | es-ta 790 | es-te 791 | es-th 792 | es-tl 793 | es-tr 794 | es-uk 795 | es-ur 796 | es-vi 797 | es-ze_en 798 | es-ze_zh 799 | es-zh_cn 800 | es-zh_tw 801 | et-af 802 | et-ar 803 | et-bg 804 | et-bn 805 | et-br 806 | et-bs 807 | et-ca 808 | et-cs 809 | et-da 810 | et-de 811 | et-el 812 | et-en 813 | et-eo 814 | et-es 815 | et-eu 816 | et-fa 817 | et-fi 818 | et-fr 819 | et-gl 820 | et-he 821 | et-hi 822 | et-hr 823 | et-hu 824 | et-hy 825 | et-id 826 | et-is 827 | et-it 828 | et-ja 829 | et-ka 830 | et-kk 831 | et-ko 832 | et-lt 833 | et-lv 834 | et-mk 835 | et-ml 836 | et-ms 837 | et-nl 838 | et-no 839 | et-pl 840 | et-pt 841 | et-pt_br 842 | et-ro 843 | et-ru 844 | et-si 845 | et-sk 846 | et-sl 847 | et-sq 848 | et-sr 849 | et-sv 850 | et-ta 851 | et-te 852 | et-th 853 | et-tl 854 | et-tr 855 | et-uk 856 | et-ur 857 | et-vi 858 | et-ze_en 859 | et-ze_zh 860 | et-zh_cn 861 | et-zh_tw 862 | eu-ar 863 | eu-bg 864 | eu-bn 865 | eu-br 866 | eu-bs 867 | eu-ca 868 | eu-cs 869 | eu-da 870 | eu-de 871 | eu-el 872 | eu-en 873 | eu-eo 874 | eu-es 875 | eu-et 876 | eu-fa 877 | eu-fi 878 | eu-fr 879 | eu-gl 880 | eu-he 881 | eu-hi 882 | eu-hr 883 | eu-hu 884 | eu-id 885 | eu-is 886 | eu-it 887 | eu-ja 888 | eu-ka 889 | eu-ko 890 | eu-lt 891 | eu-lv 892 | eu-mk 893 | eu-ml 894 | eu-ms 895 | eu-nl 896 | eu-no 897 | eu-pl 898 | eu-pt 899 | eu-pt_br 900 | eu-ro 901 | eu-ru 902 | eu-si 903 | eu-sk 904 | eu-sl 905 | eu-sq 906 | eu-sr 907 | eu-sv 908 | eu-ta 909 | eu-te 910 | eu-th 911 | eu-tl 912 | eu-tr 913 | eu-uk 914 | eu-ur 915 | eu-vi 916 | eu-ze_en 917 | eu-ze_zh 918 | eu-zh_cn 919 | eu-zh_tw 920 | fa-af 921 | fa-ar 922 | fa-bg 923 | fa-bn 924 | fa-br 925 | fa-bs 926 | fa-ca 927 | fa-cs 928 | fa-da 929 | fa-de 930 | fa-el 931 | fa-en 932 | fa-eo 933 | fa-es 934 | fa-et 935 | fa-eu 936 | fa-fi 937 | fa-fr 938 | fa-gl 939 | fa-he 940 | fa-hi 941 | fa-hr 942 | fa-hu 943 | fa-id 944 | fa-is 945 | fa-it 946 | fa-ja 947 | fa-ka 948 | fa-kk 949 | fa-ko 950 | fa-lt 951 | fa-lv 952 | fa-mk 953 | fa-ml 954 | fa-ms 955 | fa-nl 956 | fa-no 957 | fa-pl 958 | fa-pt 959 | fa-pt_br 960 | fa-ro 961 | fa-ru 962 | fa-si 963 | fa-sk 964 | fa-sl 965 | fa-sq 966 | fa-sr 967 | fa-sv 968 | fa-ta 969 | fa-te 970 | fa-th 971 | fa-tl 972 | fa-tr 973 | fa-uk 974 | fa-ur 975 | fa-vi 976 | fa-ze_en 977 | fa-ze_zh 978 | fa-zh_cn 979 | fa-zh_tw 980 | fi-af 981 | fi-ar 982 | fi-bg 983 | fi-bn 984 | fi-br 985 | fi-bs 986 | fi-ca 987 | fi-cs 988 | fi-da 989 | fi-de 990 | fi-el 991 | fi-en 992 | fi-eo 993 | fi-es 994 | fi-et 995 | fi-eu 996 | fi-fa 997 | fi-fr 998 | fi-gl 999 | fi-he 1000 | fi-hi 1001 | fi-hr 1002 | fi-hu 1003 | fi-hy 1004 | fi-id 1005 | fi-is 1006 | fi-it 1007 | fi-ja 1008 | fi-ka 1009 | fi-kk 1010 | fi-ko 1011 | fi-lt 1012 | fi-lv 1013 | fi-mk 1014 | fi-ml 1015 | fi-ms 1016 | fi-nl 1017 | fi-no 1018 | fi-pl 1019 | fi-pt 1020 | fi-pt_br 1021 | fi-ro 1022 | fi-ru 1023 | fi-si 1024 | fi-sk 1025 | fi-sl 1026 | fi-sq 1027 | fi-sr 1028 | fi-sv 1029 | fi-ta 1030 | fi-te 1031 | fi-th 1032 | fi-tl 1033 | fi-tr 1034 | fi-uk 1035 | fi-ur 1036 | fi-vi 1037 | fi-ze_en 1038 | fi-ze_zh 1039 | fi-zh_cn 1040 | fi-zh_tw 1041 | fr-af 1042 | fr-ar 1043 | fr-bg 1044 | fr-bn 1045 | fr-br 1046 | fr-bs 1047 | fr-ca 1048 | fr-cs 1049 | fr-da 1050 | fr-de 1051 | fr-el 1052 | fr-en 1053 | fr-eo 1054 | fr-es 1055 | fr-et 1056 | fr-eu 1057 | fr-fa 1058 | fr-fi 1059 | fr-gl 1060 | fr-he 1061 | fr-hi 1062 | fr-hr 1063 | fr-hu 1064 | fr-hy 1065 | fr-id 1066 | fr-is 1067 | fr-it 1068 | fr-ja 1069 | fr-ka 1070 | fr-kk 1071 | fr-ko 1072 | fr-lt 1073 | fr-lv 1074 | fr-mk 1075 | fr-ml 1076 | fr-ms 1077 | fr-nl 1078 | fr-no 1079 | fr-pl 1080 | fr-pt 1081 | fr-pt_br 1082 | fr-ro 1083 | fr-ru 1084 | fr-si 1085 | fr-sk 1086 | fr-sl 1087 | fr-sq 1088 | fr-sr 1089 | fr-sv 1090 | fr-ta 1091 | fr-te 1092 | fr-th 1093 | fr-tl 1094 | fr-tr 1095 | fr-uk 1096 | fr-ur 1097 | fr-vi 1098 | fr-ze_en 1099 | fr-ze_zh 1100 | fr-zh_cn 1101 | fr-zh_tw 1102 | gl-ar 1103 | gl-bg 1104 | gl-bn 1105 | gl-br 1106 | gl-bs 1107 | gl-ca 1108 | gl-cs 1109 | gl-da 1110 | gl-de 1111 | gl-el 1112 | gl-en 1113 | gl-eo 1114 | gl-es 1115 | gl-et 1116 | gl-eu 1117 | gl-fa 1118 | gl-fi 1119 | gl-fr 1120 | gl-he 1121 | gl-hi 1122 | gl-hr 1123 | gl-hu 1124 | gl-id 1125 | gl-is 1126 | gl-it 1127 | gl-ja 1128 | gl-ka 1129 | gl-ko 1130 | gl-lt 1131 | gl-lv 1132 | gl-mk 1133 | gl-ml 1134 | gl-ms 1135 | gl-nl 1136 | gl-no 1137 | gl-pl 1138 | gl-pt 1139 | gl-pt_br 1140 | gl-ro 1141 | gl-ru 1142 | gl-si 1143 | gl-sk 1144 | gl-sl 1145 | gl-sq 1146 | gl-sr 1147 | gl-sv 1148 | gl-th 1149 | gl-tr 1150 | gl-uk 1151 | gl-ur 1152 | gl-vi 1153 | gl-ze_en 1154 | gl-ze_zh 1155 | gl-zh_cn 1156 | gl-zh_tw 1157 | he-af 1158 | he-ar 1159 | he-bg 1160 | he-bn 1161 | he-br 1162 | he-bs 1163 | he-ca 1164 | he-cs 1165 | he-da 1166 | he-de 1167 | he-el 1168 | he-en 1169 | he-eo 1170 | he-es 1171 | he-et 1172 | he-eu 1173 | he-fa 1174 | he-fi 1175 | he-fr 1176 | he-gl 1177 | he-hi 1178 | he-hr 1179 | he-hu 1180 | he-hy 1181 | he-id 1182 | he-is 1183 | he-it 1184 | he-ja 1185 | he-ka 1186 | he-kk 1187 | he-ko 1188 | he-lt 1189 | he-lv 1190 | he-mk 1191 | he-ml 1192 | he-ms 1193 | he-nl 1194 | he-no 1195 | he-pl 1196 | he-pt 1197 | he-pt_br 1198 | he-ro 1199 | he-ru 1200 | he-si 1201 | he-sk 1202 | he-sl 1203 | he-sq 1204 | he-sr 1205 | he-sv 1206 | he-ta 1207 | he-te 1208 | he-th 1209 | he-tl 1210 | he-tr 1211 | he-uk 1212 | he-ur 1213 | he-vi 1214 | he-ze_en 1215 | he-ze_zh 1216 | he-zh_cn 1217 | he-zh_tw 1218 | hi-af 1219 | hi-ar 1220 | hi-bg 1221 | hi-bn 1222 | hi-bs 1223 | hi-ca 1224 | hi-cs 1225 | hi-da 1226 | hi-de 1227 | hi-el 1228 | hi-en 1229 | hi-eo 1230 | hi-es 1231 | hi-et 1232 | hi-eu 1233 | hi-fa 1234 | hi-fi 1235 | hi-fr 1236 | hi-gl 1237 | hi-he 1238 | hi-hr 1239 | hi-hu 1240 | hi-id 1241 | hi-is 1242 | hi-it 1243 | hi-ja 1244 | hi-ka 1245 | hi-ko 1246 | hi-lt 1247 | hi-lv 1248 | hi-mk 1249 | hi-ml 1250 | hi-ms 1251 | hi-nl 1252 | hi-no 1253 | hi-pl 1254 | hi-pt 1255 | hi-pt_br 1256 | hi-ro 1257 | hi-ru 1258 | hi-si 1259 | hi-sk 1260 | hi-sl 1261 | hi-sq 1262 | hi-sr 1263 | hi-sv 1264 | hi-ta 1265 | hi-te 1266 | hi-th 1267 | hi-tl 1268 | hi-tr 1269 | hi-uk 1270 | hi-ur 1271 | hi-vi 1272 | hi-ze_en 1273 | hi-ze_zh 1274 | hi-zh_cn 1275 | hi-zh_tw 1276 | hr-af 1277 | hr-ar 1278 | hr-bg 1279 | hr-bn 1280 | hr-br 1281 | hr-bs 1282 | hr-ca 1283 | hr-cs 1284 | hr-da 1285 | hr-de 1286 | hr-el 1287 | hr-en 1288 | hr-eo 1289 | hr-es 1290 | hr-et 1291 | hr-eu 1292 | hr-fa 1293 | hr-fi 1294 | hr-fr 1295 | hr-gl 1296 | hr-he 1297 | hr-hi 1298 | hr-hu 1299 | hr-hy 1300 | hr-id 1301 | hr-is 1302 | hr-it 1303 | hr-ja 1304 | hr-ka 1305 | hr-kk 1306 | hr-ko 1307 | hr-lt 1308 | hr-lv 1309 | hr-mk 1310 | hr-ml 1311 | hr-ms 1312 | hr-nl 1313 | hr-no 1314 | hr-pl 1315 | hr-pt 1316 | hr-pt_br 1317 | hr-ro 1318 | hr-ru 1319 | hr-si 1320 | hr-sk 1321 | hr-sl 1322 | hr-sq 1323 | hr-sr 1324 | hr-sv 1325 | hr-ta 1326 | hr-te 1327 | hr-th 1328 | hr-tl 1329 | hr-tr 1330 | hr-uk 1331 | hr-ur 1332 | hr-vi 1333 | hr-ze_en 1334 | hr-ze_zh 1335 | hr-zh_cn 1336 | hr-zh_tw 1337 | hu-af 1338 | hu-ar 1339 | hu-bg 1340 | hu-bn 1341 | hu-br 1342 | hu-bs 1343 | hu-ca 1344 | hu-cs 1345 | hu-da 1346 | hu-de 1347 | hu-el 1348 | hu-en 1349 | hu-eo 1350 | hu-es 1351 | hu-et 1352 | hu-eu 1353 | hu-fa 1354 | hu-fi 1355 | hu-fr 1356 | hu-gl 1357 | hu-he 1358 | hu-hi 1359 | hu-hr 1360 | hu-hy 1361 | hu-id 1362 | hu-is 1363 | hu-it 1364 | hu-ja 1365 | hu-ka 1366 | hu-kk 1367 | hu-ko 1368 | hu-lt 1369 | hu-lv 1370 | hu-mk 1371 | hu-ml 1372 | hu-ms 1373 | hu-nl 1374 | hu-no 1375 | hu-pl 1376 | hu-pt 1377 | hu-pt_br 1378 | hu-ro 1379 | hu-ru 1380 | hu-si 1381 | hu-sk 1382 | hu-sl 1383 | hu-sq 1384 | hu-sr 1385 | hu-sv 1386 | hu-ta 1387 | hu-te 1388 | hu-th 1389 | hu-tl 1390 | hu-tr 1391 | hu-uk 1392 | hu-ur 1393 | hu-vi 1394 | hu-ze_en 1395 | hu-ze_zh 1396 | hu-zh_cn 1397 | hu-zh_tw 1398 | hy-ar 1399 | hy-bg 1400 | hy-bs 1401 | hy-cs 1402 | hy-de 1403 | hy-el 1404 | hy-en 1405 | hy-eo 1406 | hy-es 1407 | hy-et 1408 | hy-fi 1409 | hy-fr 1410 | hy-he 1411 | hy-hr 1412 | hy-hu 1413 | hy-id 1414 | hy-it 1415 | hy-mk 1416 | hy-ml 1417 | hy-nl 1418 | hy-pl 1419 | hy-pt 1420 | hy-pt_br 1421 | hy-ro 1422 | hy-ru 1423 | hy-sk 1424 | hy-sl 1425 | hy-sq 1426 | hy-sr 1427 | hy-sv 1428 | hy-tr 1429 | hy-zh_cn 1430 | hy-zh_tw 1431 | id-af 1432 | id-ar 1433 | id-bg 1434 | id-bn 1435 | id-br 1436 | id-bs 1437 | id-ca 1438 | id-cs 1439 | id-da 1440 | id-de 1441 | id-el 1442 | id-en 1443 | id-eo 1444 | id-es 1445 | id-et 1446 | id-eu 1447 | id-fa 1448 | id-fi 1449 | id-fr 1450 | id-gl 1451 | id-he 1452 | id-hi 1453 | id-hr 1454 | id-hu 1455 | id-hy 1456 | id-is 1457 | id-it 1458 | id-ja 1459 | id-ka 1460 | id-kk 1461 | id-ko 1462 | id-lt 1463 | id-lv 1464 | id-mk 1465 | id-ml 1466 | id-ms 1467 | id-nl 1468 | id-pl 1469 | id-pt 1470 | id-pt_br 1471 | id-ro 1472 | id-ru 1473 | id-si 1474 | id-sk 1475 | id-sl 1476 | id-sq 1477 | id-sr 1478 | id-sv 1479 | id-ta 1480 | id-te 1481 | id-th 1482 | id-tl 1483 | id-tr 1484 | id-uk 1485 | id-ur 1486 | id-vi 1487 | id-ze_en 1488 | id-ze_zh 1489 | id-zh_cn 1490 | id-zh_tw 1491 | is-ar 1492 | is-bg 1493 | is-bn 1494 | is-br 1495 | is-bs 1496 | is-ca 1497 | is-cs 1498 | is-da 1499 | is-de 1500 | is-el 1501 | is-en 1502 | is-eo 1503 | is-es 1504 | is-et 1505 | is-eu 1506 | is-fa 1507 | is-fi 1508 | is-fr 1509 | is-gl 1510 | is-he 1511 | is-hi 1512 | is-hr 1513 | is-hu 1514 | is-id 1515 | is-it 1516 | is-ja 1517 | is-ka 1518 | is-kk 1519 | is-ko 1520 | is-lt 1521 | is-lv 1522 | is-mk 1523 | is-ml 1524 | is-ms 1525 | is-nl 1526 | is-no 1527 | is-pl 1528 | is-pt 1529 | is-pt_br 1530 | is-ro 1531 | is-ru 1532 | is-si 1533 | is-sk 1534 | is-sl 1535 | is-sq 1536 | is-sr 1537 | is-sv 1538 | is-ta 1539 | is-th 1540 | is-tl 1541 | is-tr 1542 | is-uk 1543 | is-ur 1544 | is-vi 1545 | is-ze_en 1546 | is-ze_zh 1547 | is-zh_cn 1548 | is-zh_tw 1549 | it-af 1550 | it-ar 1551 | it-bg 1552 | it-bn 1553 | it-br 1554 | it-bs 1555 | it-ca 1556 | it-cs 1557 | it-da 1558 | it-de 1559 | it-el 1560 | it-en 1561 | it-eo 1562 | it-es 1563 | it-et 1564 | it-eu 1565 | it-fa 1566 | it-fi 1567 | it-fr 1568 | it-gl 1569 | it-he 1570 | it-hi 1571 | it-hr 1572 | it-hu 1573 | it-hy 1574 | it-id 1575 | it-is 1576 | it-ja 1577 | it-ka 1578 | it-kk 1579 | it-ko 1580 | it-lt 1581 | it-lv 1582 | it-mk 1583 | it-ml 1584 | it-ms 1585 | it-nl 1586 | it-no 1587 | it-pl 1588 | it-pt 1589 | it-pt_br 1590 | it-ro 1591 | it-ru 1592 | it-si 1593 | it-sk 1594 | it-sl 1595 | it-sq 1596 | it-sr 1597 | it-sv 1598 | it-ta 1599 | it-te 1600 | it-th 1601 | it-tl 1602 | it-tr 1603 | it-uk 1604 | it-ur 1605 | it-vi 1606 | it-ze_en 1607 | it-ze_zh 1608 | it-zh_cn 1609 | it-zh_tw 1610 | ja-af 1611 | ja-ar 1612 | ja-bg 1613 | ja-bn 1614 | ja-bs 1615 | ja-ca 1616 | ja-cs 1617 | ja-da 1618 | ja-de 1619 | ja-el 1620 | ja-en 1621 | ja-eo 1622 | ja-es 1623 | ja-et 1624 | ja-eu 1625 | ja-fa 1626 | ja-fi 1627 | ja-fr 1628 | ja-gl 1629 | ja-he 1630 | ja-hi 1631 | ja-hr 1632 | ja-hu 1633 | ja-id 1634 | ja-is 1635 | ja-it 1636 | ja-ka 1637 | ja-kk 1638 | ja-ko 1639 | ja-lt 1640 | ja-lv 1641 | ja-mk 1642 | ja-ml 1643 | ja-ms 1644 | ja-nl 1645 | ja-no 1646 | ja-pl 1647 | ja-pt 1648 | ja-pt_br 1649 | ja-ro 1650 | ja-ru 1651 | ja-si 1652 | ja-sk 1653 | ja-sl 1654 | ja-sq 1655 | ja-sr 1656 | ja-sv 1657 | ja-ta 1658 | ja-te 1659 | ja-th 1660 | ja-tl 1661 | ja-tr 1662 | ja-uk 1663 | ja-ur 1664 | ja-vi 1665 | ja-ze_en 1666 | ja-ze_zh 1667 | ja-zh_cn 1668 | ja-zh_tw 1669 | ka-ar 1670 | ka-bg 1671 | ka-bn 1672 | ka-bs 1673 | ka-ca 1674 | ka-cs 1675 | ka-da 1676 | ka-de 1677 | ka-el 1678 | ka-en 1679 | ka-es 1680 | ka-et 1681 | ka-eu 1682 | ka-fa 1683 | ka-fi 1684 | ka-fr 1685 | ka-gl 1686 | ka-he 1687 | ka-hi 1688 | ka-hr 1689 | ka-hu 1690 | ka-id 1691 | ka-is 1692 | ka-it 1693 | ka-ja 1694 | ka-ko 1695 | ka-lt 1696 | ka-lv 1697 | ka-mk 1698 | ka-ml 1699 | ka-ms 1700 | ka-nl 1701 | ka-no 1702 | ka-pl 1703 | ka-pt 1704 | ka-pt_br 1705 | ka-ro 1706 | ka-ru 1707 | ka-si 1708 | ka-sk 1709 | ka-sl 1710 | ka-sq 1711 | ka-sr 1712 | ka-sv 1713 | ka-th 1714 | ka-tl 1715 | ka-tr 1716 | ka-uk 1717 | ka-ur 1718 | ka-vi 1719 | ka-ze_en 1720 | ka-ze_zh 1721 | ka-zh_cn 1722 | ka-zh_tw 1723 | kk-ar 1724 | kk-bg 1725 | kk-bs 1726 | kk-cs 1727 | kk-da 1728 | kk-de 1729 | kk-el 1730 | kk-en 1731 | kk-eo 1732 | kk-es 1733 | kk-et 1734 | kk-fa 1735 | kk-fi 1736 | kk-fr 1737 | kk-he 1738 | kk-hr 1739 | kk-hu 1740 | kk-id 1741 | kk-is 1742 | kk-it 1743 | kk-ja 1744 | kk-lt 1745 | kk-lv 1746 | kk-ms 1747 | kk-nl 1748 | kk-no 1749 | kk-pl 1750 | kk-pt 1751 | kk-pt_br 1752 | kk-ro 1753 | kk-ru 1754 | kk-sk 1755 | kk-sl 1756 | kk-sr 1757 | kk-sv 1758 | kk-th 1759 | kk-tr 1760 | kk-uk 1761 | kk-vi 1762 | kk-zh_cn 1763 | ko-ar 1764 | ko-bg 1765 | ko-bn 1766 | ko-bs 1767 | ko-ca 1768 | ko-cs 1769 | ko-da 1770 | ko-de 1771 | ko-el 1772 | ko-en 1773 | ko-eo 1774 | ko-es 1775 | ko-et 1776 | ko-eu 1777 | ko-fa 1778 | ko-fi 1779 | ko-fr 1780 | ko-gl 1781 | ko-he 1782 | ko-hi 1783 | ko-hr 1784 | ko-hu 1785 | ko-id 1786 | ko-is 1787 | ko-it 1788 | ko-ja 1789 | ko-ka 1790 | ko-lt 1791 | ko-lv 1792 | ko-mk 1793 | ko-ml 1794 | ko-ms 1795 | ko-nl 1796 | ko-no 1797 | ko-pl 1798 | ko-pt 1799 | ko-pt_br 1800 | ko-ro 1801 | ko-ru 1802 | ko-si 1803 | ko-sk 1804 | ko-sl 1805 | ko-sq 1806 | ko-sr 1807 | ko-sv 1808 | ko-ta 1809 | ko-te 1810 | ko-th 1811 | ko-tl 1812 | ko-tr 1813 | ko-uk 1814 | ko-ur 1815 | ko-vi 1816 | ko-ze_en 1817 | ko-ze_zh 1818 | ko-zh_cn 1819 | ko-zh_tw 1820 | lt-af 1821 | lt-ar 1822 | lt-bg 1823 | lt-bn 1824 | lt-bs 1825 | lt-ca 1826 | lt-cs 1827 | lt-da 1828 | lt-de 1829 | lt-el 1830 | lt-en 1831 | lt-eo 1832 | lt-es 1833 | lt-et 1834 | lt-eu 1835 | lt-fa 1836 | lt-fi 1837 | lt-fr 1838 | lt-gl 1839 | lt-he 1840 | lt-hi 1841 | lt-hr 1842 | lt-hu 1843 | lt-id 1844 | lt-is 1845 | lt-it 1846 | lt-ja 1847 | lt-ka 1848 | lt-kk 1849 | lt-ko 1850 | lt-lv 1851 | lt-mk 1852 | lt-ml 1853 | lt-ms 1854 | lt-nl 1855 | lt-no 1856 | lt-pl 1857 | lt-pt 1858 | lt-pt_br 1859 | lt-ro 1860 | lt-ru 1861 | lt-si 1862 | lt-sk 1863 | lt-sl 1864 | lt-sq 1865 | lt-sr 1866 | lt-sv 1867 | lt-ta 1868 | lt-te 1869 | lt-th 1870 | lt-tl 1871 | lt-tr 1872 | lt-uk 1873 | lt-ur 1874 | lt-vi 1875 | lt-ze_en 1876 | lt-ze_zh 1877 | lt-zh_cn 1878 | lt-zh_tw 1879 | lv-af 1880 | lv-ar 1881 | lv-bg 1882 | lv-bn 1883 | lv-bs 1884 | lv-ca 1885 | lv-cs 1886 | lv-da 1887 | lv-de 1888 | lv-el 1889 | lv-en 1890 | lv-eo 1891 | lv-es 1892 | lv-et 1893 | lv-eu 1894 | lv-fa 1895 | lv-fi 1896 | lv-fr 1897 | lv-gl 1898 | lv-he 1899 | lv-hi 1900 | lv-hr 1901 | lv-hu 1902 | lv-id 1903 | lv-is 1904 | lv-it 1905 | lv-ja 1906 | lv-ka 1907 | lv-kk 1908 | lv-ko 1909 | lv-lt 1910 | lv-mk 1911 | lv-ml 1912 | lv-ms 1913 | lv-nl 1914 | lv-no 1915 | lv-pl 1916 | lv-pt 1917 | lv-pt_br 1918 | lv-ro 1919 | lv-ru 1920 | lv-si 1921 | lv-sk 1922 | lv-sl 1923 | lv-sq 1924 | lv-sr 1925 | lv-sv 1926 | lv-ta 1927 | lv-te 1928 | lv-th 1929 | lv-tr 1930 | lv-uk 1931 | lv-ur 1932 | lv-vi 1933 | lv-ze_en 1934 | lv-ze_zh 1935 | lv-zh_cn 1936 | lv-zh_tw 1937 | mk-af 1938 | mk-ar 1939 | mk-bg 1940 | mk-bn 1941 | mk-br 1942 | mk-bs 1943 | mk-ca 1944 | mk-cs 1945 | mk-da 1946 | mk-de 1947 | mk-el 1948 | mk-en 1949 | mk-eo 1950 | mk-es 1951 | mk-et 1952 | mk-eu 1953 | mk-fa 1954 | mk-fi 1955 | mk-fr 1956 | mk-gl 1957 | mk-he 1958 | mk-hi 1959 | mk-hr 1960 | mk-hu 1961 | mk-hy 1962 | mk-id 1963 | mk-is 1964 | mk-it 1965 | mk-ja 1966 | mk-ka 1967 | mk-ko 1968 | mk-lt 1969 | mk-lv 1970 | mk-ml 1971 | mk-ms 1972 | mk-nl 1973 | mk-no 1974 | mk-pl 1975 | mk-pt 1976 | mk-pt_br 1977 | mk-ro 1978 | mk-ru 1979 | mk-si 1980 | mk-sk 1981 | mk-sl 1982 | mk-sq 1983 | mk-sr 1984 | mk-sv 1985 | mk-ta 1986 | mk-te 1987 | mk-th 1988 | mk-tl 1989 | mk-tr 1990 | mk-uk 1991 | mk-ur 1992 | mk-vi 1993 | mk-ze_en 1994 | mk-ze_zh 1995 | mk-zh_cn 1996 | mk-zh_tw 1997 | ml-af 1998 | ml-ar 1999 | ml-bg 2000 | ml-bn 2001 | ml-br 2002 | ml-bs 2003 | ml-ca 2004 | ml-cs 2005 | ml-da 2006 | ml-de 2007 | ml-el 2008 | ml-en 2009 | ml-eo 2010 | ml-es 2011 | ml-et 2012 | ml-eu 2013 | ml-fa 2014 | ml-fi 2015 | ml-fr 2016 | ml-gl 2017 | ml-he 2018 | ml-hi 2019 | ml-hr 2020 | ml-hu 2021 | ml-hy 2022 | ml-id 2023 | ml-is 2024 | ml-it 2025 | ml-ja 2026 | ml-ka 2027 | ml-ko 2028 | ml-lt 2029 | ml-lv 2030 | ml-mk 2031 | ml-ms 2032 | ml-nl 2033 | ml-no 2034 | ml-pl 2035 | ml-pt 2036 | ml-pt_br 2037 | ml-ro 2038 | ml-ru 2039 | ml-si 2040 | ml-sk 2041 | ml-sl 2042 | ml-sq 2043 | ml-sr 2044 | ml-sv 2045 | ml-ta 2046 | ml-th 2047 | ml-tl 2048 | ml-tr 2049 | ml-uk 2050 | ml-ur 2051 | ml-vi 2052 | ml-ze_en 2053 | ml-ze_zh 2054 | ml-zh_cn 2055 | ml-zh_tw 2056 | ms-af 2057 | ms-ar 2058 | ms-bg 2059 | ms-bn 2060 | ms-bs 2061 | ms-ca 2062 | ms-cs 2063 | ms-da 2064 | ms-de 2065 | ms-el 2066 | ms-en 2067 | ms-eo 2068 | ms-es 2069 | ms-et 2070 | ms-eu 2071 | ms-fa 2072 | ms-fi 2073 | ms-fr 2074 | ms-gl 2075 | ms-he 2076 | ms-hi 2077 | ms-hr 2078 | ms-hu 2079 | ms-id 2080 | ms-is 2081 | ms-it 2082 | ms-ja 2083 | ms-ka 2084 | ms-kk 2085 | ms-ko 2086 | ms-lt 2087 | ms-lv 2088 | ms-mk 2089 | ms-ml 2090 | ms-nl 2091 | ms-no 2092 | ms-pl 2093 | ms-pt 2094 | ms-pt_br 2095 | ms-ro 2096 | ms-ru 2097 | ms-si 2098 | ms-sk 2099 | ms-sl 2100 | ms-sq 2101 | ms-sr 2102 | ms-sv 2103 | ms-ta 2104 | ms-te 2105 | ms-th 2106 | ms-tl 2107 | ms-tr 2108 | ms-uk 2109 | ms-ur 2110 | ms-vi 2111 | ms-ze_en 2112 | ms-ze_zh 2113 | ms-zh_cn 2114 | ms-zh_tw 2115 | nl-af 2116 | nl-ar 2117 | nl-bg 2118 | nl-bn 2119 | nl-br 2120 | nl-bs 2121 | nl-ca 2122 | nl-cs 2123 | nl-da 2124 | nl-de 2125 | nl-el 2126 | nl-en 2127 | nl-eo 2128 | nl-es 2129 | nl-et 2130 | nl-eu 2131 | nl-fa 2132 | nl-fi 2133 | nl-fr 2134 | nl-gl 2135 | nl-he 2136 | nl-hi 2137 | nl-hr 2138 | nl-hu 2139 | nl-hy 2140 | nl-id 2141 | nl-is 2142 | nl-it 2143 | nl-ja 2144 | nl-ka 2145 | nl-kk 2146 | nl-ko 2147 | nl-lt 2148 | nl-lv 2149 | nl-mk 2150 | nl-ml 2151 | nl-ms 2152 | nl-no 2153 | nl-pl 2154 | nl-pt 2155 | nl-pt_br 2156 | nl-ro 2157 | nl-ru 2158 | nl-si 2159 | nl-sk 2160 | nl-sl 2161 | nl-sq 2162 | nl-sr 2163 | nl-sv 2164 | nl-ta 2165 | nl-te 2166 | nl-th 2167 | nl-tl 2168 | nl-tr 2169 | nl-uk 2170 | nl-ur 2171 | nl-vi 2172 | nl-ze_en 2173 | nl-ze_zh 2174 | nl-zh_cn 2175 | nl-zh_tw 2176 | no-af 2177 | no-ar 2178 | no-bg 2179 | no-bn 2180 | no-br 2181 | no-bs 2182 | no-ca 2183 | no-cs 2184 | no-da 2185 | no-de 2186 | no-el 2187 | no-en 2188 | no-eo 2189 | no-es 2190 | no-et 2191 | no-eu 2192 | no-fa 2193 | no-fi 2194 | no-fr 2195 | no-gl 2196 | no-he 2197 | no-hi 2198 | no-hr 2199 | no-hu 2200 | no-is 2201 | no-it 2202 | no-ja 2203 | no-ka 2204 | no-kk 2205 | no-ko 2206 | no-lt 2207 | no-lv 2208 | no-mk 2209 | no-ml 2210 | no-ms 2211 | no-nl 2212 | no-pl 2213 | no-pt 2214 | no-pt_br 2215 | no-ro 2216 | no-ru 2217 | no-si 2218 | no-sk 2219 | no-sl 2220 | no-sq 2221 | no-sr 2222 | no-sv 2223 | no-ta 2224 | no-te 2225 | no-th 2226 | no-tl 2227 | no-tr 2228 | no-uk 2229 | no-ur 2230 | no-vi 2231 | no-ze_en 2232 | no-ze_zh 2233 | no-zh_cn 2234 | no-zh_tw 2235 | pl-af 2236 | pl-ar 2237 | pl-bg 2238 | pl-bn 2239 | pl-br 2240 | pl-bs 2241 | pl-ca 2242 | pl-cs 2243 | pl-da 2244 | pl-de 2245 | pl-el 2246 | pl-en 2247 | pl-eo 2248 | pl-es 2249 | pl-et 2250 | pl-eu 2251 | pl-fa 2252 | pl-fi 2253 | pl-fr 2254 | pl-gl 2255 | pl-he 2256 | pl-hi 2257 | pl-hr 2258 | pl-hu 2259 | pl-hy 2260 | pl-id 2261 | pl-is 2262 | pl-it 2263 | pl-ja 2264 | pl-ka 2265 | pl-kk 2266 | pl-ko 2267 | pl-lt 2268 | pl-lv 2269 | pl-mk 2270 | pl-ml 2271 | pl-ms 2272 | pl-nl 2273 | pl-no 2274 | pl-pt 2275 | pl-pt_br 2276 | pl-ro 2277 | pl-ru 2278 | pl-si 2279 | pl-sk 2280 | pl-sl 2281 | pl-sq 2282 | pl-sr 2283 | pl-sv 2284 | pl-ta 2285 | pl-te 2286 | pl-th 2287 | pl-tl 2288 | pl-tr 2289 | pl-uk 2290 | pl-ur 2291 | pl-vi 2292 | pl-ze_en 2293 | pl-ze_zh 2294 | pl-zh_cn 2295 | pl-zh_tw 2296 | pt-af 2297 | pt-ar 2298 | pt-bg 2299 | pt-bn 2300 | pt-br 2301 | pt-bs 2302 | pt-ca 2303 | pt-cs 2304 | pt-da 2305 | pt-de 2306 | pt-el 2307 | pt-en 2308 | pt-eo 2309 | pt-es 2310 | pt-et 2311 | pt-eu 2312 | pt-fa 2313 | pt-fi 2314 | pt-fr 2315 | pt-gl 2316 | pt-he 2317 | pt-hi 2318 | pt-hr 2319 | pt-hu 2320 | pt-hy 2321 | pt-id 2322 | pt-is 2323 | pt-it 2324 | pt-ja 2325 | pt-ka 2326 | pt-kk 2327 | pt-ko 2328 | pt-lt 2329 | pt-lv 2330 | pt-mk 2331 | pt-ml 2332 | pt-ms 2333 | pt-nl 2334 | pt-no 2335 | pt-pl 2336 | pt-pt_br 2337 | pt-ro 2338 | pt-ru 2339 | pt-si 2340 | pt-sk 2341 | pt-sl 2342 | pt-sq 2343 | pt-sr 2344 | pt-sv 2345 | pt-ta 2346 | pt-te 2347 | pt-th 2348 | pt-tl 2349 | pt-tr 2350 | pt-uk 2351 | pt-ur 2352 | pt-vi 2353 | pt-ze_en 2354 | pt-ze_zh 2355 | pt-zh_cn 2356 | pt-zh_tw 2357 | pt_br-af 2358 | pt_br-ar 2359 | pt_br-bg 2360 | pt_br-bn 2361 | pt_br-br 2362 | pt_br-bs 2363 | pt_br-ca 2364 | pt_br-cs 2365 | pt_br-da 2366 | pt_br-de 2367 | pt_br-el 2368 | pt_br-en 2369 | pt_br-eo 2370 | pt_br-es 2371 | pt_br-et 2372 | pt_br-eu 2373 | pt_br-fa 2374 | pt_br-fi 2375 | pt_br-fr 2376 | pt_br-gl 2377 | pt_br-he 2378 | pt_br-hi 2379 | pt_br-hr 2380 | pt_br-hu 2381 | pt_br-hy 2382 | pt_br-id 2383 | pt_br-is 2384 | pt_br-it 2385 | pt_br-ja 2386 | pt_br-ka 2387 | pt_br-kk 2388 | pt_br-ko 2389 | pt_br-lt 2390 | pt_br-lv 2391 | pt_br-mk 2392 | pt_br-ml 2393 | pt_br-ms 2394 | pt_br-nl 2395 | pt_br-no 2396 | pt_br-pl 2397 | pt_br-pt 2398 | pt_br-ro 2399 | pt_br-ru 2400 | pt_br-si 2401 | pt_br-sk 2402 | pt_br-sl 2403 | pt_br-sq 2404 | pt_br-sr 2405 | pt_br-sv 2406 | pt_br-ta 2407 | pt_br-te 2408 | pt_br-th 2409 | pt_br-tl 2410 | pt_br-tr 2411 | pt_br-uk 2412 | pt_br-ur 2413 | pt_br-vi 2414 | pt_br-ze_en 2415 | pt_br-ze_zh 2416 | pt_br-zh_cn 2417 | pt_br-zh_tw 2418 | ro-af 2419 | ro-ar 2420 | ro-bg 2421 | ro-bn 2422 | ro-br 2423 | ro-bs 2424 | ro-ca 2425 | ro-cs 2426 | ro-da 2427 | ro-de 2428 | ro-el 2429 | ro-en 2430 | ro-eo 2431 | ro-es 2432 | ro-et 2433 | ro-eu 2434 | ro-fa 2435 | ro-fi 2436 | ro-fr 2437 | ro-gl 2438 | ro-he 2439 | ro-hi 2440 | ro-hr 2441 | ro-hu 2442 | ro-hy 2443 | ro-id 2444 | ro-is 2445 | ro-it 2446 | ro-ja 2447 | ro-ka 2448 | ro-kk 2449 | ro-ko 2450 | ro-lt 2451 | ro-lv 2452 | ro-mk 2453 | ro-ml 2454 | ro-ms 2455 | ro-nl 2456 | ro-no 2457 | ro-pl 2458 | ro-pt 2459 | ro-pt_br 2460 | ro-ru 2461 | ro-si 2462 | ro-sk 2463 | ro-sl 2464 | ro-sq 2465 | ro-sr 2466 | ro-sv 2467 | ro-ta 2468 | ro-te 2469 | ro-th 2470 | ro-tl 2471 | ro-tr 2472 | ro-uk 2473 | ro-ur 2474 | ro-vi 2475 | ro-ze_en 2476 | ro-ze_zh 2477 | ro-zh_cn 2478 | ro-zh_tw 2479 | ru-af 2480 | ru-ar 2481 | ru-bg 2482 | ru-bn 2483 | ru-br 2484 | ru-bs 2485 | ru-ca 2486 | ru-cs 2487 | ru-da 2488 | ru-de 2489 | ru-el 2490 | ru-en 2491 | ru-eo 2492 | ru-es 2493 | ru-et 2494 | ru-eu 2495 | ru-fa 2496 | ru-fi 2497 | ru-fr 2498 | ru-gl 2499 | ru-he 2500 | ru-hi 2501 | ru-hr 2502 | ru-hu 2503 | ru-hy 2504 | ru-id 2505 | ru-is 2506 | ru-it 2507 | ru-ja 2508 | ru-ka 2509 | ru-kk 2510 | ru-ko 2511 | ru-lt 2512 | ru-lv 2513 | ru-mk 2514 | ru-ml 2515 | ru-ms 2516 | ru-nl 2517 | ru-no 2518 | ru-pl 2519 | ru-pt 2520 | ru-pt_br 2521 | ru-ro 2522 | ru-si 2523 | ru-sk 2524 | ru-sl 2525 | ru-sq 2526 | ru-sr 2527 | ru-sv 2528 | ru-ta 2529 | ru-te 2530 | ru-th 2531 | ru-tl 2532 | ru-tr 2533 | ru-uk 2534 | ru-ur 2535 | ru-vi 2536 | ru-ze_en 2537 | ru-ze_zh 2538 | ru-zh_cn 2539 | ru-zh_tw 2540 | si-af 2541 | si-ar 2542 | si-bg 2543 | si-bn 2544 | si-bs 2545 | si-ca 2546 | si-cs 2547 | si-da 2548 | si-de 2549 | si-el 2550 | si-en 2551 | si-eo 2552 | si-es 2553 | si-et 2554 | si-eu 2555 | si-fa 2556 | si-fi 2557 | si-fr 2558 | si-gl 2559 | si-he 2560 | si-hi 2561 | si-hr 2562 | si-hu 2563 | si-id 2564 | si-is 2565 | si-it 2566 | si-ja 2567 | si-ka 2568 | si-ko 2569 | si-lt 2570 | si-lv 2571 | si-mk 2572 | si-ml 2573 | si-ms 2574 | si-nl 2575 | si-no 2576 | si-pl 2577 | si-pt 2578 | si-pt_br 2579 | si-ro 2580 | si-ru 2581 | si-sk 2582 | si-sl 2583 | si-sq 2584 | si-sr 2585 | si-sv 2586 | si-ta 2587 | si-te 2588 | si-th 2589 | si-tl 2590 | si-tr 2591 | si-uk 2592 | si-ur 2593 | si-vi 2594 | si-ze_en 2595 | si-ze_zh 2596 | si-zh_cn 2597 | si-zh_tw 2598 | sk-af 2599 | sk-ar 2600 | sk-bg 2601 | sk-bn 2602 | sk-br 2603 | sk-bs 2604 | sk-ca 2605 | sk-cs 2606 | sk-da 2607 | sk-de 2608 | sk-el 2609 | sk-en 2610 | sk-eo 2611 | sk-es 2612 | sk-et 2613 | sk-eu 2614 | sk-fa 2615 | sk-fi 2616 | sk-fr 2617 | sk-gl 2618 | sk-he 2619 | sk-hi 2620 | sk-hr 2621 | sk-hu 2622 | sk-hy 2623 | sk-id 2624 | sk-is 2625 | sk-it 2626 | sk-ja 2627 | sk-ka 2628 | sk-kk 2629 | sk-ko 2630 | sk-lt 2631 | sk-lv 2632 | sk-mk 2633 | sk-ml 2634 | sk-ms 2635 | sk-nl 2636 | sk-no 2637 | sk-pl 2638 | sk-pt 2639 | sk-pt_br 2640 | sk-ro 2641 | sk-ru 2642 | sk-si 2643 | sk-sl 2644 | sk-sq 2645 | sk-sr 2646 | sk-sv 2647 | sk-ta 2648 | sk-te 2649 | sk-th 2650 | sk-tl 2651 | sk-tr 2652 | sk-uk 2653 | sk-ur 2654 | sk-vi 2655 | sk-ze_en 2656 | sk-ze_zh 2657 | sk-zh_cn 2658 | sk-zh_tw 2659 | sl-af 2660 | sl-ar 2661 | sl-bg 2662 | sl-bn 2663 | sl-br 2664 | sl-bs 2665 | sl-ca 2666 | sl-cs 2667 | sl-da 2668 | sl-de 2669 | sl-el 2670 | sl-en 2671 | sl-eo 2672 | sl-es 2673 | sl-et 2674 | sl-eu 2675 | sl-fa 2676 | sl-fi 2677 | sl-fr 2678 | sl-gl 2679 | sl-he 2680 | sl-hi 2681 | sl-hr 2682 | sl-hu 2683 | sl-hy 2684 | sl-id 2685 | sl-is 2686 | sl-it 2687 | sl-ja 2688 | sl-ka 2689 | sl-kk 2690 | sl-ko 2691 | sl-lt 2692 | sl-lv 2693 | sl-mk 2694 | sl-ml 2695 | sl-ms 2696 | sl-nl 2697 | sl-no 2698 | sl-pl 2699 | sl-pt 2700 | sl-pt_br 2701 | sl-ro 2702 | sl-ru 2703 | sl-si 2704 | sl-sk 2705 | sl-sq 2706 | sl-sr 2707 | sl-sv 2708 | sl-ta 2709 | sl-te 2710 | sl-th 2711 | sl-tl 2712 | sl-tr 2713 | sl-uk 2714 | sl-ur 2715 | sl-vi 2716 | sl-ze_en 2717 | sl-ze_zh 2718 | sl-zh_cn 2719 | sl-zh_tw 2720 | sq-af 2721 | sq-ar 2722 | sq-bg 2723 | sq-bn 2724 | sq-br 2725 | sq-bs 2726 | sq-ca 2727 | sq-cs 2728 | sq-da 2729 | sq-de 2730 | sq-el 2731 | sq-en 2732 | sq-eo 2733 | sq-es 2734 | sq-et 2735 | sq-eu 2736 | sq-fa 2737 | sq-fi 2738 | sq-fr 2739 | sq-gl 2740 | sq-he 2741 | sq-hi 2742 | sq-hr 2743 | sq-hu 2744 | sq-hy 2745 | sq-id 2746 | sq-is 2747 | sq-it 2748 | sq-ja 2749 | sq-ka 2750 | sq-ko 2751 | sq-lt 2752 | sq-lv 2753 | sq-mk 2754 | sq-ml 2755 | sq-ms 2756 | sq-nl 2757 | sq-no 2758 | sq-pl 2759 | sq-pt 2760 | sq-pt_br 2761 | sq-ro 2762 | sq-ru 2763 | sq-si 2764 | sq-sk 2765 | sq-sl 2766 | sq-sr 2767 | sq-sv 2768 | sq-ta 2769 | sq-te 2770 | sq-th 2771 | sq-tl 2772 | sq-tr 2773 | sq-uk 2774 | sq-ur 2775 | sq-vi 2776 | sq-ze_en 2777 | sq-ze_zh 2778 | sq-zh_cn 2779 | sq-zh_tw 2780 | sr-af 2781 | sr-ar 2782 | sr-bg 2783 | sr-bn 2784 | sr-br 2785 | sr-bs 2786 | sr-ca 2787 | sr-cs 2788 | sr-da 2789 | sr-de 2790 | sr-el 2791 | sr-en 2792 | sr-eo 2793 | sr-es 2794 | sr-et 2795 | sr-eu 2796 | sr-fa 2797 | sr-fi 2798 | sr-fr 2799 | sr-gl 2800 | sr-he 2801 | sr-hi 2802 | sr-hr 2803 | sr-hu 2804 | sr-hy 2805 | sr-id 2806 | sr-is 2807 | sr-it 2808 | sr-ja 2809 | sr-ka 2810 | sr-kk 2811 | sr-ko 2812 | sr-lt 2813 | sr-lv 2814 | sr-mk 2815 | sr-ml 2816 | sr-ms 2817 | sr-nl 2818 | sr-no 2819 | sr-pl 2820 | sr-pt 2821 | sr-pt_br 2822 | sr-ro 2823 | sr-ru 2824 | sr-si 2825 | sr-sk 2826 | sr-sl 2827 | sr-sq 2828 | sr-sv 2829 | sr-ta 2830 | sr-te 2831 | sr-th 2832 | sr-tl 2833 | sr-tr 2834 | sr-uk 2835 | sr-ur 2836 | sr-vi 2837 | sr-ze_en 2838 | sr-ze_zh 2839 | sr-zh_cn 2840 | sr-zh_tw 2841 | sv-af 2842 | sv-ar 2843 | sv-bg 2844 | sv-bn 2845 | sv-br 2846 | sv-bs 2847 | sv-ca 2848 | sv-cs 2849 | sv-da 2850 | sv-de 2851 | sv-el 2852 | sv-en 2853 | sv-eo 2854 | sv-es 2855 | sv-et 2856 | sv-eu 2857 | sv-fa 2858 | sv-fi 2859 | sv-fr 2860 | sv-gl 2861 | sv-he 2862 | sv-hi 2863 | sv-hr 2864 | sv-hu 2865 | sv-hy 2866 | sv-id 2867 | sv-is 2868 | sv-it 2869 | sv-ja 2870 | sv-ka 2871 | sv-kk 2872 | sv-ko 2873 | sv-lt 2874 | sv-lv 2875 | sv-mk 2876 | sv-ml 2877 | sv-ms 2878 | sv-nl 2879 | sv-no 2880 | sv-pl 2881 | sv-pt 2882 | sv-pt_br 2883 | sv-ro 2884 | sv-ru 2885 | sv-si 2886 | sv-sk 2887 | sv-sl 2888 | sv-sq 2889 | sv-sr 2890 | sv-ta 2891 | sv-te 2892 | sv-th 2893 | sv-tl 2894 | sv-tr 2895 | sv-uk 2896 | sv-ur 2897 | sv-vi 2898 | sv-ze_en 2899 | sv-ze_zh 2900 | sv-zh_cn 2901 | sv-zh_tw 2902 | ta-af 2903 | ta-ar 2904 | ta-bg 2905 | ta-bn 2906 | ta-bs 2907 | ta-cs 2908 | ta-da 2909 | ta-de 2910 | ta-el 2911 | ta-en 2912 | ta-es 2913 | ta-et 2914 | ta-eu 2915 | ta-fa 2916 | ta-fi 2917 | ta-fr 2918 | ta-he 2919 | ta-hi 2920 | ta-hr 2921 | ta-hu 2922 | ta-id 2923 | ta-is 2924 | ta-it 2925 | ta-ja 2926 | ta-ko 2927 | ta-lt 2928 | ta-lv 2929 | ta-mk 2930 | ta-ml 2931 | ta-ms 2932 | ta-nl 2933 | ta-no 2934 | ta-pl 2935 | ta-pt 2936 | ta-pt_br 2937 | ta-ro 2938 | ta-ru 2939 | ta-si 2940 | ta-sk 2941 | ta-sl 2942 | ta-sq 2943 | ta-sr 2944 | ta-sv 2945 | ta-te 2946 | ta-th 2947 | ta-tr 2948 | ta-vi 2949 | ta-ze_en 2950 | ta-ze_zh 2951 | ta-zh_cn 2952 | ta-zh_tw 2953 | te-ar 2954 | te-bg 2955 | te-bs 2956 | te-cs 2957 | te-da 2958 | te-de 2959 | te-el 2960 | te-en 2961 | te-es 2962 | te-et 2963 | te-eu 2964 | te-fa 2965 | te-fi 2966 | te-fr 2967 | te-he 2968 | te-hi 2969 | te-hr 2970 | te-hu 2971 | te-id 2972 | te-it 2973 | te-ja 2974 | te-ko 2975 | te-lt 2976 | te-lv 2977 | te-mk 2978 | te-ms 2979 | te-nl 2980 | te-no 2981 | te-pl 2982 | te-pt 2983 | te-pt_br 2984 | te-ro 2985 | te-ru 2986 | te-si 2987 | te-sk 2988 | te-sl 2989 | te-sq 2990 | te-sr 2991 | te-sv 2992 | te-ta 2993 | te-th 2994 | te-tr 2995 | te-vi 2996 | te-ze_en 2997 | te-zh_cn 2998 | te-zh_tw 2999 | th-af 3000 | th-ar 3001 | th-bg 3002 | th-bn 3003 | th-bs 3004 | th-ca 3005 | th-cs 3006 | th-da 3007 | th-de 3008 | th-el 3009 | th-en 3010 | th-eo 3011 | th-es 3012 | th-et 3013 | th-eu 3014 | th-fa 3015 | th-fi 3016 | th-fr 3017 | th-gl 3018 | th-he 3019 | th-hi 3020 | th-hr 3021 | th-hu 3022 | th-id 3023 | th-is 3024 | th-it 3025 | th-ja 3026 | th-ka 3027 | th-kk 3028 | th-ko 3029 | th-lt 3030 | th-lv 3031 | th-mk 3032 | th-ml 3033 | th-ms 3034 | th-nl 3035 | th-no 3036 | th-pl 3037 | th-pt 3038 | th-pt_br 3039 | th-ro 3040 | th-ru 3041 | th-si 3042 | th-sk 3043 | th-sl 3044 | th-sq 3045 | th-sr 3046 | th-sv 3047 | th-ta 3048 | th-te 3049 | th-tl 3050 | th-tr 3051 | th-uk 3052 | th-ur 3053 | th-vi 3054 | th-ze_en 3055 | th-ze_zh 3056 | th-zh_cn 3057 | th-zh_tw 3058 | tl-ar 3059 | tl-bg 3060 | tl-bn 3061 | tl-bs 3062 | tl-cs 3063 | tl-da 3064 | tl-de 3065 | tl-el 3066 | tl-en 3067 | tl-eo 3068 | tl-es 3069 | tl-et 3070 | tl-eu 3071 | tl-fa 3072 | tl-fi 3073 | tl-fr 3074 | tl-he 3075 | tl-hi 3076 | tl-hr 3077 | tl-hu 3078 | tl-id 3079 | tl-is 3080 | tl-it 3081 | tl-ja 3082 | tl-ka 3083 | tl-ko 3084 | tl-lt 3085 | tl-mk 3086 | tl-ml 3087 | tl-ms 3088 | tl-nl 3089 | tl-no 3090 | tl-pl 3091 | tl-pt 3092 | tl-pt_br 3093 | tl-ro 3094 | tl-ru 3095 | tl-si 3096 | tl-sk 3097 | tl-sl 3098 | tl-sq 3099 | tl-sr 3100 | tl-sv 3101 | tl-th 3102 | tl-tr 3103 | tl-uk 3104 | tl-vi 3105 | tl-zh_cn 3106 | tl-zh_tw 3107 | tr-af 3108 | tr-ar 3109 | tr-bg 3110 | tr-bn 3111 | tr-br 3112 | tr-bs 3113 | tr-ca 3114 | tr-cs 3115 | tr-da 3116 | tr-de 3117 | tr-el 3118 | tr-en 3119 | tr-eo 3120 | tr-es 3121 | tr-et 3122 | tr-eu 3123 | tr-fa 3124 | tr-fi 3125 | tr-fr 3126 | tr-gl 3127 | tr-he 3128 | tr-hi 3129 | tr-hr 3130 | tr-hu 3131 | tr-hy 3132 | tr-id 3133 | tr-is 3134 | tr-it 3135 | tr-ja 3136 | tr-ka 3137 | tr-kk 3138 | tr-ko 3139 | tr-lt 3140 | tr-lv 3141 | tr-mk 3142 | tr-ml 3143 | tr-ms 3144 | tr-nl 3145 | tr-no 3146 | tr-pl 3147 | tr-pt 3148 | tr-pt_br 3149 | tr-ro 3150 | tr-ru 3151 | tr-si 3152 | tr-sk 3153 | tr-sl 3154 | tr-sq 3155 | tr-sr 3156 | tr-sv 3157 | tr-ta 3158 | tr-te 3159 | tr-th 3160 | tr-tl 3161 | tr-uk 3162 | tr-ur 3163 | tr-vi 3164 | tr-ze_en 3165 | tr-ze_zh 3166 | tr-zh_cn 3167 | tr-zh_tw 3168 | uk-af 3169 | uk-ar 3170 | uk-bg 3171 | uk-bn 3172 | uk-br 3173 | uk-bs 3174 | uk-ca 3175 | uk-cs 3176 | uk-da 3177 | uk-de 3178 | uk-el 3179 | uk-en 3180 | uk-eo 3181 | uk-es 3182 | uk-et 3183 | uk-eu 3184 | uk-fa 3185 | uk-fi 3186 | uk-fr 3187 | uk-gl 3188 | uk-he 3189 | uk-hi 3190 | uk-hr 3191 | uk-hu 3192 | uk-id 3193 | uk-is 3194 | uk-it 3195 | uk-ja 3196 | uk-ka 3197 | uk-kk 3198 | uk-ko 3199 | uk-lt 3200 | uk-lv 3201 | uk-mk 3202 | uk-ml 3203 | uk-ms 3204 | uk-nl 3205 | uk-no 3206 | uk-pl 3207 | uk-pt 3208 | uk-pt_br 3209 | uk-ro 3210 | uk-ru 3211 | uk-si 3212 | uk-sk 3213 | uk-sl 3214 | uk-sq 3215 | uk-sr 3216 | uk-sv 3217 | uk-th 3218 | uk-tl 3219 | uk-tr 3220 | uk-ur 3221 | uk-vi 3222 | uk-ze_en 3223 | uk-ze_zh 3224 | uk-zh_cn 3225 | uk-zh_tw 3226 | ur-ar 3227 | ur-bg 3228 | ur-bn 3229 | ur-bs 3230 | ur-cs 3231 | ur-da 3232 | ur-de 3233 | ur-el 3234 | ur-en 3235 | ur-es 3236 | ur-et 3237 | ur-eu 3238 | ur-fa 3239 | ur-fi 3240 | ur-fr 3241 | ur-gl 3242 | ur-he 3243 | ur-hi 3244 | ur-hr 3245 | ur-hu 3246 | ur-id 3247 | ur-is 3248 | ur-it 3249 | ur-ja 3250 | ur-ka 3251 | ur-ko 3252 | ur-lt 3253 | ur-lv 3254 | ur-mk 3255 | ur-ml 3256 | ur-ms 3257 | ur-nl 3258 | ur-no 3259 | ur-pl 3260 | ur-pt 3261 | ur-pt_br 3262 | ur-ro 3263 | ur-ru 3264 | ur-si 3265 | ur-sk 3266 | ur-sl 3267 | ur-sq 3268 | ur-sr 3269 | ur-sv 3270 | ur-th 3271 | ur-tr 3272 | ur-uk 3273 | ur-vi 3274 | ur-zh_cn 3275 | ur-zh_tw 3276 | vi-af 3277 | vi-ar 3278 | vi-bg 3279 | vi-bn 3280 | vi-bs 3281 | vi-ca 3282 | vi-cs 3283 | vi-da 3284 | vi-de 3285 | vi-el 3286 | vi-en 3287 | vi-eo 3288 | vi-es 3289 | vi-et 3290 | vi-eu 3291 | vi-fa 3292 | vi-fi 3293 | vi-fr 3294 | vi-gl 3295 | vi-he 3296 | vi-hi 3297 | vi-hr 3298 | vi-hu 3299 | vi-id 3300 | vi-is 3301 | vi-it 3302 | vi-ja 3303 | vi-ka 3304 | vi-kk 3305 | vi-ko 3306 | vi-lt 3307 | vi-lv 3308 | vi-mk 3309 | vi-ml 3310 | vi-ms 3311 | vi-nl 3312 | vi-no 3313 | vi-pl 3314 | vi-pt 3315 | vi-pt_br 3316 | vi-ro 3317 | vi-ru 3318 | vi-si 3319 | vi-sk 3320 | vi-sl 3321 | vi-sq 3322 | vi-sr 3323 | vi-sv 3324 | vi-ta 3325 | vi-te 3326 | vi-th 3327 | vi-tl 3328 | vi-tr 3329 | vi-uk 3330 | vi-ur 3331 | vi-ze_en 3332 | vi-ze_zh 3333 | vi-zh_cn 3334 | vi-zh_tw 3335 | ze_en-af 3336 | ze_en-ar 3337 | ze_en-bg 3338 | ze_en-bn 3339 | ze_en-bs 3340 | ze_en-ca 3341 | ze_en-cs 3342 | ze_en-da 3343 | ze_en-de 3344 | ze_en-el 3345 | ze_en-en 3346 | ze_en-eo 3347 | ze_en-es 3348 | ze_en-et 3349 | ze_en-eu 3350 | ze_en-fa 3351 | ze_en-fi 3352 | ze_en-fr 3353 | ze_en-gl 3354 | ze_en-he 3355 | ze_en-hi 3356 | ze_en-hr 3357 | ze_en-hu 3358 | ze_en-id 3359 | ze_en-is 3360 | ze_en-it 3361 | ze_en-ja 3362 | ze_en-ka 3363 | ze_en-ko 3364 | ze_en-lt 3365 | ze_en-lv 3366 | ze_en-mk 3367 | ze_en-ml 3368 | ze_en-ms 3369 | ze_en-nl 3370 | ze_en-no 3371 | ze_en-pl 3372 | ze_en-pt 3373 | ze_en-pt_br 3374 | ze_en-ro 3375 | ze_en-ru 3376 | ze_en-si 3377 | ze_en-sk 3378 | ze_en-sl 3379 | ze_en-sq 3380 | ze_en-sr 3381 | ze_en-sv 3382 | ze_en-ta 3383 | ze_en-te 3384 | ze_en-th 3385 | ze_en-tr 3386 | ze_en-uk 3387 | ze_en-vi 3388 | ze_en-ze_zh 3389 | ze_en-zh_cn 3390 | ze_en-zh_tw 3391 | ze_zh-ar 3392 | ze_zh-bg 3393 | ze_zh-bn 3394 | ze_zh-bs 3395 | ze_zh-ca 3396 | ze_zh-cs 3397 | ze_zh-da 3398 | ze_zh-de 3399 | ze_zh-el 3400 | ze_zh-en 3401 | ze_zh-eo 3402 | ze_zh-es 3403 | ze_zh-et 3404 | ze_zh-eu 3405 | ze_zh-fa 3406 | ze_zh-fi 3407 | ze_zh-fr 3408 | ze_zh-gl 3409 | ze_zh-he 3410 | ze_zh-hi 3411 | ze_zh-hr 3412 | ze_zh-hu 3413 | ze_zh-id 3414 | ze_zh-is 3415 | ze_zh-it 3416 | ze_zh-ja 3417 | ze_zh-ka 3418 | ze_zh-ko 3419 | ze_zh-lt 3420 | ze_zh-lv 3421 | ze_zh-mk 3422 | ze_zh-ml 3423 | ze_zh-ms 3424 | ze_zh-nl 3425 | ze_zh-no 3426 | ze_zh-pl 3427 | ze_zh-pt 3428 | ze_zh-pt_br 3429 | ze_zh-ro 3430 | ze_zh-ru 3431 | ze_zh-si 3432 | ze_zh-sk 3433 | ze_zh-sl 3434 | ze_zh-sq 3435 | ze_zh-sr 3436 | ze_zh-sv 3437 | ze_zh-ta 3438 | ze_zh-th 3439 | ze_zh-tr 3440 | ze_zh-uk 3441 | ze_zh-vi 3442 | ze_zh-ze_en 3443 | ze_zh-zh_cn 3444 | ze_zh-zh_tw 3445 | zh_cn-af 3446 | zh_cn-ar 3447 | zh_cn-bg 3448 | zh_cn-bn 3449 | zh_cn-br 3450 | zh_cn-bs 3451 | zh_cn-ca 3452 | zh_cn-cs 3453 | zh_cn-da 3454 | zh_cn-de 3455 | zh_cn-el 3456 | zh_cn-en 3457 | zh_cn-eo 3458 | zh_cn-es 3459 | zh_cn-et 3460 | zh_cn-eu 3461 | zh_cn-fa 3462 | zh_cn-fi 3463 | zh_cn-fr 3464 | zh_cn-gl 3465 | zh_cn-he 3466 | zh_cn-hi 3467 | zh_cn-hr 3468 | zh_cn-hu 3469 | zh_cn-hy 3470 | zh_cn-id 3471 | zh_cn-is 3472 | zh_cn-it 3473 | zh_cn-ja 3474 | zh_cn-ka 3475 | zh_cn-kk 3476 | zh_cn-ko 3477 | zh_cn-lt 3478 | zh_cn-lv 3479 | zh_cn-mk 3480 | zh_cn-ml 3481 | zh_cn-ms 3482 | zh_cn-nl 3483 | zh_cn-no 3484 | zh_cn-pl 3485 | zh_cn-pt 3486 | zh_cn-pt_br 3487 | zh_cn-ro 3488 | zh_cn-ru 3489 | zh_cn-si 3490 | zh_cn-sk 3491 | zh_cn-sl 3492 | zh_cn-sq 3493 | zh_cn-sr 3494 | zh_cn-sv 3495 | zh_cn-ta 3496 | zh_cn-te 3497 | zh_cn-th 3498 | zh_cn-tl 3499 | zh_cn-tr 3500 | zh_cn-uk 3501 | zh_cn-ur 3502 | zh_cn-vi 3503 | zh_cn-ze_en 3504 | zh_cn-ze_zh 3505 | zh_cn-zh_tw 3506 | zh_tw-af 3507 | zh_tw-ar 3508 | zh_tw-bg 3509 | zh_tw-bn 3510 | zh_tw-bs 3511 | zh_tw-ca 3512 | zh_tw-cs 3513 | zh_tw-da 3514 | zh_tw-de 3515 | zh_tw-el 3516 | zh_tw-en 3517 | zh_tw-eo 3518 | zh_tw-es 3519 | zh_tw-et 3520 | zh_tw-eu 3521 | zh_tw-fa 3522 | zh_tw-fi 3523 | zh_tw-fr 3524 | zh_tw-gl 3525 | zh_tw-he 3526 | zh_tw-hi 3527 | zh_tw-hr 3528 | zh_tw-hu 3529 | zh_tw-hy 3530 | zh_tw-id 3531 | zh_tw-is 3532 | zh_tw-it 3533 | zh_tw-ja 3534 | zh_tw-ka 3535 | zh_tw-ko 3536 | zh_tw-lt 3537 | zh_tw-lv 3538 | zh_tw-mk 3539 | zh_tw-ml 3540 | zh_tw-ms 3541 | zh_tw-nl 3542 | zh_tw-no 3543 | zh_tw-pl 3544 | zh_tw-pt 3545 | zh_tw-pt_br 3546 | zh_tw-ro 3547 | zh_tw-ru 3548 | zh_tw-si 3549 | zh_tw-sk 3550 | zh_tw-sl 3551 | zh_tw-sq 3552 | zh_tw-sr 3553 | zh_tw-sv 3554 | zh_tw-ta 3555 | zh_tw-te 3556 | zh_tw-th 3557 | zh_tw-tl 3558 | zh_tw-tr 3559 | zh_tw-uk 3560 | zh_tw-ur 3561 | zh_tw-vi 3562 | zh_tw-ze_en 3563 | zh_tw-ze_zh 3564 | zh_tw-zh_cn 3565 | --------------------------------------------------------------------------------