Spaces:
Paused
Paused
feat: Rearranged the folders for better fastapi compatibility
Browse files- .gitignore +0 -0
- {modules β app}/app.py +0 -0
- app/main.py +0 -0
- {modules β app}/nllb54b.py +0 -0
- main.py +0 -330
- modules/STT & TTS/all_langs.tsv +0 -1198
- modules/templates/index.html +0 -34
- modules/templates/script.js +0 -89
- modules/templates/style.css +0 -59
- modules/templates/translator.html +0 -403
- static/index.html +0 -35
- static/script.js +0 -287
- static/style.css +0 -68
- {modules β translation_models}/flores200_codes.py +0 -0
- {modules β translation_models}/lid218e.bin +0 -0
- {modules β translation_models}/sematrans-1.2B/config.json +0 -0
- {modules β translation_models}/sematrans-1.2B/model.bin +0 -0
- {modules β translation_models}/sematrans-1.2B/shared_vocabulary.txt +0 -0
- {modules β translation_models}/sematrans-3.3B/config.json +0 -0
- {modules β translation_models}/sematrans-3.3B/model.bin +0 -0
- {modules β translation_models}/sematrans-3.3B/shared_vocabulary.txt +0 -0
- {modules β translation_models}/spm.model +0 -0
- {modules β translation_models}/translator_all_langs.tsv +0 -0
.gitignore
ADDED
|
File without changes
|
{modules β app}/app.py
RENAMED
|
File without changes
|
app/main.py
ADDED
|
File without changes
|
{modules β app}/nllb54b.py
RENAMED
|
File without changes
|
main.py
DELETED
|
@@ -1,330 +0,0 @@
|
|
| 1 |
-
'''
|
| 2 |
-
Created By Lewis Kamau Kimaru
|
| 3 |
-
Sema translator fastapi implementation
|
| 4 |
-
January 2024
|
| 5 |
-
Docker deployment
|
| 6 |
-
'''
|
| 7 |
-
|
| 8 |
-
from fastapi import FastAPI, HTTPException, Request, Depends
|
| 9 |
-
from fastapi.middleware.cors import CORSMiddleware
|
| 10 |
-
from fastapi.responses import HTMLResponse
|
| 11 |
-
import uvicorn
|
| 12 |
-
|
| 13 |
-
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
|
| 14 |
-
from pydantic import BaseModel
|
| 15 |
-
from pymongo import MongoClient
|
| 16 |
-
import jwt
|
| 17 |
-
from jwt import encode as jwt_encode
|
| 18 |
-
from bson import ObjectId
|
| 19 |
-
|
| 20 |
-
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, pipeline
|
| 21 |
-
import ctranslate2
|
| 22 |
-
import sentencepiece as spm
|
| 23 |
-
import fasttext
|
| 24 |
-
import torch
|
| 25 |
-
|
| 26 |
-
from datetime import datetime
|
| 27 |
-
import gradio as gr
|
| 28 |
-
import pytz
|
| 29 |
-
import time
|
| 30 |
-
import os
|
| 31 |
-
|
| 32 |
-
app = FastAPI()
|
| 33 |
-
|
| 34 |
-
origins = ["*"]
|
| 35 |
-
|
| 36 |
-
app.add_middleware(
|
| 37 |
-
CORSMiddleware,
|
| 38 |
-
allow_origins=origins,
|
| 39 |
-
allow_credentials=False,
|
| 40 |
-
allow_methods=["*"],
|
| 41 |
-
allow_headers=["*"],
|
| 42 |
-
)
|
| 43 |
-
|
| 44 |
-
fasttext.FastText.eprint = lambda x: None
|
| 45 |
-
|
| 46 |
-
# set this key as an environment variable
|
| 47 |
-
os.environ["HUGGINGFACEHUB_API_TOKEN"] = st.secrets['huggingface_token']
|
| 48 |
-
|
| 49 |
-
# User interface
|
| 50 |
-
templates_folder = os.path.join(os.path.dirname(__file__), "templates")
|
| 51 |
-
|
| 52 |
-
# Authentication
|
| 53 |
-
class User(BaseModel):
|
| 54 |
-
username: str = None # Make the username field optional
|
| 55 |
-
email: str
|
| 56 |
-
password: str
|
| 57 |
-
|
| 58 |
-
# Connect to the MongoDB database
|
| 59 |
-
client = MongoClient("mongodb://localhost:27017")
|
| 60 |
-
db = client["mydatabase"]
|
| 61 |
-
users_collection = db["users"]
|
| 62 |
-
|
| 63 |
-
# Secret key for signing the token
|
| 64 |
-
SECRET_KEY = "helloworld"
|
| 65 |
-
security = HTTPBearer()
|
| 66 |
-
|
| 67 |
-
#Implement the login route:
|
| 68 |
-
|
| 69 |
-
@app.post("/login")
|
| 70 |
-
def login(user: User):
|
| 71 |
-
# Check if user exists in the database
|
| 72 |
-
user_data = users_collection.find_one(
|
| 73 |
-
{"email": user.email, "password": user.password}
|
| 74 |
-
)
|
| 75 |
-
if user_data:
|
| 76 |
-
# Generate a token
|
| 77 |
-
token = generate_token(user.email)
|
| 78 |
-
# Convert ObjectId to string
|
| 79 |
-
user_data["_id"] = str(user_data["_id"])
|
| 80 |
-
# Store user details and token in local storage
|
| 81 |
-
user_data["token"] = token
|
| 82 |
-
return user_data
|
| 83 |
-
return {"message": "Invalid email or password"}
|
| 84 |
-
|
| 85 |
-
#Implement the registration route:
|
| 86 |
-
@app.post("/register")
|
| 87 |
-
def register(user: User):
|
| 88 |
-
# Check if user already exists in the database
|
| 89 |
-
existing_user = users_collection.find_one({"email": user.email})
|
| 90 |
-
if existing_user:
|
| 91 |
-
return {"message": "User already exists"}
|
| 92 |
-
#Insert the new user into the database
|
| 93 |
-
user_dict = user.dict()
|
| 94 |
-
users_collection.insert_one(user_dict)
|
| 95 |
-
# Generate a token
|
| 96 |
-
token = generate_token(user.email)
|
| 97 |
-
# Convert ObjectId to string
|
| 98 |
-
user_dict["_id"] = str(user_dict["_id"])
|
| 99 |
-
# Store user details and token in local storage
|
| 100 |
-
user_dict["token"] = token
|
| 101 |
-
return user_dict
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
#Implement the `/api/user` route to fetch user data based on the JWT token
|
| 105 |
-
@app.get("/api/user")
|
| 106 |
-
def get_user(credentials: HTTPAuthorizationCredentials = Depends(security)):
|
| 107 |
-
# Extract the token from the Authorization header
|
| 108 |
-
token = credentials.credentials
|
| 109 |
-
# Authenticate and retrieve the user data from the database based on the token
|
| 110 |
-
# Here, you would implement the authentication logic and fetch user details
|
| 111 |
-
# based on the token from the database or any other authentication mechanism
|
| 112 |
-
# For demonstration purposes, assuming the user data is stored in local storage
|
| 113 |
-
# Note: Local storage is not accessible from server-side code
|
| 114 |
-
# This is just a placeholder to demonstrate the concept
|
| 115 |
-
user_data = {
|
| 116 |
-
"username": "John Doe",
|
| 117 |
-
"email": "johndoe@example.com"
|
| 118 |
-
}
|
| 119 |
-
if user_data["username"] and user_data["email"]:
|
| 120 |
-
return user_data
|
| 121 |
-
raise HTTPException(status_code=401, detail="Invalid token")
|
| 122 |
-
|
| 123 |
-
#Define a helper function to generate a JWT token
|
| 124 |
-
def generate_token(email: str) -> str:
|
| 125 |
-
payload = {"email": email}
|
| 126 |
-
token = jwt_encode(payload, SECRET_KEY, algorithm="HS256")
|
| 127 |
-
return token
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
# Get time of request
|
| 131 |
-
|
| 132 |
-
def get_time():
|
| 133 |
-
nairobi_timezone = pytz.timezone('Africa/Nairobi')
|
| 134 |
-
current_time_nairobi = datetime.now(nairobi_timezone)
|
| 135 |
-
|
| 136 |
-
curr_day = current_time_nairobi.strftime('%A')
|
| 137 |
-
curr_date = current_time_nairobi.strftime('%Y-%m-%d')
|
| 138 |
-
curr_time = current_time_nairobi.strftime('%H:%M:%S')
|
| 139 |
-
|
| 140 |
-
full_date = f"{curr_day} | {curr_date} | {curr_time}"
|
| 141 |
-
return full_date, curr_time
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
def load_models():
|
| 145 |
-
# build model and tokenizer
|
| 146 |
-
model_name_dict = {
|
| 147 |
-
#'nllb-distilled-600M': 'facebook/nllb-200-distilled-600M',
|
| 148 |
-
#'nllb-1.3B': 'facebook/nllb-200-1.3B',
|
| 149 |
-
#'nllb-distilled-1.3B': 'facebook/nllb-200-distilled-1.3B',
|
| 150 |
-
#'nllb-3.3B': 'facebook/nllb-200-3.3B',
|
| 151 |
-
'nllb-moe-54b': 'facebook/nllb-moe-54b',
|
| 152 |
-
}
|
| 153 |
-
|
| 154 |
-
model_dict = {}
|
| 155 |
-
|
| 156 |
-
for call_name, real_name in model_name_dict.items():
|
| 157 |
-
print('\tLoading model: %s' % call_name)
|
| 158 |
-
model = AutoModelForSeq2SeqLM.from_pretrained(real_name)
|
| 159 |
-
tokenizer = AutoTokenizer.from_pretrained(real_name)
|
| 160 |
-
model_dict[call_name+'_model'] = model
|
| 161 |
-
model_dict[call_name+'_tokenizer'] = tokenizer
|
| 162 |
-
|
| 163 |
-
return model_dict
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
# Load the model and tokenizer ..... only once!
|
| 167 |
-
beam_size = 1 # change to a smaller value for faster inference
|
| 168 |
-
device = "cpu" # or "cuda"
|
| 169 |
-
|
| 170 |
-
# Language Prediction model
|
| 171 |
-
print("\nimporting Language Prediction model")
|
| 172 |
-
lang_model_file = "lid218e.bin"
|
| 173 |
-
lang_model_full_path = os.path.join(os.path.dirname(__file__), lang_model_file)
|
| 174 |
-
lang_model = fasttext.load_model(lang_model_full_path)
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
# Load the source SentencePiece model
|
| 178 |
-
print("\nimporting SentencePiece model")
|
| 179 |
-
sp_model_file = "spm.model"
|
| 180 |
-
sp_model_full_path = os.path.join(os.path.dirname(__file__), sp_model_file)
|
| 181 |
-
sp = spm.SentencePieceProcessor()
|
| 182 |
-
sp.load(sp_model_full_path)
|
| 183 |
-
|
| 184 |
-
'''
|
| 185 |
-
# Import The Translator model
|
| 186 |
-
print("\nimporting Translator model")
|
| 187 |
-
ct_model_file = "sematrans-3.3B"
|
| 188 |
-
ct_model_full_path = os.path.join(os.path.dirname(__file__), ct_model_file)
|
| 189 |
-
translator = ctranslate2.Translator(ct_model_full_path, device)
|
| 190 |
-
'''
|
| 191 |
-
print("\nimporting Translator model")
|
| 192 |
-
model_dict = load_models()
|
| 193 |
-
|
| 194 |
-
print('\nDone importing models\n')
|
| 195 |
-
|
| 196 |
-
|
| 197 |
-
def translate_detect(userinput: str, target_lang: str):
|
| 198 |
-
source_sents = [userinput]
|
| 199 |
-
source_sents = [sent.strip() for sent in source_sents]
|
| 200 |
-
target_prefix = [[target_lang]] * len(source_sents)
|
| 201 |
-
|
| 202 |
-
# Predict the source language
|
| 203 |
-
predictions = lang_model.predict(source_sents[0], k=1)
|
| 204 |
-
source_lang = predictions[0][0].replace('__label__', '')
|
| 205 |
-
|
| 206 |
-
# Subword the source sentences
|
| 207 |
-
source_sents_subworded = sp.encode(source_sents, out_type=str)
|
| 208 |
-
source_sents_subworded = [[source_lang] + sent + ["</s>"] for sent in source_sents_subworded]
|
| 209 |
-
|
| 210 |
-
# Translate the source sentences
|
| 211 |
-
translations = translator.translate_batch(
|
| 212 |
-
source_sents_subworded,
|
| 213 |
-
batch_type="tokens",
|
| 214 |
-
max_batch_size=2024,
|
| 215 |
-
beam_size=beam_size,
|
| 216 |
-
target_prefix=target_prefix,
|
| 217 |
-
)
|
| 218 |
-
translations = [translation[0]['tokens'] for translation in translations]
|
| 219 |
-
|
| 220 |
-
# Desubword the target sentences
|
| 221 |
-
translations_desubword = sp.decode(translations)
|
| 222 |
-
translations_desubword = [sent[len(target_lang):] for sent in translations_desubword]
|
| 223 |
-
|
| 224 |
-
# Return the source language and the translated text
|
| 225 |
-
return source_lang, translations_desubword
|
| 226 |
-
|
| 227 |
-
def translate_enter(userinput: str, source_lang: str, target_lang: str):
|
| 228 |
-
source_sents = [userinput]
|
| 229 |
-
source_sents = [sent.strip() for sent in source_sents]
|
| 230 |
-
target_prefix = [[target_lang]] * len(source_sents)
|
| 231 |
-
|
| 232 |
-
# Subword the source sentences
|
| 233 |
-
source_sents_subworded = sp.encode(source_sents, out_type=str)
|
| 234 |
-
source_sents_subworded = [[source_lang] + sent + ["</s>"] for sent in source_sents_subworded]
|
| 235 |
-
|
| 236 |
-
# Translate the source sentences
|
| 237 |
-
translations = translator.translate_batch(source_sents_subworded, batch_type="tokens", max_batch_size=2024, beam_size=beam_size, target_prefix=target_prefix)
|
| 238 |
-
translations = [translation[0]['tokens'] for translation in translations]
|
| 239 |
-
|
| 240 |
-
# Desubword the target sentences
|
| 241 |
-
translations_desubword = sp.decode(translations)
|
| 242 |
-
translations_desubword = [sent[len(target_lang):] for sent in translations_desubword]
|
| 243 |
-
|
| 244 |
-
# Return the source language and the translated text
|
| 245 |
-
return translations_desubword[0]
|
| 246 |
-
|
| 247 |
-
def translate_faster(userinput3: str, source_lang3: str, target_lang3: str):
|
| 248 |
-
if len(model_dict) == 2:
|
| 249 |
-
model_name = 'nllb-moe-54b'
|
| 250 |
-
|
| 251 |
-
start_time = time.time()
|
| 252 |
-
|
| 253 |
-
model = model_dict[model_name + '_model']
|
| 254 |
-
tokenizer = model_dict[model_name + '_tokenizer']
|
| 255 |
-
|
| 256 |
-
translator = pipeline('translation', model=model, tokenizer=tokenizer, src_lang=source_lang3, tgt_lang=target_lang3)
|
| 257 |
-
output = translator(userinput3, max_length=400)
|
| 258 |
-
end_time = time.time()
|
| 259 |
-
|
| 260 |
-
output = output[0]['translation_text']
|
| 261 |
-
result = {'inference_time': end_time - start_time,
|
| 262 |
-
'source': source,
|
| 263 |
-
'target': target,
|
| 264 |
-
'result': output}
|
| 265 |
-
return result
|
| 266 |
-
|
| 267 |
-
@app.get("/", response_class=HTMLResponse)
|
| 268 |
-
async def read_root(request: Request):
|
| 269 |
-
return HTMLResponse(content=open(os.path.join(templates_folder, "translator.html"), "r").read(), status_code=200)
|
| 270 |
-
|
| 271 |
-
|
| 272 |
-
@app.post("/translate_detect/")
|
| 273 |
-
async def translate_detect_endpoint(request: Request):
|
| 274 |
-
datad = await request.json()
|
| 275 |
-
userinputd = datad.get("userinput")
|
| 276 |
-
target_langd = datad.get("target_lang")
|
| 277 |
-
dfull_date = get_time()[0]
|
| 278 |
-
print(f"\nrequest: {dfull_date}\nTarget Language; {target_langd}, User Input: {userinputd}\n")
|
| 279 |
-
|
| 280 |
-
if not userinputd or not target_langd:
|
| 281 |
-
raise HTTPException(status_code=422, detail="Both 'userinput' and 'target_lang' are required.")
|
| 282 |
-
|
| 283 |
-
source_langd, translated_text_d = translate_detect(userinputd, target_langd)
|
| 284 |
-
dcurrent_time = get_time()[1]
|
| 285 |
-
print(f"\nresponse: {dcurrent_time}; ... Source_language: {source_langd}, Translated Text: {translated_text_d}\n\n")
|
| 286 |
-
return {
|
| 287 |
-
"source_language": source_langd,
|
| 288 |
-
"translated_text": translated_text_d[0],
|
| 289 |
-
}
|
| 290 |
-
|
| 291 |
-
|
| 292 |
-
@app.post("/translate_enter/")
|
| 293 |
-
async def translate_enter_endpoint(request: Request):
|
| 294 |
-
datae = await request.json()
|
| 295 |
-
userinpute = datae.get("userinput")
|
| 296 |
-
source_lange = datae.get("source_lang")
|
| 297 |
-
target_lange = datae.get("target_lang")
|
| 298 |
-
efull_date = get_time()[0]
|
| 299 |
-
print(f"\nrequest: {efull_date}\nSource_language; {source_lange}, Target Language; {target_lange}, User Input: {userinpute}\n")
|
| 300 |
-
|
| 301 |
-
if not userinpute or not target_lange:
|
| 302 |
-
raise HTTPException(status_code=422, detail="'userinput' 'sourc_lang'and 'target_lang' are required.")
|
| 303 |
-
|
| 304 |
-
translated_text_e = translate_enter(userinpute, source_lange, target_lange)
|
| 305 |
-
ecurrent_time = get_time()[1]
|
| 306 |
-
print(f"\nresponse: {ecurrent_time}; ... Translated Text: {translated_text_e}\n\n")
|
| 307 |
-
return {
|
| 308 |
-
"translated_text": translated_text_e,
|
| 309 |
-
}
|
| 310 |
-
|
| 311 |
-
@app.post("/translate_faster/")
|
| 312 |
-
async def translate_faster_endpoint(request: Request):
|
| 313 |
-
dataf = await request.json()
|
| 314 |
-
userinputf = datae.get("userinput")
|
| 315 |
-
source_langf = datae.get("source_lang")
|
| 316 |
-
target_langf = datae.get("target_lang")
|
| 317 |
-
ffull_date = get_time()[0]
|
| 318 |
-
print(f"\nrequest: {ffull_date}\nSource_language; {source_langf}, Target Language; {target_langf}, User Input: {userinputf}\n")
|
| 319 |
-
|
| 320 |
-
if not userinputf or not target_langf:
|
| 321 |
-
raise HTTPException(status_code=422, detail="'userinput' 'sourc_lang'and 'target_lang' are required.")
|
| 322 |
-
|
| 323 |
-
translated_text_f = translate_faster(userinputf, source_langf, target_langf)
|
| 324 |
-
fcurrent_time = get_time()[1]
|
| 325 |
-
print(f"\nresponse: {fcurrent_time}; ... Translated Text: {translated_text_f}\n\n")
|
| 326 |
-
return {
|
| 327 |
-
"translated_text": translated_text_f,
|
| 328 |
-
}
|
| 329 |
-
|
| 330 |
-
print("\nAPI started successfully .......\n")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
modules/STT & TTS/all_langs.tsv
DELETED
|
@@ -1,1198 +0,0 @@
|
|
| 1 |
-
abi Abidji
|
| 2 |
-
abk Abkhaz
|
| 3 |
-
abp Ayta, Abellen
|
| 4 |
-
aca Achagua
|
| 5 |
-
acd Gikyode
|
| 6 |
-
ace Aceh
|
| 7 |
-
acf Lesser Antillean French Creole
|
| 8 |
-
ach Acholi
|
| 9 |
-
acn Achang
|
| 10 |
-
acr Achi
|
| 11 |
-
acu Achuar-Shiwiar
|
| 12 |
-
ade Adele
|
| 13 |
-
adh Jopadhola
|
| 14 |
-
adj Adioukrou
|
| 15 |
-
adx Tibetan, Amdo
|
| 16 |
-
aeu Akeu
|
| 17 |
-
afr Afrikaans
|
| 18 |
-
agd Agarabi
|
| 19 |
-
agg Angor
|
| 20 |
-
agn Agutaynen
|
| 21 |
-
agr AwajΓΊn
|
| 22 |
-
agu Awakateko
|
| 23 |
-
agx Aghul
|
| 24 |
-
aha Ahanta
|
| 25 |
-
ahk Akha
|
| 26 |
-
aia Arosi
|
| 27 |
-
aka Akan
|
| 28 |
-
akb Batak Angkola
|
| 29 |
-
ake Akawaio
|
| 30 |
-
akp Siwu
|
| 31 |
-
alj Alangan
|
| 32 |
-
alp Alune
|
| 33 |
-
alt Altai, Southern
|
| 34 |
-
alz Alur
|
| 35 |
-
ame Yaneshaβ
|
| 36 |
-
amf Hamer-Banna
|
| 37 |
-
amh Amharic
|
| 38 |
-
ami Amis
|
| 39 |
-
amk Ambai
|
| 40 |
-
ann Obolo
|
| 41 |
-
any Anyin
|
| 42 |
-
aoz Uab Meto
|
| 43 |
-
apb Saβa
|
| 44 |
-
apr Arop-Lokep
|
| 45 |
-
ara Arabic
|
| 46 |
-
arl Arabela
|
| 47 |
-
asa Asu
|
| 48 |
-
asg Cishingini
|
| 49 |
-
asm Assamese
|
| 50 |
-
ast Asturian
|
| 51 |
-
ata Pele-Ata
|
| 52 |
-
atb Zaiwa
|
| 53 |
-
atg Ivbie North-Okpela-Arhe
|
| 54 |
-
ati AttiΓ©
|
| 55 |
-
atq Aralle-Tabulahan
|
| 56 |
-
ava Avar
|
| 57 |
-
avn Avatime
|
| 58 |
-
avu Avokaya
|
| 59 |
-
awa Awadhi
|
| 60 |
-
awb Awa
|
| 61 |
-
ayo Ayoreo
|
| 62 |
-
ayr Aymara, Central
|
| 63 |
-
ayz Mai Brat
|
| 64 |
-
azb Azerbaijani, South
|
| 65 |
-
azg Amuzgo, San Pedro Amuzgos
|
| 66 |
-
azj-script_cyrillic Azerbaijani, North
|
| 67 |
-
azj-script_latin Azerbaijani, North
|
| 68 |
-
azz Nahuatl, Highland Puebla
|
| 69 |
-
bak Bashkort
|
| 70 |
-
bam Bamanankan
|
| 71 |
-
ban Bali
|
| 72 |
-
bao Waimaha
|
| 73 |
-
bas Basaa
|
| 74 |
-
bav Vengo
|
| 75 |
-
bba Baatonum
|
| 76 |
-
bbb Barai
|
| 77 |
-
bbc Batak Toba
|
| 78 |
-
bbo KonabΓ©rΓ©
|
| 79 |
-
bcc-script_arabic Balochi, Southern
|
| 80 |
-
bcc-script_latin Balochi, Southern
|
| 81 |
-
bcl Bikol, Central
|
| 82 |
-
bcw Bana
|
| 83 |
-
bdg Bonggi
|
| 84 |
-
bdh Baka
|
| 85 |
-
bdq Bahnar
|
| 86 |
-
bdu Oroko
|
| 87 |
-
bdv Bodo Parja
|
| 88 |
-
beh Biali
|
| 89 |
-
bel Belarusian
|
| 90 |
-
bem Bemba
|
| 91 |
-
ben Bengali
|
| 92 |
-
bep Behoa
|
| 93 |
-
bex Jur Modo
|
| 94 |
-
bfa Bari
|
| 95 |
-
bfo Birifor, Malba
|
| 96 |
-
bfy Bagheli
|
| 97 |
-
bfz Pahari, Mahasu
|
| 98 |
-
bgc Haryanvi
|
| 99 |
-
bgq Bagri
|
| 100 |
-
bgr Chin, Bawm
|
| 101 |
-
bgt Bughotu
|
| 102 |
-
bgw Bhatri
|
| 103 |
-
bha Bharia
|
| 104 |
-
bht Bhattiyali
|
| 105 |
-
bhz Bada
|
| 106 |
-
bib Bisa
|
| 107 |
-
bim Bimoba
|
| 108 |
-
bis Bislama
|
| 109 |
-
biv Birifor, Southern
|
| 110 |
-
bjr Binumarien
|
| 111 |
-
bjv Bedjond
|
| 112 |
-
bjw BakwΓ©
|
| 113 |
-
bjz Baruga
|
| 114 |
-
bkd Binukid
|
| 115 |
-
bkv Bekwarra
|
| 116 |
-
blh Kuwaa
|
| 117 |
-
blt Tai Dam
|
| 118 |
-
blx Ayta, Mag-Indi
|
| 119 |
-
blz Balantak
|
| 120 |
-
bmq Bomu
|
| 121 |
-
bmr Muinane
|
| 122 |
-
bmu Somba-Siawari
|
| 123 |
-
bmv Bum
|
| 124 |
-
bng Benga
|
| 125 |
-
bno Bantoanon
|
| 126 |
-
bnp Bola
|
| 127 |
-
boa Bora
|
| 128 |
-
bod Tibetan, Central
|
| 129 |
-
boj Anjam
|
| 130 |
-
bom Berom
|
| 131 |
-
bor BorΓ΄ro
|
| 132 |
-
bos Bosnian
|
| 133 |
-
bov Tuwuli
|
| 134 |
-
box Buamu
|
| 135 |
-
bpr Blaan, Koronadal
|
| 136 |
-
bps Blaan, Sarangani
|
| 137 |
-
bqc Boko
|
| 138 |
-
bqi BakhtiΓ’ri
|
| 139 |
-
bqj Bandial
|
| 140 |
-
bqp BisΓ£
|
| 141 |
-
bre Breton
|
| 142 |
-
bru Bru, Eastern
|
| 143 |
-
bsc Oniyan
|
| 144 |
-
bsq Bassa
|
| 145 |
-
bss Akoose
|
| 146 |
-
btd Batak Dairi
|
| 147 |
-
bts Batak Simalungun
|
| 148 |
-
btt Bete-Bendi
|
| 149 |
-
btx Batak Karo
|
| 150 |
-
bud Ntcham
|
| 151 |
-
bul Bulgarian
|
| 152 |
-
bus Bokobaru
|
| 153 |
-
bvc Baelelea
|
| 154 |
-
bvz Bauzi
|
| 155 |
-
bwq Bobo MadarΓ©, Southern
|
| 156 |
-
bwu Buli
|
| 157 |
-
byr Yipma
|
| 158 |
-
bzh Buang, Mapos
|
| 159 |
-
bzi Bisu
|
| 160 |
-
bzj Belize English Creole
|
| 161 |
-
caa Chβortiβ
|
| 162 |
-
cab Garifuna
|
| 163 |
-
cac-dialect_sanmateoixtatan Chuj
|
| 164 |
-
cac-dialect_sansebastiancoatan Chuj
|
| 165 |
-
cak-dialect_central Kaqchikel
|
| 166 |
-
cak-dialect_santamariadejesus Kaqchikel
|
| 167 |
-
cak-dialect_santodomingoxenacoj Kaqchikel
|
| 168 |
-
cak-dialect_southcentral Kaqchikel
|
| 169 |
-
cak-dialect_western Kaqchikel
|
| 170 |
-
cak-dialect_yepocapa Kaqchikel
|
| 171 |
-
cap Chipaya
|
| 172 |
-
car Carib
|
| 173 |
-
cas TsimanΓ©
|
| 174 |
-
cat Catalan
|
| 175 |
-
cax Chiquitano
|
| 176 |
-
cbc Carapana
|
| 177 |
-
cbi Chachi
|
| 178 |
-
cbr Kakataibo-Kashibo
|
| 179 |
-
cbs Kashinawa
|
| 180 |
-
cbt Shawi
|
| 181 |
-
cbu Kandozi-Chapra
|
| 182 |
-
cbv Cacua
|
| 183 |
-
cce Chopi
|
| 184 |
-
cco Chinantec, Comaltepec
|
| 185 |
-
cdj Churahi
|
| 186 |
-
ceb Cebuano
|
| 187 |
-
ceg Chamacoco
|
| 188 |
-
cek Chin, Eastern Khumi
|
| 189 |
-
ces Czech
|
| 190 |
-
cfm Chin, Falam
|
| 191 |
-
cgc Kagayanen
|
| 192 |
-
che Chechen
|
| 193 |
-
chf Chontal, Tabasco
|
| 194 |
-
chv Chuvash
|
| 195 |
-
chz Chinantec, OzumacΓn
|
| 196 |
-
cjo AshΓ©ninka, Pajonal
|
| 197 |
-
cjp CabΓ©car
|
| 198 |
-
cjs Shor
|
| 199 |
-
ckb Kurdish, Central
|
| 200 |
-
cko Anufo
|
| 201 |
-
ckt Chukchi
|
| 202 |
-
cla Ron
|
| 203 |
-
cle Chinantec, Lealao
|
| 204 |
-
cly Chatino, Eastern Highland
|
| 205 |
-
cme Cerma
|
| 206 |
-
cmn-script_simplified Chinese, Mandarin
|
| 207 |
-
cmo-script_khmer Mnong, Central
|
| 208 |
-
cmo-script_latin Mnong, Central
|
| 209 |
-
cmr Mro-Khimi
|
| 210 |
-
cnh Chin, Hakha
|
| 211 |
-
cni AshΓ‘ninka
|
| 212 |
-
cnl Chinantec, Lalana
|
| 213 |
-
cnt Chinantec, Tepetotutla
|
| 214 |
-
coe Koreguaje
|
| 215 |
-
cof Tsafiki
|
| 216 |
-
cok Cora, Santa Teresa
|
| 217 |
-
con CofΓ‘n
|
| 218 |
-
cot Caquinte
|
| 219 |
-
cou Wamey
|
| 220 |
-
cpa Chinantec, Palantla
|
| 221 |
-
cpb AshΓ©ninka, Ucayali-YurΓΊa
|
| 222 |
-
cpu AshΓ©ninka, Pichis
|
| 223 |
-
crh Crimean Tatar
|
| 224 |
-
crk-script_latin Cree, Plains
|
| 225 |
-
crk-script_syllabics Cree, Plains
|
| 226 |
-
crn Cora, El Nayar
|
| 227 |
-
crq Chorote, Iyoβwujwa
|
| 228 |
-
crs Seychelles French Creole
|
| 229 |
-
crt Chorote, Iyojwaβja
|
| 230 |
-
csk Jola-Kasa
|
| 231 |
-
cso Chinantec, Sochiapam
|
| 232 |
-
ctd Chin, Tedim
|
| 233 |
-
ctg Chittagonian
|
| 234 |
-
cto Embera CatΓo
|
| 235 |
-
ctu Chol
|
| 236 |
-
cuc Chinantec, Usila
|
| 237 |
-
cui Cuiba
|
| 238 |
-
cuk Kuna, San Blas
|
| 239 |
-
cul Kulina
|
| 240 |
-
cwa Kabwa
|
| 241 |
-
cwe Kwere
|
| 242 |
-
cwt Kuwaataay
|
| 243 |
-
cya Chatino, Nopala
|
| 244 |
-
cym Welsh
|
| 245 |
-
daa DangalΓ©at
|
| 246 |
-
dah Gwahatike
|
| 247 |
-
dan Danish
|
| 248 |
-
dar Dargwa
|
| 249 |
-
dbj Idaβan
|
| 250 |
-
dbq Daba
|
| 251 |
-
ddn Dendi
|
| 252 |
-
ded Dedua
|
| 253 |
-
des Desano
|
| 254 |
-
deu German, Standard
|
| 255 |
-
dga Dagaare, Southern
|
| 256 |
-
dgi Dagara, Northern
|
| 257 |
-
dgk Dagba
|
| 258 |
-
dgo Dogri
|
| 259 |
-
dgr Tlicho
|
| 260 |
-
dhi Dhimal
|
| 261 |
-
did Didinga
|
| 262 |
-
dig Chidigo
|
| 263 |
-
dik Dinka, Southwestern
|
| 264 |
-
dip Dinka, Northeastern
|
| 265 |
-
div Maldivian
|
| 266 |
-
djk Aukan
|
| 267 |
-
dnj-dialect_blowowest Dan
|
| 268 |
-
dnj-dialect_gweetaawueast Dan
|
| 269 |
-
dnt Dani, Mid Grand Valley
|
| 270 |
-
dnw Dani, Western
|
| 271 |
-
dop Lukpa
|
| 272 |
-
dos DogosΓ©
|
| 273 |
-
dsh Daasanach
|
| 274 |
-
dso Desiya
|
| 275 |
-
dtp Kadazan Dusun
|
| 276 |
-
dts Dogon, Toro So
|
| 277 |
-
dug Chiduruma
|
| 278 |
-
dwr Dawro
|
| 279 |
-
dyi SΓ©noufo, Djimini
|
| 280 |
-
dyo Jola-Fonyi
|
| 281 |
-
dyu Jula
|
| 282 |
-
dzo Dzongkha
|
| 283 |
-
eip Lik
|
| 284 |
-
eka Ekajuk
|
| 285 |
-
ell Greek
|
| 286 |
-
emp EmberΓ‘, Northern
|
| 287 |
-
enb Markweeta
|
| 288 |
-
eng English
|
| 289 |
-
enx Enxet
|
| 290 |
-
epo Esperanto
|
| 291 |
-
ese Ese Ejja
|
| 292 |
-
ess Yupik, Saint Lawrence Island
|
| 293 |
-
est Estonian
|
| 294 |
-
eus Basque
|
| 295 |
-
evn Evenki
|
| 296 |
-
ewe ΓwΓ©
|
| 297 |
-
eza Ezaa
|
| 298 |
-
fal Fali, South
|
| 299 |
-
fao Faroese
|
| 300 |
-
far Fataleka
|
| 301 |
-
fas Persian
|
| 302 |
-
fij Fijian
|
| 303 |
-
fin Finnish
|
| 304 |
-
flr Fuliiru
|
| 305 |
-
fmu Muria, Far Western
|
| 306 |
-
fon Fon
|
| 307 |
-
fra French
|
| 308 |
-
frd Fordata
|
| 309 |
-
fry Frisian
|
| 310 |
-
ful Fulah
|
| 311 |
-
gag-script_cyrillic Gagauz
|
| 312 |
-
gag-script_latin Gagauz
|
| 313 |
-
gai Mbore
|
| 314 |
-
gam Kandawo
|
| 315 |
-
gau Gadaba, Mudhili
|
| 316 |
-
gbi Galela
|
| 317 |
-
gbk Gaddi
|
| 318 |
-
gbm Garhwali
|
| 319 |
-
gbo Grebo, Northern
|
| 320 |
-
gde Gude
|
| 321 |
-
geb Kire
|
| 322 |
-
gej Gen
|
| 323 |
-
gil Kiribati
|
| 324 |
-
gjn Gonja
|
| 325 |
-
gkn Gokana
|
| 326 |
-
gld Nanai
|
| 327 |
-
gle Irish
|
| 328 |
-
glg Galician
|
| 329 |
-
glk Gilaki
|
| 330 |
-
gmv Gamo
|
| 331 |
-
gna Kaansa
|
| 332 |
-
gnd Zulgo-Gemzek
|
| 333 |
-
gng Ngangam
|
| 334 |
-
gof-script_latin Gofa
|
| 335 |
-
gog Gogo
|
| 336 |
-
gor Gorontalo
|
| 337 |
-
gqr Gor
|
| 338 |
-
grc Greek, Ancient
|
| 339 |
-
gri Ghari
|
| 340 |
-
grn Guarani
|
| 341 |
-
grt Garo
|
| 342 |
-
gso Gbaya, Southwest
|
| 343 |
-
gub GuajajΓ‘ra
|
| 344 |
-
guc Wayuu
|
| 345 |
-
gud Dida, YocobouΓ©
|
| 346 |
-
guh Guahibo
|
| 347 |
-
guj Gujarati
|
| 348 |
-
guk Gumuz
|
| 349 |
-
gum Misak
|
| 350 |
-
guo Guayabero
|
| 351 |
-
guq AchΓ©
|
| 352 |
-
guu YanomamΓΆ
|
| 353 |
-
gux GourmanchΓ©ma
|
| 354 |
-
gvc Wanano
|
| 355 |
-
gvl Gulay
|
| 356 |
-
gwi Gwichβin
|
| 357 |
-
gwr Gwere
|
| 358 |
-
gym NgΓ€bere
|
| 359 |
-
gyr Guarayu
|
| 360 |
-
had Hatam
|
| 361 |
-
hag Hanga
|
| 362 |
-
hak Chinese, Hakka
|
| 363 |
-
hap Hupla
|
| 364 |
-
hat Haitian Creole
|
| 365 |
-
hau Hausa
|
| 366 |
-
hay Haya
|
| 367 |
-
heb Hebrew
|
| 368 |
-
heh Hehe
|
| 369 |
-
hif Hindi, Fiji
|
| 370 |
-
hig Kamwe
|
| 371 |
-
hil Hiligaynon
|
| 372 |
-
hin Hindi
|
| 373 |
-
hlb Halbi
|
| 374 |
-
hlt Chin, Matu
|
| 375 |
-
hne Chhattisgarhi
|
| 376 |
-
hnn Hanunoo
|
| 377 |
-
hns Hindustani, Sarnami
|
| 378 |
-
hoc Ho
|
| 379 |
-
hoy Holiya
|
| 380 |
-
hrv Croatian
|
| 381 |
-
hsb Sorbian, Upper
|
| 382 |
-
hto Witoto, Minika
|
| 383 |
-
hub WampΓs
|
| 384 |
-
hui Huli
|
| 385 |
-
hun Hungarian
|
| 386 |
-
hus-dialect_centralveracruz Huastec
|
| 387 |
-
hus-dialect_westernpotosino Huastec
|
| 388 |
-
huu Witoto, Murui
|
| 389 |
-
huv Huave, San Mateo del Mar
|
| 390 |
-
hvn Hawu
|
| 391 |
-
hwc Hawaii Pidgin
|
| 392 |
-
hye Armenian
|
| 393 |
-
hyw Armenian, Western
|
| 394 |
-
iba Iban
|
| 395 |
-
ibo Igbo
|
| 396 |
-
icr Islander English Creole
|
| 397 |
-
idd Ede Idaca
|
| 398 |
-
ifa Ifugao, Amganad
|
| 399 |
-
ifb Ifugao, Batad
|
| 400 |
-
ife Ifè
|
| 401 |
-
ifk Ifugao, Tuwali
|
| 402 |
-
ifu Ifugao, Mayoyao
|
| 403 |
-
ify Kallahan, Keley-i
|
| 404 |
-
ign Ignaciano
|
| 405 |
-
ikk Ika
|
| 406 |
-
ilb Ila
|
| 407 |
-
ilo Ilocano
|
| 408 |
-
imo Imbongu
|
| 409 |
-
ina Interlingua (International Auxiliary Language Association)
|
| 410 |
-
inb Inga
|
| 411 |
-
ind Indonesian
|
| 412 |
-
iou Tuma-Irumu
|
| 413 |
-
ipi Ipili
|
| 414 |
-
iqw Ikwo
|
| 415 |
-
iri Rigwe
|
| 416 |
-
irk Iraqw
|
| 417 |
-
isl Icelandic
|
| 418 |
-
ita Italian
|
| 419 |
-
itl Itelmen
|
| 420 |
-
itv Itawit
|
| 421 |
-
ixl-dialect_sangasparchajul Ixil
|
| 422 |
-
ixl-dialect_sanjuancotzal Ixil
|
| 423 |
-
ixl-dialect_santamarianebaj Ixil
|
| 424 |
-
izr Izere
|
| 425 |
-
izz Izii
|
| 426 |
-
jac Jakalteko
|
| 427 |
-
jam Jamaican English Creole
|
| 428 |
-
jav Javanese
|
| 429 |
-
jbu Jukun Takum
|
| 430 |
-
jen Dza
|
| 431 |
-
jic Tol
|
| 432 |
-
jiv Shuar
|
| 433 |
-
jmc Machame
|
| 434 |
-
jmd Yamdena
|
| 435 |
-
jpn Japanese
|
| 436 |
-
jun Juang
|
| 437 |
-
juy Juray
|
| 438 |
-
jvn Javanese, Suriname
|
| 439 |
-
kaa Karakalpak
|
| 440 |
-
kab Amazigh
|
| 441 |
-
kac Jingpho
|
| 442 |
-
kak Kalanguya
|
| 443 |
-
kam Kamba
|
| 444 |
-
kan Kannada
|
| 445 |
-
kao Xaasongaxango
|
| 446 |
-
kaq Capanahua
|
| 447 |
-
kat Georgian
|
| 448 |
-
kay KamayurΓ‘
|
| 449 |
-
kaz Kazakh
|
| 450 |
-
kbo Keliko
|
| 451 |
-
kbp Kabiyè
|
| 452 |
-
kbq Kamano
|
| 453 |
-
kbr Kafa
|
| 454 |
-
kby Kanuri, Manga
|
| 455 |
-
kca Khanty
|
| 456 |
-
kcg Tyap
|
| 457 |
-
kdc Kutu
|
| 458 |
-
kde Makonde
|
| 459 |
-
kdh Tem
|
| 460 |
-
kdi Kumam
|
| 461 |
-
kdj Ngβakarimojong
|
| 462 |
-
kdl Tsikimba
|
| 463 |
-
kdn Kunda
|
| 464 |
-
kdt Kuay
|
| 465 |
-
kea Kabuverdianu
|
| 466 |
-
kek Qβeqchiβ
|
| 467 |
-
ken Kenyang
|
| 468 |
-
keo Kakwa
|
| 469 |
-
ker Kera
|
| 470 |
-
key Kupia
|
| 471 |
-
kez Kukele
|
| 472 |
-
kfb Kolami, Northwestern
|
| 473 |
-
kff-script_telugu Koya
|
| 474 |
-
kfw Naga, Kharam
|
| 475 |
-
kfx Pahari, Kullu
|
| 476 |
-
khg Tibetan, Khams
|
| 477 |
-
khm Khmer
|
| 478 |
-
khq Songhay, Koyra Chiini
|
| 479 |
-
kia Kim
|
| 480 |
-
kij Kilivila
|
| 481 |
-
kik Gikuyu
|
| 482 |
-
kin Kinyarwanda
|
| 483 |
-
kir Kyrgyz
|
| 484 |
-
kjb Qβanjobβal
|
| 485 |
-
kje Kisar
|
| 486 |
-
kjg Khmu
|
| 487 |
-
kjh Khakas
|
| 488 |
-
kki Kagulu
|
| 489 |
-
kkj Kako
|
| 490 |
-
kle Kulung
|
| 491 |
-
klu Klao
|
| 492 |
-
klv Maskelynes
|
| 493 |
-
klw Tado
|
| 494 |
-
kma Konni
|
| 495 |
-
kmd Kalinga, Majukayang
|
| 496 |
-
kml Kalinga, Tanudan
|
| 497 |
-
kmr-script_arabic Kurdish, Northern
|
| 498 |
-
kmr-script_cyrillic Kurdish, Northern
|
| 499 |
-
kmr-script_latin Kurdish, Northern
|
| 500 |
-
kmu Kanite
|
| 501 |
-
knb Kalinga, Lubuagan
|
| 502 |
-
kne Kankanaey
|
| 503 |
-
knf Mankanya
|
| 504 |
-
knj Akateko
|
| 505 |
-
knk Kuranko
|
| 506 |
-
kno Kono
|
| 507 |
-
kog Kogi
|
| 508 |
-
kor Korean
|
| 509 |
-
kpq Korupun-Sela
|
| 510 |
-
kps Tehit
|
| 511 |
-
kpv Komi-Zyrian
|
| 512 |
-
kpy Koryak
|
| 513 |
-
kpz Kupsapiiny
|
| 514 |
-
kqe Kalagan
|
| 515 |
-
kqp KimrΓ©
|
| 516 |
-
kqr Kimaragang
|
| 517 |
-
kqy Koorete
|
| 518 |
-
krc Karachay-Balkar
|
| 519 |
-
kri Krio
|
| 520 |
-
krj Kinaray-a
|
| 521 |
-
krl Karelian
|
| 522 |
-
krr Krung
|
| 523 |
-
krs Gbaya
|
| 524 |
-
kru Kurux
|
| 525 |
-
ksb Shambala
|
| 526 |
-
ksr Borong
|
| 527 |
-
kss Kisi, Southern
|
| 528 |
-
ktb Kambaata
|
| 529 |
-
ktj Krumen, Plapo
|
| 530 |
-
kub Kutep
|
| 531 |
-
kue Kuman
|
| 532 |
-
kum Kumyk
|
| 533 |
-
kus Kusaal
|
| 534 |
-
kvn Kuna, Border
|
| 535 |
-
kvw Wersing
|
| 536 |
-
kwd Kwaio
|
| 537 |
-
kwf Kwaraβae
|
| 538 |
-
kwi Awa-Cuaiquer
|
| 539 |
-
kxc Konso
|
| 540 |
-
kxf Kawyaw
|
| 541 |
-
kxm Khmer, Northern
|
| 542 |
-
kxv Kuvi
|
| 543 |
-
kyb Kalinga, Butbut
|
| 544 |
-
kyc Kyaka
|
| 545 |
-
kyf Kouya
|
| 546 |
-
kyg Keyagana
|
| 547 |
-
kyo Klon
|
| 548 |
-
kyq Kenga
|
| 549 |
-
kyu Kayah, Western
|
| 550 |
-
kyz KayabΓ
|
| 551 |
-
kzf Kaili, Daβa
|
| 552 |
-
lac Lacandon
|
| 553 |
-
laj Lango
|
| 554 |
-
lam Lamba
|
| 555 |
-
lao Lao
|
| 556 |
-
las Lama
|
| 557 |
-
lat Latin
|
| 558 |
-
lav Latvian
|
| 559 |
-
law Lauje
|
| 560 |
-
lbj Ladakhi
|
| 561 |
-
lbw Tolaki
|
| 562 |
-
lcp Lawa, Western
|
| 563 |
-
lee LyΓ©lΓ©
|
| 564 |
-
lef Lelemi
|
| 565 |
-
lem Nomaande
|
| 566 |
-
lew Kaili, Ledo
|
| 567 |
-
lex Luang
|
| 568 |
-
lgg Lugbara
|
| 569 |
-
lgl Wala
|
| 570 |
-
lhu Lahu
|
| 571 |
-
lia Limba, West-Central
|
| 572 |
-
lid Nyindrou
|
| 573 |
-
lif Limbu
|
| 574 |
-
lin Lingala
|
| 575 |
-
lip Sekpele
|
| 576 |
-
lis Lisu
|
| 577 |
-
lit Lithuanian
|
| 578 |
-
lje Rampi
|
| 579 |
-
ljp Lampung Api
|
| 580 |
-
llg Lole
|
| 581 |
-
lln Lele
|
| 582 |
-
lme PΓ©vΓ©
|
| 583 |
-
lnd Lundayeh
|
| 584 |
-
lns Lamnsoβ
|
| 585 |
-
lob Lobi
|
| 586 |
-
lok Loko
|
| 587 |
-
lom Loma
|
| 588 |
-
lon Lomwe, Malawi
|
| 589 |
-
loq Lobala
|
| 590 |
-
lsi Lacid
|
| 591 |
-
lsm Saamya-Gwe
|
| 592 |
-
ltz Luxembourgish
|
| 593 |
-
luc Aringa
|
| 594 |
-
lug Ganda
|
| 595 |
-
luo Dholuo
|
| 596 |
-
lwo Luwo
|
| 597 |
-
lww Lewo
|
| 598 |
-
lzz Laz
|
| 599 |
-
maa-dialect_sanantonio Mazatec, San JerΓ³nimo TecΓ³atl
|
| 600 |
-
maa-dialect_sanjeronimo Mazatec, San JerΓ³nimo TecΓ³atl
|
| 601 |
-
mad Madura
|
| 602 |
-
mag Magahi
|
| 603 |
-
mah Marshallese
|
| 604 |
-
mai Maithili
|
| 605 |
-
maj Mazatec, Jalapa de DΓaz
|
| 606 |
-
mak Makasar
|
| 607 |
-
mal Malayalam
|
| 608 |
-
mam-dialect_central Mam
|
| 609 |
-
mam-dialect_northern Mam
|
| 610 |
-
mam-dialect_southern Mam
|
| 611 |
-
mam-dialect_western Mam
|
| 612 |
-
maq Mazatec, ChiquihuitlΓ‘n
|
| 613 |
-
mar Marathi
|
| 614 |
-
maw Mampruli
|
| 615 |
-
maz Mazahua, Central
|
| 616 |
-
mbb Manobo, Western Bukidnon
|
| 617 |
-
mbc Macushi
|
| 618 |
-
mbh Mangseng
|
| 619 |
-
mbj NadΓ«b
|
| 620 |
-
mbt Manobo, Matigsalug
|
| 621 |
-
mbu Mbula-Bwazza
|
| 622 |
-
mbz Mixtec, Amoltepec
|
| 623 |
-
mca Maka
|
| 624 |
-
mcb Matsigenka
|
| 625 |
-
mcd Sharanahua
|
| 626 |
-
mco Mixe, CoatlΓ‘n
|
| 627 |
-
mcp Makaa
|
| 628 |
-
mcq Ese
|
| 629 |
-
mcu Mambila, Cameroon
|
| 630 |
-
mda Mada
|
| 631 |
-
mdf Moksha
|
| 632 |
-
mdv Mixtec, Santa LucΓa Monteverde
|
| 633 |
-
mdy Male
|
| 634 |
-
med Melpa
|
| 635 |
-
mee Mengen
|
| 636 |
-
mej Meyah
|
| 637 |
-
men Mende
|
| 638 |
-
meq Merey
|
| 639 |
-
met Mato
|
| 640 |
-
mev Maan
|
| 641 |
-
mfe Morisyen
|
| 642 |
-
mfh Matal
|
| 643 |
-
mfi Wandala
|
| 644 |
-
mfk Mofu, North
|
| 645 |
-
mfq Moba
|
| 646 |
-
mfy Mayo
|
| 647 |
-
mfz Mabaan
|
| 648 |
-
mgd Moru
|
| 649 |
-
mge Mango
|
| 650 |
-
mgh Makhuwa-Meetto
|
| 651 |
-
mgo Metaβ
|
| 652 |
-
mhi Maβdi
|
| 653 |
-
mhr Mari, Meadow
|
| 654 |
-
mhu Digaro-Mishmi
|
| 655 |
-
mhx Lhao Vo
|
| 656 |
-
mhy Maβanyan
|
| 657 |
-
mib Mixtec, Atatlahuca
|
| 658 |
-
mie Mixtec, Ocotepec
|
| 659 |
-
mif Mofu-Gudur
|
| 660 |
-
mih Mixtec, Chayuco
|
| 661 |
-
mil Mixtec, PeΓ±oles
|
| 662 |
-
mim Mixtec, Alacatlatzala
|
| 663 |
-
min Minangkabau
|
| 664 |
-
mio Mixtec, Pinotepa Nacional
|
| 665 |
-
mip Mixtec, Apasco-Apoala
|
| 666 |
-
miq MΓskito
|
| 667 |
-
mit Mixtec, Southern Puebla
|
| 668 |
-
miy Mixtec, Ayutla
|
| 669 |
-
miz Mixtec, Coatzospan
|
| 670 |
-
mjl Mandeali
|
| 671 |
-
mjv Mannan
|
| 672 |
-
mkd Macedonian
|
| 673 |
-
mkl Mokole
|
| 674 |
-
mkn Malay, Kupang
|
| 675 |
-
mlg Malagasy
|
| 676 |
-
mlt Maltese
|
| 677 |
-
mmg Ambrym, North
|
| 678 |
-
mnb Muna
|
| 679 |
-
mnf Mundani
|
| 680 |
-
mnk Mandinka
|
| 681 |
-
mnw Mon
|
| 682 |
-
mnx Sougb
|
| 683 |
-
moa Mwan
|
| 684 |
-
mog Mongondow
|
| 685 |
-
mon Mongolian
|
| 686 |
-
mop Maya, MopΓ‘n
|
| 687 |
-
mor Moro
|
| 688 |
-
mos MΓ²orΓ©
|
| 689 |
-
mox Molima
|
| 690 |
-
moz Mukulu
|
| 691 |
-
mpg Marba
|
| 692 |
-
mpm Mixtec, YosondΓΊa
|
| 693 |
-
mpp Migabac
|
| 694 |
-
mpx Misima-Panaeati
|
| 695 |
-
mqb Mbuko
|
| 696 |
-
mqf Momuna
|
| 697 |
-
mqj Mamasa
|
| 698 |
-
mqn Moronene
|
| 699 |
-
mri Maori
|
| 700 |
-
mrw Maranao
|
| 701 |
-
msy Aruamu
|
| 702 |
-
mtd Mualang
|
| 703 |
-
mtj Moskona
|
| 704 |
-
mto Mixe, Totontepec
|
| 705 |
-
muh MΓΌndΓΌ
|
| 706 |
-
mup Malvi
|
| 707 |
-
mur Murle
|
| 708 |
-
muv Muthuvan
|
| 709 |
-
muy Muyang
|
| 710 |
-
mvp Duri
|
| 711 |
-
mwq Chin, MΓΌΓΌn
|
| 712 |
-
mwv Mentawai
|
| 713 |
-
mxb Mixtec, TezoatlΓ‘n
|
| 714 |
-
mxq Mixe, Juquila
|
| 715 |
-
mxt Mixtec, Jamiltepec
|
| 716 |
-
mxv Mixtec, MetlatΓ³noc
|
| 717 |
-
mya Burmese
|
| 718 |
-
myb Mbay
|
| 719 |
-
myk SΓ©noufo, Mamara
|
| 720 |
-
myl Moma
|
| 721 |
-
myv Erzya
|
| 722 |
-
myx Masaaba
|
| 723 |
-
myy Macuna
|
| 724 |
-
mza Mixtec, Santa MarΓa Zacatepec
|
| 725 |
-
mzi Mazatec, IxcatlΓ‘n
|
| 726 |
-
mzj Manya
|
| 727 |
-
mzk Mambila, Nigeria
|
| 728 |
-
mzm Mumuye
|
| 729 |
-
mzw Deg
|
| 730 |
-
nab NambikuΓ‘ra, Southern
|
| 731 |
-
nag Nagamese
|
| 732 |
-
nan Chinese, Min Nan
|
| 733 |
-
nas Naasioi
|
| 734 |
-
naw Nawuri
|
| 735 |
-
nca Iyo
|
| 736 |
-
nch Nahuatl, Central Huasteca
|
| 737 |
-
ncj Nahuatl, Northern Puebla
|
| 738 |
-
ncl Nahuatl, MichoacΓ‘n
|
| 739 |
-
ncu Chumburung
|
| 740 |
-
ndj Ndamba
|
| 741 |
-
ndp Kebu
|
| 742 |
-
ndv Ndut
|
| 743 |
-
ndy Lutos
|
| 744 |
-
ndz Ndogo
|
| 745 |
-
neb Toura
|
| 746 |
-
new Newar
|
| 747 |
-
nfa Dhao
|
| 748 |
-
nfr Nafaanra
|
| 749 |
-
nga Ngbaka
|
| 750 |
-
ngl Lomwe
|
| 751 |
-
ngp Ngulu
|
| 752 |
-
ngu Nahuatl, Guerrero
|
| 753 |
-
nhe Nahuatl, Eastern Huasteca
|
| 754 |
-
nhi Nahuatl, ZacatlΓ‘n-AhuacatlΓ‘n-Tepetzintla
|
| 755 |
-
nhu Noone
|
| 756 |
-
nhw Nahuatl, Western Huasteca
|
| 757 |
-
nhx Nahuatl, Isthmus-Mecayapan
|
| 758 |
-
nhy Nahuatl, Northern Oaxaca
|
| 759 |
-
nia Nias
|
| 760 |
-
nij Ngaju
|
| 761 |
-
nim Nilamba
|
| 762 |
-
nin Ninzo
|
| 763 |
-
nko Nkonya
|
| 764 |
-
nlc Nalca
|
| 765 |
-
nld Dutch
|
| 766 |
-
nlg Gela
|
| 767 |
-
nlk Yali, Ninia
|
| 768 |
-
nmz Nawdm
|
| 769 |
-
nnb Nande
|
| 770 |
-
nno Norwegian Nynorsk
|
| 771 |
-
nnq Ngindo
|
| 772 |
-
nnw Nuni, Southern
|
| 773 |
-
noa Woun Meu
|
| 774 |
-
nob Norwegian BokmΓ₯l
|
| 775 |
-
nod Thai, Northern
|
| 776 |
-
nog Nogai
|
| 777 |
-
not Nomatsigenga
|
| 778 |
-
npi Nepali
|
| 779 |
-
npl Nahuatl, Southeastern Puebla
|
| 780 |
-
npy Napu
|
| 781 |
-
nso Sotho, Northern
|
| 782 |
-
nst Naga, Tangshang
|
| 783 |
-
nsu Nahuatl, Sierra Negra
|
| 784 |
-
ntm Nateni
|
| 785 |
-
ntr Delo
|
| 786 |
-
nuj Nyole
|
| 787 |
-
nus Nuer
|
| 788 |
-
nuz Nahuatl, Tlamacazapa
|
| 789 |
-
nwb Nyabwa
|
| 790 |
-
nxq Naxi
|
| 791 |
-
nya Chichewa
|
| 792 |
-
nyf Kigiryama
|
| 793 |
-
nyn Nyankore
|
| 794 |
-
nyo Nyoro
|
| 795 |
-
nyy Nyakyusa-Ngonde
|
| 796 |
-
nzi Nzema
|
| 797 |
-
obo Manobo, Obo
|
| 798 |
-
oci Occitan
|
| 799 |
-
ojb-script_latin Ojibwa, Northwestern
|
| 800 |
-
ojb-script_syllabics Ojibwa, Northwestern
|
| 801 |
-
oku Oku
|
| 802 |
-
old Mochi
|
| 803 |
-
omw Tairora, South
|
| 804 |
-
onb Lingao
|
| 805 |
-
ood Tohono Oβodham
|
| 806 |
-
orm Oromo
|
| 807 |
-
ory Odia
|
| 808 |
-
oss Ossetic
|
| 809 |
-
ote Otomi, Mezquital
|
| 810 |
-
otq Otomi, QuerΓ©taro
|
| 811 |
-
ozm Koonzime
|
| 812 |
-
pab ParecΓs
|
| 813 |
-
pad PaumarΓ
|
| 814 |
-
pag Pangasinan
|
| 815 |
-
pam Kapampangan
|
| 816 |
-
pan Punjabi, Eastern
|
| 817 |
-
pao Paiute, Northern
|
| 818 |
-
pap Papiamentu
|
| 819 |
-
pau Palauan
|
| 820 |
-
pbb Nasa
|
| 821 |
-
pbc Patamona
|
| 822 |
-
pbi Parkwa
|
| 823 |
-
pce Palaung, Ruching
|
| 824 |
-
pcm Pidgin, Nigerian
|
| 825 |
-
peg Pengo
|
| 826 |
-
pez Penan, Eastern
|
| 827 |
-
pib Yine
|
| 828 |
-
pil Yom
|
| 829 |
-
pir Piratapuyo
|
| 830 |
-
pis Pijin
|
| 831 |
-
pjt Pitjantjatjara
|
| 832 |
-
pkb Kipfokomo
|
| 833 |
-
pls Popoloca, San Marcos Tlacoyalco
|
| 834 |
-
plw Palawano, Brookeβs Point
|
| 835 |
-
pmf Pamona
|
| 836 |
-
pny Pinyin
|
| 837 |
-
poh-dialect_eastern Poqomchiβ
|
| 838 |
-
poh-dialect_western Poqomchiβ
|
| 839 |
-
poi Popoluca, Highland
|
| 840 |
-
pol Polish
|
| 841 |
-
por Portuguese
|
| 842 |
-
poy Pogolo
|
| 843 |
-
ppk Uma
|
| 844 |
-
pps Popoloca, San LuΓs Temalacayuca
|
| 845 |
-
prf Paranan
|
| 846 |
-
prk Wa, Parauk
|
| 847 |
-
prt Prai
|
| 848 |
-
pse Malay, Central
|
| 849 |
-
pss Kaulong
|
| 850 |
-
ptu Bambam
|
| 851 |
-
pui Puinave
|
| 852 |
-
pus Pushto
|
| 853 |
-
pwg Gapapaiwa
|
| 854 |
-
pww Karen, Pwo Northern
|
| 855 |
-
pxm Mixe, Quetzaltepec
|
| 856 |
-
qub Quechua, Huallaga
|
| 857 |
-
quc-dialect_central Kβicheβ
|
| 858 |
-
quc-dialect_east Kβicheβ
|
| 859 |
-
quc-dialect_north Kβicheβ
|
| 860 |
-
quf Quechua, Lambayeque
|
| 861 |
-
quh Quechua, South Bolivian
|
| 862 |
-
qul Quechua, North Bolivian
|
| 863 |
-
quw Quichua, Tena Lowland
|
| 864 |
-
quy Quechua, Ayacucho
|
| 865 |
-
quz Quechua, Cusco
|
| 866 |
-
qvc Quechua, Cajamarca
|
| 867 |
-
qve Quechua, Eastern ApurΓmac
|
| 868 |
-
qvh Quechua, HuamalΓes-Dos de Mayo HuΓ‘nuco
|
| 869 |
-
qvm Quechua, Margos-Yarowilca-Lauricocha
|
| 870 |
-
qvn Quechua, North JunΓn
|
| 871 |
-
qvo Quichua, Napo
|
| 872 |
-
qvs Quechua, San MartΓn
|
| 873 |
-
qvw Quechua, Huaylla Wanca
|
| 874 |
-
qvz Quichua, Northern Pastaza
|
| 875 |
-
qwh Quechua, Huaylas Ancash
|
| 876 |
-
qxh Quechua, Panao
|
| 877 |
-
qxl Quichua, Salasaca Highland
|
| 878 |
-
qxn Quechua, Northern Conchucos Ancash
|
| 879 |
-
qxo Quechua, Southern Conchucos
|
| 880 |
-
qxr Quichua, CaΓ±ar Highland
|
| 881 |
-
rah Rabha
|
| 882 |
-
rai Ramoaaina
|
| 883 |
-
rap Rapa Nui
|
| 884 |
-
rav Sampang
|
| 885 |
-
raw Rawang
|
| 886 |
-
rej Rejang
|
| 887 |
-
rel Rendille
|
| 888 |
-
rgu Rikou
|
| 889 |
-
rhg Rohingya
|
| 890 |
-
rif-script_arabic Tarifit
|
| 891 |
-
rif-script_latin Tarifit
|
| 892 |
-
ril Riang Lang
|
| 893 |
-
rim Nyaturu
|
| 894 |
-
rjs Rajbanshi
|
| 895 |
-
rkt Rangpuri
|
| 896 |
-
rmc-script_cyrillic Romani, Carpathian
|
| 897 |
-
rmc-script_latin Romani, Carpathian
|
| 898 |
-
rmo Romani, Sinte
|
| 899 |
-
rmy-script_cyrillic Romani, Vlax
|
| 900 |
-
rmy-script_latin Romani, Vlax
|
| 901 |
-
rng Ronga
|
| 902 |
-
rnl Ranglong
|
| 903 |
-
roh-dialect_sursilv Romansh
|
| 904 |
-
roh-dialect_vallader Romansh
|
| 905 |
-
rol Romblomanon
|
| 906 |
-
ron Romanian
|
| 907 |
-
rop Kriol
|
| 908 |
-
rro Waima
|
| 909 |
-
rub Gungu
|
| 910 |
-
ruf Luguru
|
| 911 |
-
rug Roviana
|
| 912 |
-
run Rundi
|
| 913 |
-
rus Russian
|
| 914 |
-
sab Buglere
|
| 915 |
-
sag Sango
|
| 916 |
-
sah Yakut
|
| 917 |
-
saj Sahu
|
| 918 |
-
saq Samburu
|
| 919 |
-
sas Sasak
|
| 920 |
-
sat Santhali
|
| 921 |
-
sba Ngambay
|
| 922 |
-
sbd Samo, Southern
|
| 923 |
-
sbl Sambal, Botolan
|
| 924 |
-
sbp Sangu
|
| 925 |
-
sch Sakachep
|
| 926 |
-
sck Sadri
|
| 927 |
-
sda Toraja-Saβdan
|
| 928 |
-
sea Semai
|
| 929 |
-
seh Sena
|
| 930 |
-
ses Songhay, Koyraboro Senni
|
| 931 |
-
sey Paicoca
|
| 932 |
-
sgb Ayta, Mag-antsi
|
| 933 |
-
sgj Surgujia
|
| 934 |
-
sgw Sebat Bet Gurage
|
| 935 |
-
shi Tachelhit
|
| 936 |
-
shk Shilluk
|
| 937 |
-
shn Shan
|
| 938 |
-
sho Shanga
|
| 939 |
-
shp Shipibo-Conibo
|
| 940 |
-
sid Sidamo
|
| 941 |
-
sig Paasaal
|
| 942 |
-
sil Sisaala, Tumulung
|
| 943 |
-
sja Epena
|
| 944 |
-
sjm Mapun
|
| 945 |
-
sld Sissala
|
| 946 |
-
slk Slovak
|
| 947 |
-
slu Selaru
|
| 948 |
-
slv Slovene
|
| 949 |
-
sml Sama, Central
|
| 950 |
-
smo Samoan
|
| 951 |
-
sna Shona
|
| 952 |
-
snd Sindhi
|
| 953 |
-
sne Bidayuh, Bau
|
| 954 |
-
snn Siona
|
| 955 |
-
snp Siane
|
| 956 |
-
snw Selee
|
| 957 |
-
som Somali
|
| 958 |
-
soy Miyobe
|
| 959 |
-
spa Spanish
|
| 960 |
-
spp SΓ©noufo, Supyire
|
| 961 |
-
spy Sabaot
|
| 962 |
-
sqi Albanian
|
| 963 |
-
sri Siriano
|
| 964 |
-
srm Saramaccan
|
| 965 |
-
srn Sranan Tongo
|
| 966 |
-
srp-script_cyrillic Serbian
|
| 967 |
-
srp-script_latin Serbian
|
| 968 |
-
srx Sirmauri
|
| 969 |
-
stn Owa
|
| 970 |
-
stp Tepehuan, Southeastern
|
| 971 |
-
suc Subanon, Western
|
| 972 |
-
suk Sukuma
|
| 973 |
-
sun Sunda
|
| 974 |
-
sur Mwaghavul
|
| 975 |
-
sus Susu
|
| 976 |
-
suv Puroik
|
| 977 |
-
suz Sunwar
|
| 978 |
-
swe Swedish
|
| 979 |
-
swh Swahili
|
| 980 |
-
sxb Suba
|
| 981 |
-
sxn Sangir
|
| 982 |
-
sya Siang
|
| 983 |
-
syl Sylheti
|
| 984 |
-
sza Semelai
|
| 985 |
-
tac Tarahumara, Western
|
| 986 |
-
taj Tamang, Eastern
|
| 987 |
-
tam Tamil
|
| 988 |
-
tao Yami
|
| 989 |
-
tap Taabwa
|
| 990 |
-
taq Tamasheq
|
| 991 |
-
tat Tatar
|
| 992 |
-
tav Tatuyo
|
| 993 |
-
tbc Takia
|
| 994 |
-
tbg Tairora, North
|
| 995 |
-
tbk Tagbanwa, Calamian
|
| 996 |
-
tbl Tboli
|
| 997 |
-
tby Tabaru
|
| 998 |
-
tbz Ditammari
|
| 999 |
-
tca Ticuna
|
| 1000 |
-
tcc Datooga
|
| 1001 |
-
tcs Torres Strait Creole
|
| 1002 |
-
tcz Chin, Thado
|
| 1003 |
-
tdj Tajio
|
| 1004 |
-
ted Krumen, Tepo
|
| 1005 |
-
tee Tepehua, Huehuetla
|
| 1006 |
-
tel Telugu
|
| 1007 |
-
tem Themne
|
| 1008 |
-
teo Ateso
|
| 1009 |
-
ter TerΓͺna
|
| 1010 |
-
tes Tengger
|
| 1011 |
-
tew Tewa
|
| 1012 |
-
tex Tennet
|
| 1013 |
-
tfr Teribe
|
| 1014 |
-
tgj Tagin
|
| 1015 |
-
tgk Tajik
|
| 1016 |
-
tgl Tagalog
|
| 1017 |
-
tgo Sudest
|
| 1018 |
-
tgp Tangoa
|
| 1019 |
-
tha Thai
|
| 1020 |
-
thk Kitharaka
|
| 1021 |
-
thl Tharu, Dangaura
|
| 1022 |
-
tih Murut, Timugon
|
| 1023 |
-
tik Tikar
|
| 1024 |
-
tir Tigrigna
|
| 1025 |
-
tkr Tsakhur
|
| 1026 |
-
tlb Tobelo
|
| 1027 |
-
tlj Talinga-Bwisi
|
| 1028 |
-
tly Talysh
|
| 1029 |
-
tmc Tumak
|
| 1030 |
-
tmf Toba-Maskoy
|
| 1031 |
-
tna Tacana
|
| 1032 |
-
tng Tobanga
|
| 1033 |
-
tnk Kwamera
|
| 1034 |
-
tnn Tanna, North
|
| 1035 |
-
tnp Whitesands
|
| 1036 |
-
tnr MΓ©nik
|
| 1037 |
-
tnt Tontemboan
|
| 1038 |
-
tob Toba
|
| 1039 |
-
toc Totonac, Coyutla
|
| 1040 |
-
toh Tonga
|
| 1041 |
-
tom Tombulu
|
| 1042 |
-
tos Totonac, Highland
|
| 1043 |
-
tpi Tok Pisin
|
| 1044 |
-
tpm Tampulma
|
| 1045 |
-
tpp Tepehua, Pisaflores
|
| 1046 |
-
tpt Tepehua, Tlachichilco
|
| 1047 |
-
trc Triqui, Copala
|
| 1048 |
-
tri TriΓ³
|
| 1049 |
-
trn Trinitario
|
| 1050 |
-
trs Triqui, Chicahuaxtla
|
| 1051 |
-
tso Tsonga
|
| 1052 |
-
tsz Purepecha
|
| 1053 |
-
ttc Tektiteko
|
| 1054 |
-
tte Bwanabwana
|
| 1055 |
-
ttq-script_tifinagh Tamajaq, Tawallammat
|
| 1056 |
-
tue Tuyuca
|
| 1057 |
-
tuf Tunebo, Central
|
| 1058 |
-
tuk-script_arabic Turkmen
|
| 1059 |
-
tuk-script_latin Turkmen
|
| 1060 |
-
tuo Tucano
|
| 1061 |
-
tur Turkish
|
| 1062 |
-
tvw Sedoa
|
| 1063 |
-
twb Tawbuid
|
| 1064 |
-
twe Teiwa
|
| 1065 |
-
twu Termanu
|
| 1066 |
-
txa Tombonuo
|
| 1067 |
-
txq Tii
|
| 1068 |
-
txu KayapΓ³
|
| 1069 |
-
tye Kyanga
|
| 1070 |
-
tzh-dialect_bachajon Tzeltal
|
| 1071 |
-
tzh-dialect_tenejapa Tzeltal
|
| 1072 |
-
tzj-dialect_eastern Tzβutujil
|
| 1073 |
-
tzj-dialect_western Tzβutujil
|
| 1074 |
-
tzo-dialect_chamula Tzotzil
|
| 1075 |
-
tzo-dialect_chenalho Tzotzil
|
| 1076 |
-
ubl Bikol, Buhiβnon
|
| 1077 |
-
ubu Umbu-Ungu
|
| 1078 |
-
udm Udmurt
|
| 1079 |
-
udu Uduk
|
| 1080 |
-
uig-script_arabic Uyghur
|
| 1081 |
-
uig-script_cyrillic Uyghur
|
| 1082 |
-
ukr Ukrainian
|
| 1083 |
-
umb Umbundu
|
| 1084 |
-
unr Mundari
|
| 1085 |
-
upv Uripiv-Wala-Rano-Atchin
|
| 1086 |
-
ura Urarina
|
| 1087 |
-
urb Kaapor
|
| 1088 |
-
urd-script_arabic Urdu
|
| 1089 |
-
urd-script_devanagari Urdu
|
| 1090 |
-
urd-script_latin Urdu
|
| 1091 |
-
urk Urak Lawoiβ
|
| 1092 |
-
urt Urat
|
| 1093 |
-
ury Orya
|
| 1094 |
-
usp Uspanteko
|
| 1095 |
-
uzb-script_cyrillic Uzbek
|
| 1096 |
-
uzb-script_latin Uzbek
|
| 1097 |
-
vag Vagla
|
| 1098 |
-
vid Vidunda
|
| 1099 |
-
vie Vietnamese
|
| 1100 |
-
vif Vili
|
| 1101 |
-
vmw Makhuwa
|
| 1102 |
-
vmy Mazatec, Ayautla
|
| 1103 |
-
vot Vod
|
| 1104 |
-
vun Vunjo
|
| 1105 |
-
vut Vute
|
| 1106 |
-
wal-script_ethiopic Wolaytta
|
| 1107 |
-
wal-script_latin Wolaytta
|
| 1108 |
-
wap Wapishana
|
| 1109 |
-
war Waray-Waray
|
| 1110 |
-
waw Waiwai
|
| 1111 |
-
way Wayana
|
| 1112 |
-
wba Warao
|
| 1113 |
-
wlo Wolio
|
| 1114 |
-
wlx Wali
|
| 1115 |
-
wmw Mwani
|
| 1116 |
-
wob Wè Northern
|
| 1117 |
-
wol Wolof
|
| 1118 |
-
wsg Gondi, Adilabad
|
| 1119 |
-
wwa Waama
|
| 1120 |
-
xal Kalmyk-Oirat
|
| 1121 |
-
xdy Malayic Dayak
|
| 1122 |
-
xed Hdi
|
| 1123 |
-
xer XerΓ©nte
|
| 1124 |
-
xho Xhosa
|
| 1125 |
-
xmm Malay, Manado
|
| 1126 |
-
xnj Chingoni
|
| 1127 |
-
xnr Kangri
|
| 1128 |
-
xog Soga
|
| 1129 |
-
xon Konkomba
|
| 1130 |
-
xrb Karaboro, Eastern
|
| 1131 |
-
xsb Sambal
|
| 1132 |
-
xsm Kasem
|
| 1133 |
-
xsr Sherpa
|
| 1134 |
-
xsu SanumΓ‘
|
| 1135 |
-
xta Mixtec, Alcozauca
|
| 1136 |
-
xtd Mixtec, Diuxi-Tilantongo
|
| 1137 |
-
xte Ketengban
|
| 1138 |
-
xtm Mixtec, Magdalena PeΓ±asco
|
| 1139 |
-
xtn Mixtec, Northern Tlaxiaco
|
| 1140 |
-
xua Kurumba, Alu
|
| 1141 |
-
xuo Kuo
|
| 1142 |
-
yaa Yaminahua
|
| 1143 |
-
yad Yagua
|
| 1144 |
-
yal Yalunka
|
| 1145 |
-
yam Yamba
|
| 1146 |
-
yao Yao
|
| 1147 |
-
yas Nugunu
|
| 1148 |
-
yat Yambeta
|
| 1149 |
-
yaz Lokaa
|
| 1150 |
-
yba Yala
|
| 1151 |
-
ybb Yemba
|
| 1152 |
-
ycl Lolopo
|
| 1153 |
-
ycn Yucuna
|
| 1154 |
-
yea Ravula
|
| 1155 |
-
yka Yakan
|
| 1156 |
-
yli Yali, Angguruk
|
| 1157 |
-
yor Yoruba
|
| 1158 |
-
yre YaourΓ©
|
| 1159 |
-
yua Maya, Yucatec
|
| 1160 |
-
yue-script_traditional Chinese, Yue
|
| 1161 |
-
yuz Yuracare
|
| 1162 |
-
yva Yawa
|
| 1163 |
-
zaa Zapotec, Sierra de JuΓ‘rez
|
| 1164 |
-
zab Zapotec, Western Tlacolula Valley
|
| 1165 |
-
zac Zapotec, OcotlΓ‘n
|
| 1166 |
-
zad Zapotec, Cajonos
|
| 1167 |
-
zae Zapotec, Yareni
|
| 1168 |
-
zai Zapotec, Isthmus
|
| 1169 |
-
zam Zapotec, MiahuatlΓ‘n
|
| 1170 |
-
zao Zapotec, Ozolotepec
|
| 1171 |
-
zaq Zapotec, AloΓ‘pam
|
| 1172 |
-
zar Zapotec, RincΓ³n
|
| 1173 |
-
zas Zapotec, Santo Domingo Albarradas
|
| 1174 |
-
zav Zapotec, Yatzachi
|
| 1175 |
-
zaw Zapotec, Mitla
|
| 1176 |
-
zca Zapotec, Coatecas Altas
|
| 1177 |
-
zga Kinga
|
| 1178 |
-
zim Mesme
|
| 1179 |
-
ziw Zigula
|
| 1180 |
-
zlm Malay
|
| 1181 |
-
zmz Mbandja
|
| 1182 |
-
zne Zande
|
| 1183 |
-
zos Zoque, Francisco LeΓ³n
|
| 1184 |
-
zpc Zapotec, Choapan
|
| 1185 |
-
zpg Zapotec, Guevea de Humboldt
|
| 1186 |
-
zpi Zapotec, Santa MarΓa Quiegolani
|
| 1187 |
-
zpl Zapotec, LachixΓo
|
| 1188 |
-
zpm Zapotec, Mixtepec
|
| 1189 |
-
zpo Zapotec, AmatlΓ‘n
|
| 1190 |
-
zpt Zapotec, San Vicente CoatlΓ‘n
|
| 1191 |
-
zpu Zapotec, YalΓ‘lag
|
| 1192 |
-
zpz Zapotec, Texmelucan
|
| 1193 |
-
ztq Zapotec, Quioquitani-QuierΓ
|
| 1194 |
-
zty Zapotec, Yatee
|
| 1195 |
-
zul Zulu
|
| 1196 |
-
zyb Zhuang, Yongbei
|
| 1197 |
-
zyp Chin, Zyphe
|
| 1198 |
-
zza Zaza
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
modules/templates/index.html
DELETED
|
@@ -1,34 +0,0 @@
|
|
| 1 |
-
<!DOCTYPE html>
|
| 2 |
-
<html lang="en">
|
| 3 |
-
|
| 4 |
-
<head>
|
| 5 |
-
<meta charset="utf-8">
|
| 6 |
-
<title>Sema Translator</title>
|
| 7 |
-
<link rel="stylesheet" href="style.css" />
|
| 8 |
-
</head>
|
| 9 |
-
|
| 10 |
-
<body>
|
| 11 |
-
<h1>Translate and Detect Source Language</h1>
|
| 12 |
-
|
| 13 |
-
<form action="#" method="post" id="translationForm">
|
| 14 |
-
<div class="container">
|
| 15 |
-
<div class="text-box input-box">
|
| 16 |
-
<label for="source_lang">Select source language:</label>
|
| 17 |
-
<select id="source_lang" name="source_lang"></select>
|
| 18 |
-
<textarea id="userinput" name="userinput" placeholder="Enter text"></textarea>
|
| 19 |
-
</div>
|
| 20 |
-
|
| 21 |
-
<div class="text-box output-box">
|
| 22 |
-
<label for="target_lang">Select target language:</label>
|
| 23 |
-
<select id="target_lang" name="target_lang"></select>
|
| 24 |
-
<textarea id="output" name="output" placeholder="Translation" disabled></textarea>
|
| 25 |
-
</div>
|
| 26 |
-
</div>
|
| 27 |
-
|
| 28 |
-
<input type="submit" value="Translate">
|
| 29 |
-
</form>
|
| 30 |
-
|
| 31 |
-
<script src="script.js"></script>
|
| 32 |
-
</body>
|
| 33 |
-
|
| 34 |
-
</html>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
modules/templates/script.js
DELETED
|
@@ -1,89 +0,0 @@
|
|
| 1 |
-
document.addEventListener('DOMContentLoaded', function () {
|
| 2 |
-
const form = document.querySelector('#translationForm');
|
| 3 |
-
const targetLangSelect = document.querySelector('#target_lang');
|
| 4 |
-
const sourceLangSelect = document.querySelector('#source_lang');
|
| 5 |
-
const userInput = document.querySelector('#userinput');
|
| 6 |
-
const outputText = document.querySelector('#output');
|
| 7 |
-
|
| 8 |
-
// Define your languages and codes
|
| 9 |
-
const languages = [
|
| 10 |
-
{ name: 'Swahili', code: 'swh_Latn' },
|
| 11 |
-
{ name: 'Kikuyu', code: 'kik_Latn' },
|
| 12 |
-
{ name: 'Spanish', code: 'spa_Latn' },
|
| 13 |
-
{ name: 'French', code: 'fra_Latn' },
|
| 14 |
-
{ name: 'Amharic', code: 'amh_Ethi' },
|
| 15 |
-
{ name: 'English', code: 'eng_Latn' },
|
| 16 |
-
// Add your other languages and codes here...
|
| 17 |
-
];
|
| 18 |
-
|
| 19 |
-
// Function to populate the dropdown options
|
| 20 |
-
function populateDropdown(select, options) {
|
| 21 |
-
options.forEach((option) => {
|
| 22 |
-
const optionElem = document.createElement('option');
|
| 23 |
-
optionElem.value = option.code;
|
| 24 |
-
optionElem.text = option.name;
|
| 25 |
-
select.add(optionElem);
|
| 26 |
-
});
|
| 27 |
-
}
|
| 28 |
-
|
| 29 |
-
// Call the function to populate dropdown options
|
| 30 |
-
populateDropdown(targetLangSelect, languages);
|
| 31 |
-
populateDropdown(sourceLangSelect, [{ name: 'Auto Detect', code: 'auto' }, ...languages]);
|
| 32 |
-
|
| 33 |
-
form.addEventListener('submit', async (e) => {
|
| 34 |
-
e.preventDefault();
|
| 35 |
-
|
| 36 |
-
const targetLang = targetLangSelect.value;
|
| 37 |
-
const sourceLang = sourceLangSelect.value;
|
| 38 |
-
|
| 39 |
-
try {
|
| 40 |
-
// Change placeholder text to "Translating..."
|
| 41 |
-
outputText.placeholder = 'Translating...';
|
| 42 |
-
|
| 43 |
-
let sourceLanguage;
|
| 44 |
-
|
| 45 |
-
// Check if Auto Detect is selected for source language
|
| 46 |
-
if (sourceLang === 'auto') {
|
| 47 |
-
const detectionResponse = await fetch('https://lewiskimaru-helloworld.hf.space/translate_detect/', {
|
| 48 |
-
method: 'POST',
|
| 49 |
-
headers: {
|
| 50 |
-
'Content-Type': 'application/json'
|
| 51 |
-
},
|
| 52 |
-
body: JSON.stringify({
|
| 53 |
-
userinput: userInput.value,
|
| 54 |
-
target_lang: targetLang
|
| 55 |
-
})
|
| 56 |
-
});
|
| 57 |
-
|
| 58 |
-
const detectionData = await detectionResponse.json();
|
| 59 |
-
sourceLanguage = detectionData.source_language;
|
| 60 |
-
} else {
|
| 61 |
-
sourceLanguage = sourceLang;
|
| 62 |
-
}
|
| 63 |
-
|
| 64 |
-
// Check if Auto Detect is selected for target language
|
| 65 |
-
const targetLanguage = targetLang === 'auto' ? 'eng_Latn' : targetLang;
|
| 66 |
-
|
| 67 |
-
const translationResponse = await fetch('https://lewiskimaru-helloworld.hf.space/translate_enter/', {
|
| 68 |
-
method: 'POST',
|
| 69 |
-
headers: {
|
| 70 |
-
'Content-Type': 'application/json'
|
| 71 |
-
},
|
| 72 |
-
body: JSON.stringify({
|
| 73 |
-
userinput: userInput.value,
|
| 74 |
-
target_lang: targetLanguage,
|
| 75 |
-
source_lang: sourceLanguage
|
| 76 |
-
})
|
| 77 |
-
});
|
| 78 |
-
|
| 79 |
-
const translatedText = (await translationResponse.json()).translated_text;
|
| 80 |
-
|
| 81 |
-
// Update placeholder with the translated text
|
| 82 |
-
outputText.placeholder = translatedText;
|
| 83 |
-
|
| 84 |
-
} catch (error) {
|
| 85 |
-
console.error(error);
|
| 86 |
-
outputText.placeholder = 'An error occurred. Please try again.';
|
| 87 |
-
}
|
| 88 |
-
});
|
| 89 |
-
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
modules/templates/style.css
DELETED
|
@@ -1,59 +0,0 @@
|
|
| 1 |
-
body {
|
| 2 |
-
font-family: 'Arial', sans-serif;
|
| 3 |
-
margin: 0;
|
| 4 |
-
padding: 0;
|
| 5 |
-
background-color: #f4f4f4;
|
| 6 |
-
}
|
| 7 |
-
|
| 8 |
-
.container {
|
| 9 |
-
display: flex;
|
| 10 |
-
justify-content: space-around;
|
| 11 |
-
align-items: center;
|
| 12 |
-
margin: 50px 0;
|
| 13 |
-
}
|
| 14 |
-
|
| 15 |
-
.text-box {
|
| 16 |
-
background-color: #fff;
|
| 17 |
-
border-radius: 8px;
|
| 18 |
-
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
| 19 |
-
padding: 20px;
|
| 20 |
-
width: 45%;
|
| 21 |
-
}
|
| 22 |
-
|
| 23 |
-
select,
|
| 24 |
-
textarea {
|
| 25 |
-
width: 100%;
|
| 26 |
-
padding: 10px;
|
| 27 |
-
margin-bottom: 15px;
|
| 28 |
-
border: 1px solid #ccc;
|
| 29 |
-
border-radius: 4px;
|
| 30 |
-
box-sizing: border-box;
|
| 31 |
-
}
|
| 32 |
-
|
| 33 |
-
textarea {
|
| 34 |
-
height: 150px;
|
| 35 |
-
}
|
| 36 |
-
|
| 37 |
-
input[type="submit"] {
|
| 38 |
-
background-color: #4caf50;
|
| 39 |
-
color: #fff;
|
| 40 |
-
border: none;
|
| 41 |
-
padding: 10px 20px;
|
| 42 |
-
font-size: 16px;
|
| 43 |
-
cursor: pointer;
|
| 44 |
-
border-radius: 4px;
|
| 45 |
-
}
|
| 46 |
-
|
| 47 |
-
input[type="submit"]:hover {
|
| 48 |
-
background-color: #2674d4;
|
| 49 |
-
}
|
| 50 |
-
|
| 51 |
-
#output:disabled {
|
| 52 |
-
background-color: #f4f4f4;
|
| 53 |
-
color: #555;
|
| 54 |
-
}
|
| 55 |
-
|
| 56 |
-
h1 {
|
| 57 |
-
text-align: center;
|
| 58 |
-
color: #333;
|
| 59 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
modules/templates/translator.html
DELETED
|
@@ -1,403 +0,0 @@
|
|
| 1 |
-
<!DOCTYPE html>
|
| 2 |
-
<html lang="en">
|
| 3 |
-
|
| 4 |
-
<head>
|
| 5 |
-
<meta charset="utf-8">
|
| 6 |
-
<title>Sema Translator</title>
|
| 7 |
-
<style>
|
| 8 |
-
body {
|
| 9 |
-
font-family: 'Arial', sans-serif;
|
| 10 |
-
margin: 0;
|
| 11 |
-
padding: 0;
|
| 12 |
-
background-color: #f4f4f4;
|
| 13 |
-
}
|
| 14 |
-
|
| 15 |
-
.container {
|
| 16 |
-
display: flex;
|
| 17 |
-
justify-content: space-around;
|
| 18 |
-
align-items: center;
|
| 19 |
-
margin: 50px 0;
|
| 20 |
-
flex-wrap: wrap; /* Allow flex items to wrap to the next line */
|
| 21 |
-
}
|
| 22 |
-
|
| 23 |
-
.text-box {
|
| 24 |
-
background-color: #fff;
|
| 25 |
-
border-radius: 8px;
|
| 26 |
-
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
| 27 |
-
padding: 20px;
|
| 28 |
-
width: 45%;
|
| 29 |
-
margin: 10px; /* Add some margin between the boxes */
|
| 30 |
-
box-sizing: border-box; /* Include padding and border in the width */
|
| 31 |
-
}
|
| 32 |
-
|
| 33 |
-
select,
|
| 34 |
-
textarea {
|
| 35 |
-
width: 100%;
|
| 36 |
-
padding: 10px;
|
| 37 |
-
margin-bottom: 15px;
|
| 38 |
-
border: 1px solid #ccc;
|
| 39 |
-
border-radius: 4px;
|
| 40 |
-
box-sizing: border-box;
|
| 41 |
-
}
|
| 42 |
-
|
| 43 |
-
textarea {
|
| 44 |
-
height: 150px;
|
| 45 |
-
}
|
| 46 |
-
|
| 47 |
-
.center-container {
|
| 48 |
-
display: flex;
|
| 49 |
-
align-items: center;
|
| 50 |
-
justify-content: center;
|
| 51 |
-
margin: 10px 0;
|
| 52 |
-
}
|
| 53 |
-
|
| 54 |
-
input[type="submit"] {
|
| 55 |
-
background-color: #4caf50;
|
| 56 |
-
color: #fff;
|
| 57 |
-
border: none;
|
| 58 |
-
padding: 10px 20px;
|
| 59 |
-
font-size: 16px;
|
| 60 |
-
cursor: pointer;
|
| 61 |
-
border-radius: 4px;
|
| 62 |
-
}
|
| 63 |
-
|
| 64 |
-
input[type="submit"]:hover {
|
| 65 |
-
background-color: #2674d4;
|
| 66 |
-
}
|
| 67 |
-
|
| 68 |
-
#output:disabled {
|
| 69 |
-
background-color: #f4f4f4;
|
| 70 |
-
color: #555;
|
| 71 |
-
}
|
| 72 |
-
|
| 73 |
-
h1 {
|
| 74 |
-
text-align: center;
|
| 75 |
-
color: #333;
|
| 76 |
-
}
|
| 77 |
-
|
| 78 |
-
/* Media query for smaller screens */
|
| 79 |
-
@media only screen and (max-width: 768px) {
|
| 80 |
-
.text-box {
|
| 81 |
-
width: 90%; /* Adjust width for smaller screens */
|
| 82 |
-
}
|
| 83 |
-
}
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
</style>
|
| 87 |
-
</head>
|
| 88 |
-
|
| 89 |
-
<body>
|
| 90 |
-
<h1>Translate across 200 Languages</h1>
|
| 91 |
-
|
| 92 |
-
<form action="#" method="post" id="translationForm">
|
| 93 |
-
<div class="container">
|
| 94 |
-
<div class="text-box input-box">
|
| 95 |
-
<label for="source_lang">Select source language:</label>
|
| 96 |
-
<select id="source_lang" name="source_lang"></select>
|
| 97 |
-
<textarea id="userinput" name="userinput" placeholder="Enter text"></textarea>
|
| 98 |
-
</div>
|
| 99 |
-
|
| 100 |
-
<div class="text-box output-box">
|
| 101 |
-
<label for="target_lang">Select target language:</label>
|
| 102 |
-
<select id="target_lang" name="target_lang"></select>
|
| 103 |
-
<textarea id="output" name="output" placeholder="Translation" disabled></textarea>
|
| 104 |
-
</div>
|
| 105 |
-
</div>
|
| 106 |
-
|
| 107 |
-
<div class="center-container">
|
| 108 |
-
<input type="submit" value="Translate">
|
| 109 |
-
</form>
|
| 110 |
-
</div>
|
| 111 |
-
|
| 112 |
-
<script>
|
| 113 |
-
document.addEventListener('DOMContentLoaded', function () {
|
| 114 |
-
const form = document.querySelector('#translationForm');
|
| 115 |
-
const targetLangSelect = document.querySelector('#target_lang');
|
| 116 |
-
const sourceLangSelect = document.querySelector('#source_lang');
|
| 117 |
-
const userInput = document.querySelector('#userinput');
|
| 118 |
-
const outputText = document.querySelector('#output');
|
| 119 |
-
|
| 120 |
-
// Define your languages and codes
|
| 121 |
-
const languages = [
|
| 122 |
-
{ name: 'Acehnese (Latin script)', code: 'ace_Latn' },
|
| 123 |
-
{ name: 'Mesopotamian Arabic', code: 'acm_Arab' },
|
| 124 |
-
{ name: 'Taβizzi-Adeni Arabic', code: 'acq_Arab' },
|
| 125 |
-
{ name: 'Tunisian Arabic', code: 'aeb_Arab' },
|
| 126 |
-
{ name: 'Afrikaans', code: 'afr_Latn' },
|
| 127 |
-
{ name: 'South Levantine Arabic', code: 'ajp_Arab' },
|
| 128 |
-
{ name: 'Akan', code: 'aka_Latn' },
|
| 129 |
-
{ name: 'Amharic', code: 'amh_Ethi' },
|
| 130 |
-
{ name: 'North Levantine Arabic', code: 'apc_Arab' },
|
| 131 |
-
{ name: 'Modern Standard Arabic', code: 'arb_Arab' },
|
| 132 |
-
{ name: 'Modern Standard Arabic (Romanized)', code: 'arb_Latn' },
|
| 133 |
-
{ name: 'Najdi Arabic', code: 'ars_Arab' },
|
| 134 |
-
{ name: 'Moroccan Arabic', code: 'ary_Arab' },
|
| 135 |
-
{ name: 'Egyptian Arabic', code: 'arz_Arab' },
|
| 136 |
-
{ name: 'Assamese', code: 'asm_Beng' },
|
| 137 |
-
{ name: 'Asturian', code: 'ast_Latn' },
|
| 138 |
-
{ name: 'Awadhi', code: 'awa_Deva' },
|
| 139 |
-
{ name: 'Central Aymara', code: 'ayr_Latn' },
|
| 140 |
-
{ name: 'South Azerbaijani', code: 'azb_Arab' },
|
| 141 |
-
{ name: 'North Azerbaijani', code: 'azj_Latn' },
|
| 142 |
-
{ name: 'Bashkir', code: 'bak_Cyrl' },
|
| 143 |
-
{ name: 'Bambara', code: 'bam_Latn' },
|
| 144 |
-
{ name: 'Balinese', code: 'ban_Latn' },
|
| 145 |
-
{ name: 'Belarusian', code: 'bel_Cyrl' },
|
| 146 |
-
{ name: 'Bemba', code: 'bem_Latn' },
|
| 147 |
-
{ name: 'Bengali', code: 'ben_Beng' },
|
| 148 |
-
{ name: 'Bhojpuri', code: 'bho_Deva' },
|
| 149 |
-
{ name: 'Banjar (Arabic script)', code: 'bjn_Arab' },
|
| 150 |
-
{ name: 'Banjar (Latin script)', code: 'bjn_Latn' },
|
| 151 |
-
{ name: 'Standard Tibetan', code: 'bod_Tibt' },
|
| 152 |
-
{ name: 'Bosnian', code: 'bos_Latn' },
|
| 153 |
-
{ name: 'Buginese', code: 'bug_Latn' },
|
| 154 |
-
{ name: 'Bulgarian', code: 'bul_Cyrl' },
|
| 155 |
-
{ name: 'Catalan', code: 'cat_Latn' },
|
| 156 |
-
{ name: 'Cebuano', code: 'ceb_Latn' },
|
| 157 |
-
{ name: 'Czech', code: 'ces_Latn' },
|
| 158 |
-
{ name: 'Chokwe', code: 'cjk_Latn' },
|
| 159 |
-
{ name: 'Central Kurdish', code: 'ckb_Arab' },
|
| 160 |
-
{ name: 'Crimean Tatar', code: 'crh_Latn' },
|
| 161 |
-
{ name: 'Welsh', code: 'cym_Latn' },
|
| 162 |
-
{ name: 'Danish', code: 'dan_Latn' },
|
| 163 |
-
{ name: 'German', code: 'deu_Latn' },
|
| 164 |
-
{ name: 'Southwestern Dinka', code: 'dik_Latn' },
|
| 165 |
-
{ name: 'Dyula', code: 'dyu_Latn' },
|
| 166 |
-
{ name: 'Dzongkha', code: 'dzo_Tibt' },
|
| 167 |
-
{ name: 'Greek', code: 'ell_Grek' },
|
| 168 |
-
{ name: 'English', code: 'eng_Latn' },
|
| 169 |
-
{ name: 'Esperanto', code: 'epo_Latn' },
|
| 170 |
-
{ name: 'Estonian', code: 'est_Latn' },
|
| 171 |
-
{ name: 'Basque', code: 'eus_Latn' },
|
| 172 |
-
{ name: 'Ewe', code: 'ewe_Latn' },
|
| 173 |
-
{ name: 'Faroese', code: 'fao_Latn' },
|
| 174 |
-
{ name: 'Fijian', code: 'fij_Latn' },
|
| 175 |
-
{ name: 'Finnish', code: 'fin_Latn' },
|
| 176 |
-
{ name: 'Fon', code: 'fon_Latn' },
|
| 177 |
-
{ name: 'French', code: 'fra_Latn' },
|
| 178 |
-
{ name: 'Friulian', code: 'fur_Latn' },
|
| 179 |
-
{ name: 'Nigerian Fulfulde', code: 'fuv_Latn' },
|
| 180 |
-
{ name: 'Scottish Gaelic', code: 'gla_Latn' },
|
| 181 |
-
{ name: 'Irish', code: 'gle_Latn' },
|
| 182 |
-
{ name: 'Galician', code: 'glg_Latn' },
|
| 183 |
-
{ name: 'Guarani', code: 'grn_Latn' },
|
| 184 |
-
{ name: 'Gujarati', code: 'guj_Gujr' },
|
| 185 |
-
{ name: 'Haitian Creole', code: 'hat_Latn' },
|
| 186 |
-
{ name: 'Hausa', code: 'hau_Latn' },
|
| 187 |
-
{ name: 'Hebrew', code: 'heb_Hebr' },
|
| 188 |
-
{ name: 'Hindi', code: 'hin_Deva' },
|
| 189 |
-
{ name: 'Chhattisgarhi', code: 'hne_Deva' },
|
| 190 |
-
{ name: 'Croatian', code: 'hrv_Latn' },
|
| 191 |
-
{ name: 'Hungarian', code: 'hun_Latn' },
|
| 192 |
-
{ name: 'Armenian', code: 'hye_Armn' },
|
| 193 |
-
{ name: 'Igbo', code: 'ibo_Latn' },
|
| 194 |
-
{ name: 'Ilocano', code: 'ilo_Latn' },
|
| 195 |
-
{ name: 'Indonesian', code: 'ind_Latn' },
|
| 196 |
-
{ name: 'Icelandic', code: 'isl_Latn' },
|
| 197 |
-
{ name: 'Italian', code: 'ita_Latn' },
|
| 198 |
-
{ name: 'Javanese', code: 'jav_Latn' },
|
| 199 |
-
{ name: 'Japanese', code: 'jpn_Jpan' },
|
| 200 |
-
{ name: 'Kabyle', code: 'kab_Latn' },
|
| 201 |
-
{ name: 'Jingpho', code: 'kac_Latn' },
|
| 202 |
-
{ name: 'Kamba', code: 'kam_Latn' },
|
| 203 |
-
{ name: 'Kannada', code: 'kan_Knda' },
|
| 204 |
-
{ name: 'Kashmiri (Arabic script)', code: 'kas_Arab' },
|
| 205 |
-
{ name: 'Kashmiri (Devanagari script)', code: 'kas_Deva' },
|
| 206 |
-
{ name: 'Georgian', code: 'kat_Geor' },
|
| 207 |
-
{ name: 'Central Kanuri (Arabic script)', code: 'knc_Arab' },
|
| 208 |
-
{ name: 'Central Kanuri (Latin script)', code: 'knc_Latn' },
|
| 209 |
-
{ name: 'Kazakh', code: 'kaz_Cyrl' },
|
| 210 |
-
{ name: 'Kabiyè', code: 'kbp_Latn' },
|
| 211 |
-
{ name: 'Kabuverdianu', code: 'kea_Latn' },
|
| 212 |
-
{ name: 'Khmer', code: 'khm_Khmr' },
|
| 213 |
-
{ name: 'Kikuyu', code: 'kik_Latn' },
|
| 214 |
-
{ name: 'Kinyarwanda', code: 'kin_Latn' },
|
| 215 |
-
{ name: 'Kyrgyz', code: 'kir_Cyrl' },
|
| 216 |
-
{ name: 'Kimbundu', code: 'kmb_Latn' },
|
| 217 |
-
{ name: 'Northern Kurdish', code: 'kmr_Latn' },
|
| 218 |
-
{ name: 'Kikongo', code: 'kon_Latn' },
|
| 219 |
-
{ name: 'Korean', code: 'kor_Hang' },
|
| 220 |
-
{ name: 'Lao', code: 'lao_Laoo' },
|
| 221 |
-
{ name: 'Ligurian', code: 'lij_Latn' },
|
| 222 |
-
{ name: 'Limburgish', code: 'lim_Latn' },
|
| 223 |
-
{ name: 'Lingala', code: 'lin_Latn' },
|
| 224 |
-
{ name: 'Lithuanian', code: 'lit_Latn' },
|
| 225 |
-
{ name: 'Lombard', code: 'lmo_Latn' },
|
| 226 |
-
{ name: 'Latgalian', code: 'ltg_Latn' },
|
| 227 |
-
{ name: 'Luxembourgish', code: 'ltz_Latn' },
|
| 228 |
-
{ name: 'Luba-Kasai', code: 'lua_Latn' },
|
| 229 |
-
{ name: 'Ganda', code: 'lug_Latn' },
|
| 230 |
-
{ name: 'Luo', code: 'luo_Latn' },
|
| 231 |
-
{ name: 'Mizo', code: 'lus_Latn' },
|
| 232 |
-
{ name: 'Standard Latvian', code: 'lvs_Latn' },
|
| 233 |
-
{ name: 'Magahi', code: 'mag_Deva' },
|
| 234 |
-
{ name: 'Maithili', code: 'mai_Deva' },
|
| 235 |
-
{ name: 'Malayalam', code: 'mal_Mlym' },
|
| 236 |
-
{ name: 'Marathi', code: 'mar_Deva' },
|
| 237 |
-
{ name: 'Minangkabau (Arabic script)', code: 'min_Arab' },
|
| 238 |
-
{ name: 'Minangkabau (Latin script)', code: 'min_Latn' },
|
| 239 |
-
{ name: 'Macedonian', code: 'mkd_Cyrl' },
|
| 240 |
-
{ name: 'Plateau Malagasy', code: 'plt_Latn' },
|
| 241 |
-
{ name: 'Maltese', code: 'mlt_Latn' },
|
| 242 |
-
{ name: 'Meitei (Bengali script)', code: 'mni_Beng' },
|
| 243 |
-
{ name: 'Halh Mongolian', code: 'khk_Cyrl' },
|
| 244 |
-
{ name: 'Mossi', code: 'mos_Latn' },
|
| 245 |
-
{ name: 'Maori', code: 'mri_Latn' },
|
| 246 |
-
{ name: 'Burmese', code: 'mya_Mymr' },
|
| 247 |
-
{ name: 'Dutch', code: 'nld_Latn' },
|
| 248 |
-
{ name: 'Norwegian Nynorsk', code: 'nno_Latn' },
|
| 249 |
-
{ name: 'Norwegian BokmΓ₯l', code: 'nob_Latn' },
|
| 250 |
-
{ name: 'Nepali', code: 'npi_Deva' },
|
| 251 |
-
{ name: 'Northern Sotho', code: 'nso_Latn' },
|
| 252 |
-
{ name: 'Nuer', code: 'nus_Latn' },
|
| 253 |
-
{ name: 'Nyanja', code: 'nya_Latn' },
|
| 254 |
-
{ name: 'Occitan', code: 'oci_Latn' },
|
| 255 |
-
{ name: 'West Central Oromo', code: 'gaz_Latn' },
|
| 256 |
-
{ name: 'Odia', code: 'ory_Orya' },
|
| 257 |
-
{ name: 'Pangasinan', code: 'pag_Latn' },
|
| 258 |
-
{ name: 'Eastern Panjabi', code: 'pan_Guru' },
|
| 259 |
-
{ name: 'Papiamento', code: 'pap_Latn' },
|
| 260 |
-
{ name: 'Western Persian', code: 'pes_Arab' },
|
| 261 |
-
{ name: 'Polish', code: 'pol_Latn' },
|
| 262 |
-
{ name: 'Portuguese', code: 'por_Latn' },
|
| 263 |
-
{ name: 'Dari', code: 'prs_Arab' },
|
| 264 |
-
{ name: 'Southern Pashto', code: 'pbt_Arab' },
|
| 265 |
-
{ name: 'Ayacucho Quechua', code: 'quy_Latn' },
|
| 266 |
-
{ name: 'Romanian', code: 'ron_Latn' },
|
| 267 |
-
{ name: 'Rundi', code: 'run_Latn' },
|
| 268 |
-
{ name: 'Russian', code: 'rus_Cyrl' },
|
| 269 |
-
{ name: 'Sango', code: 'sag_Latn' },
|
| 270 |
-
{ name: 'Sanskrit', code: 'san_Deva' },
|
| 271 |
-
{ name: 'Santali', code: 'sat_Olck' },
|
| 272 |
-
{ name: 'Sicilian', code: 'scn_Latn' },
|
| 273 |
-
{ name: 'Shan', code: 'shn_Mymr' },
|
| 274 |
-
{ name: 'Sinhala', code: 'sin_Sinh' },
|
| 275 |
-
{ name: 'Slovak', code: 'slk_Latn' },
|
| 276 |
-
{ name: 'Slovenian', code: 'slv_Latn' },
|
| 277 |
-
{ name: 'Slovenian', code: 'slv_Latn' },
|
| 278 |
-
{ name: 'Samoan', code: 'smo_Latn' },
|
| 279 |
-
{ name: 'Shona', code: 'sna_Latn' },
|
| 280 |
-
{ name: 'Sindhi', code: 'snd_Arab' },
|
| 281 |
-
{ name: 'Somali', code: 'som_Latn' },
|
| 282 |
-
{ name: 'Southern Sotho', code: 'sot_Latn' },
|
| 283 |
-
{ name: 'Spanish', code: 'spa_Latn' },
|
| 284 |
-
{ name: 'Tosk Albanian', code: 'als_Latn' },
|
| 285 |
-
{ name: 'Sardinian', code: 'srd_Latn' },
|
| 286 |
-
{ name: 'Serbian', code: 'srp_Cyrl' },
|
| 287 |
-
{ name: 'Swati', code: 'ssw_Latn' },
|
| 288 |
-
{ name: 'Sundanese', code: 'sun_Latn' },
|
| 289 |
-
{ name: 'Swedish', code: 'swe_Latn' },
|
| 290 |
-
{ name: 'Swahili', code: 'swh_Latn' },
|
| 291 |
-
{ name: 'Silesian', code: 'szl_Latn' },
|
| 292 |
-
{ name: 'Tamil', code: 'tam_Taml' },
|
| 293 |
-
{ name: 'Tatar', code: 'tat_Cyrl' },
|
| 294 |
-
{ name: 'Telugu', code: 'tel_Telu' },
|
| 295 |
-
{ name: 'Tajik', code: 'tgk_Cyrl' },
|
| 296 |
-
{ name: 'Tagalog', code: 'tgl_Latn' },
|
| 297 |
-
{ name: 'Thai', code: 'tha_Thai' },
|
| 298 |
-
{ name: 'Tigrinya', code: 'tir_Ethi' },
|
| 299 |
-
{ name: 'Tamasheq (Latin script)', code: 'taq_Latn' },
|
| 300 |
-
{ name: 'Tamasheq (Tifinagh script)', code: 'taq_Tfng' },
|
| 301 |
-
{ name: 'Tok Pisin', code: 'tpi_Latn' },
|
| 302 |
-
{ name: 'Tswana', code: 'tsn_Latn' },
|
| 303 |
-
{ name: 'Tsonga', code: 'tso_Latn' },
|
| 304 |
-
{ name: 'Turkmen', code: 'tuk_Latn' },
|
| 305 |
-
{ name: 'Tumbuka', code: 'tum_Latn' },
|
| 306 |
-
{ name: 'Turkish', code: 'tur_Latn' },
|
| 307 |
-
{ name: 'Twi', code: 'twi_Latn' },
|
| 308 |
-
{ name: 'Central Atlas Tamazight', code: 'tzm_Tfng' },
|
| 309 |
-
{ name: 'Uyghur', code: 'uig_Arab' },
|
| 310 |
-
{ name: 'Ukrainian', code: 'ukr_Cyrl' },
|
| 311 |
-
{ name: 'Umbundu', code: 'umb_Latn' },
|
| 312 |
-
{ name: 'Urdu', code: 'urd_Arab' },
|
| 313 |
-
{ name: 'Northern Uzbek', code: 'uzn_Latn' },
|
| 314 |
-
{ name: 'Venetian', code: 'vec_Latn' },
|
| 315 |
-
{ name: 'Vietnamese', code: 'vie_Latn' },
|
| 316 |
-
{ name: 'Waray', code: 'war_Latn' },
|
| 317 |
-
{ name: 'Wolof', code: 'wol_Latn' },
|
| 318 |
-
{ name: 'Xhosa', code: 'xho_Latn' },
|
| 319 |
-
{ name: 'Eastern Yiddish', code: 'ydd_Hebr' },
|
| 320 |
-
{ name: 'Yoruba', code: 'yor_Latn' },
|
| 321 |
-
{ name: 'Yue Chinese', code: 'yue_Hant' },
|
| 322 |
-
{ name: 'Chinese (Simplified)', code: 'zho_Hans' },
|
| 323 |
-
{ name: 'Chinese (Traditional)', code: 'zho_Hant' },
|
| 324 |
-
{ name: 'Standard Malay', code: 'zsm_Latn' },
|
| 325 |
-
{ name: 'Zulu', code: 'zul_Latn' },
|
| 326 |
-
];
|
| 327 |
-
|
| 328 |
-
// Function to populate the dropdown options
|
| 329 |
-
function populateDropdown(select, options) {
|
| 330 |
-
options.forEach((option) => {
|
| 331 |
-
const optionElem = document.createElement('option');
|
| 332 |
-
optionElem.value = option.code;
|
| 333 |
-
optionElem.text = option.name;
|
| 334 |
-
select.add(optionElem);
|
| 335 |
-
});
|
| 336 |
-
}
|
| 337 |
-
|
| 338 |
-
// Call the function to populate dropdown options
|
| 339 |
-
populateDropdown(targetLangSelect, languages);
|
| 340 |
-
populateDropdown(sourceLangSelect, [{ name: 'Auto Detect', code: 'auto' }, ...languages]);
|
| 341 |
-
|
| 342 |
-
form.addEventListener('submit', async (e) => {
|
| 343 |
-
e.preventDefault();
|
| 344 |
-
|
| 345 |
-
const targetLang = targetLangSelect.value;
|
| 346 |
-
const sourceLang = sourceLangSelect.value;
|
| 347 |
-
|
| 348 |
-
try {
|
| 349 |
-
// Change placeholder text to "Translating..."
|
| 350 |
-
outputText.placeholder = 'Translating...';
|
| 351 |
-
|
| 352 |
-
let sourceLanguage;
|
| 353 |
-
|
| 354 |
-
// Check if Auto Detect is selected for source language
|
| 355 |
-
if (sourceLang === 'auto') {
|
| 356 |
-
const detectionResponse = await fetch('https://lewiskimaru-helloworld.hf.space/translate_detect/', {
|
| 357 |
-
method: 'POST',
|
| 358 |
-
headers: {
|
| 359 |
-
'Content-Type': 'application/json'
|
| 360 |
-
},
|
| 361 |
-
body: JSON.stringify({
|
| 362 |
-
userinput: userInput.value,
|
| 363 |
-
target_lang: targetLang
|
| 364 |
-
})
|
| 365 |
-
});
|
| 366 |
-
|
| 367 |
-
const detectionData = await detectionResponse.json();
|
| 368 |
-
sourceLanguage = detectionData.source_language;
|
| 369 |
-
} else {
|
| 370 |
-
sourceLanguage = sourceLang;
|
| 371 |
-
}
|
| 372 |
-
|
| 373 |
-
// Check if Auto Detect is selected for target language
|
| 374 |
-
const targetLanguage = targetLang === 'auto' ? 'eng_Latn' : targetLang;
|
| 375 |
-
|
| 376 |
-
const translationResponse = await fetch('https://lewiskimaru-helloworld.hf.space/translate_enter/', {
|
| 377 |
-
method: 'POST',
|
| 378 |
-
headers: {
|
| 379 |
-
'Content-Type': 'application/json'
|
| 380 |
-
},
|
| 381 |
-
body: JSON.stringify({
|
| 382 |
-
userinput: userInput.value,
|
| 383 |
-
target_lang: targetLanguage,
|
| 384 |
-
source_lang: sourceLanguage
|
| 385 |
-
})
|
| 386 |
-
});
|
| 387 |
-
|
| 388 |
-
const translatedText = (await translationResponse.json()).translated_text;
|
| 389 |
-
|
| 390 |
-
// Update placeholder with the translated text
|
| 391 |
-
outputText.placeholder = translatedText;
|
| 392 |
-
|
| 393 |
-
} catch (error) {
|
| 394 |
-
console.error(error);
|
| 395 |
-
outputText.placeholder = 'An error occurred. Please try again.';
|
| 396 |
-
}
|
| 397 |
-
});
|
| 398 |
-
});
|
| 399 |
-
|
| 400 |
-
</script>
|
| 401 |
-
</body>
|
| 402 |
-
|
| 403 |
-
</html>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static/index.html
DELETED
|
@@ -1,35 +0,0 @@
|
|
| 1 |
-
<!DOCTYPE html>
|
| 2 |
-
<html lang="en">
|
| 3 |
-
|
| 4 |
-
<head>
|
| 5 |
-
<meta charset="utf-8">
|
| 6 |
-
<title>Sema Translator</title>
|
| 7 |
-
<link rel="stylesheet" href="../style.css" />
|
| 8 |
-
</head>
|
| 9 |
-
|
| 10 |
-
<body>
|
| 11 |
-
<h1>Translate across 200 Languages</h1>
|
| 12 |
-
|
| 13 |
-
<form action="#" method="post" id="translationForm">
|
| 14 |
-
<div class="container">
|
| 15 |
-
<div class="text-box input-box">
|
| 16 |
-
<label for="source_lang">Select source language:</label>
|
| 17 |
-
<select id="source_lang" name="source_lang"></select>
|
| 18 |
-
<textarea id="userinput" name="userinput" placeholder="Enter text"></textarea>
|
| 19 |
-
</div>
|
| 20 |
-
|
| 21 |
-
<div class="text-box output-box">
|
| 22 |
-
<label for="target_lang">Select target language:</label>
|
| 23 |
-
<select id="target_lang" name="target_lang"></select>
|
| 24 |
-
<textarea id="output" name="output" placeholder="Translation" disabled></textarea>
|
| 25 |
-
</div>
|
| 26 |
-
</div>
|
| 27 |
-
<div class="center-container">
|
| 28 |
-
<input type="submit" value="Translate">
|
| 29 |
-
</form>
|
| 30 |
-
</div>
|
| 31 |
-
|
| 32 |
-
<script src="../script.js"></script>
|
| 33 |
-
</body>
|
| 34 |
-
|
| 35 |
-
</html>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static/script.js
DELETED
|
@@ -1,287 +0,0 @@
|
|
| 1 |
-
document.addEventListener('DOMContentLoaded', function () {
|
| 2 |
-
const form = document.querySelector('#translationForm');
|
| 3 |
-
const targetLangSelect = document.querySelector('#target_lang');
|
| 4 |
-
const sourceLangSelect = document.querySelector('#source_lang');
|
| 5 |
-
const userInput = document.querySelector('#userinput');
|
| 6 |
-
const outputText = document.querySelector('#output');
|
| 7 |
-
|
| 8 |
-
// Define your languages and codes
|
| 9 |
-
const languages = [
|
| 10 |
-
{ name: 'Acehnese (Latin script)', code: 'ace_Latn' },
|
| 11 |
-
{ name: 'Mesopotamian Arabic', code: 'acm_Arab' },
|
| 12 |
-
{ name: 'Taβizzi-Adeni Arabic', code: 'acq_Arab' },
|
| 13 |
-
{ name: 'Tunisian Arabic', code: 'aeb_Arab' },
|
| 14 |
-
{ name: 'Afrikaans', code: 'afr_Latn' },
|
| 15 |
-
{ name: 'South Levantine Arabic', code: 'ajp_Arab' },
|
| 16 |
-
{ name: 'Akan', code: 'aka_Latn' },
|
| 17 |
-
{ name: 'Amharic', code: 'amh_Ethi' },
|
| 18 |
-
{ name: 'North Levantine Arabic', code: 'apc_Arab' },
|
| 19 |
-
{ name: 'Modern Standard Arabic', code: 'arb_Arab' },
|
| 20 |
-
{ name: 'Modern Standard Arabic (Romanized)', code: 'arb_Latn' },
|
| 21 |
-
{ name: 'Najdi Arabic', code: 'ars_Arab' },
|
| 22 |
-
{ name: 'Moroccan Arabic', code: 'ary_Arab' },
|
| 23 |
-
{ name: 'Egyptian Arabic', code: 'arz_Arab' },
|
| 24 |
-
{ name: 'Assamese', code: 'asm_Beng' },
|
| 25 |
-
{ name: 'Asturian', code: 'ast_Latn' },
|
| 26 |
-
{ name: 'Awadhi', code: 'awa_Deva' },
|
| 27 |
-
{ name: 'Central Aymara', code: 'ayr_Latn' },
|
| 28 |
-
{ name: 'South Azerbaijani', code: 'azb_Arab' },
|
| 29 |
-
{ name: 'North Azerbaijani', code: 'azj_Latn' },
|
| 30 |
-
{ name: 'Bashkir', code: 'bak_Cyrl' },
|
| 31 |
-
{ name: 'Bambara', code: 'bam_Latn' },
|
| 32 |
-
{ name: 'Balinese', code: 'ban_Latn' },
|
| 33 |
-
{ name: 'Belarusian', code: 'bel_Cyrl' },
|
| 34 |
-
{ name: 'Bemba', code: 'bem_Latn' },
|
| 35 |
-
{ name: 'Bengali', code: 'ben_Beng' },
|
| 36 |
-
{ name: 'Bhojpuri', code: 'bho_Deva' },
|
| 37 |
-
{ name: 'Banjar (Arabic script)', code: 'bjn_Arab' },
|
| 38 |
-
{ name: 'Banjar (Latin script)', code: 'bjn_Latn' },
|
| 39 |
-
{ name: 'Standard Tibetan', code: 'bod_Tibt' },
|
| 40 |
-
{ name: 'Bosnian', code: 'bos_Latn' },
|
| 41 |
-
{ name: 'Buginese', code: 'bug_Latn' },
|
| 42 |
-
{ name: 'Bulgarian', code: 'bul_Cyrl' },
|
| 43 |
-
{ name: 'Catalan', code: 'cat_Latn' },
|
| 44 |
-
{ name: 'Cebuano', code: 'ceb_Latn' },
|
| 45 |
-
{ name: 'Czech', code: 'ces_Latn' },
|
| 46 |
-
{ name: 'Chokwe', code: 'cjk_Latn' },
|
| 47 |
-
{ name: 'Central Kurdish', code: 'ckb_Arab' },
|
| 48 |
-
{ name: 'Crimean Tatar', code: 'crh_Latn' },
|
| 49 |
-
{ name: 'Welsh', code: 'cym_Latn' },
|
| 50 |
-
{ name: 'Danish', code: 'dan_Latn' },
|
| 51 |
-
{ name: 'German', code: 'deu_Latn' },
|
| 52 |
-
{ name: 'Southwestern Dinka', code: 'dik_Latn' },
|
| 53 |
-
{ name: 'Dyula', code: 'dyu_Latn' },
|
| 54 |
-
{ name: 'Dzongkha', code: 'dzo_Tibt' },
|
| 55 |
-
{ name: 'Greek', code: 'ell_Grek' },
|
| 56 |
-
{ name: 'English', code: 'eng_Latn' },
|
| 57 |
-
{ name: 'Esperanto', code: 'epo_Latn' },
|
| 58 |
-
{ name: 'Estonian', code: 'est_Latn' },
|
| 59 |
-
{ name: 'Basque', code: 'eus_Latn' },
|
| 60 |
-
{ name: 'Ewe', code: 'ewe_Latn' },
|
| 61 |
-
{ name: 'Faroese', code: 'fao_Latn' },
|
| 62 |
-
{ name: 'Fijian', code: 'fij_Latn' },
|
| 63 |
-
{ name: 'Finnish', code: 'fin_Latn' },
|
| 64 |
-
{ name: 'Fon', code: 'fon_Latn' },
|
| 65 |
-
{ name: 'French', code: 'fra_Latn' },
|
| 66 |
-
{ name: 'Friulian', code: 'fur_Latn' },
|
| 67 |
-
{ name: 'Nigerian Fulfulde', code: 'fuv_Latn' },
|
| 68 |
-
{ name: 'Scottish Gaelic', code: 'gla_Latn' },
|
| 69 |
-
{ name: 'Irish', code: 'gle_Latn' },
|
| 70 |
-
{ name: 'Galician', code: 'glg_Latn' },
|
| 71 |
-
{ name: 'Guarani', code: 'grn_Latn' },
|
| 72 |
-
{ name: 'Gujarati', code: 'guj_Gujr' },
|
| 73 |
-
{ name: 'Haitian Creole', code: 'hat_Latn' },
|
| 74 |
-
{ name: 'Hausa', code: 'hau_Latn' },
|
| 75 |
-
{ name: 'Hebrew', code: 'heb_Hebr' },
|
| 76 |
-
{ name: 'Hindi', code: 'hin_Deva' },
|
| 77 |
-
{ name: 'Chhattisgarhi', code: 'hne_Deva' },
|
| 78 |
-
{ name: 'Croatian', code: 'hrv_Latn' },
|
| 79 |
-
{ name: 'Hungarian', code: 'hun_Latn' },
|
| 80 |
-
{ name: 'Armenian', code: 'hye_Armn' },
|
| 81 |
-
{ name: 'Igbo', code: 'ibo_Latn' },
|
| 82 |
-
{ name: 'Ilocano', code: 'ilo_Latn' },
|
| 83 |
-
{ name: 'Indonesian', code: 'ind_Latn' },
|
| 84 |
-
{ name: 'Icelandic', code: 'isl_Latn' },
|
| 85 |
-
{ name: 'Italian', code: 'ita_Latn' },
|
| 86 |
-
{ name: 'Javanese', code: 'jav_Latn' },
|
| 87 |
-
{ name: 'Japanese', code: 'jpn_Jpan' },
|
| 88 |
-
{ name: 'Kabyle', code: 'kab_Latn' },
|
| 89 |
-
{ name: 'Jingpho', code: 'kac_Latn' },
|
| 90 |
-
{ name: 'Kamba', code: 'kam_Latn' },
|
| 91 |
-
{ name: 'Kannada', code: 'kan_Knda' },
|
| 92 |
-
{ name: 'Kashmiri (Arabic script)', code: 'kas_Arab' },
|
| 93 |
-
{ name: 'Kashmiri (Devanagari script)', code: 'kas_Deva' },
|
| 94 |
-
{ name: 'Georgian', code: 'kat_Geor' },
|
| 95 |
-
{ name: 'Central Kanuri (Arabic script)', code: 'knc_Arab' },
|
| 96 |
-
{ name: 'Central Kanuri (Latin script)', code: 'knc_Latn' },
|
| 97 |
-
{ name: 'Kazakh', code: 'kaz_Cyrl' },
|
| 98 |
-
{ name: 'Kabiyè', code: 'kbp_Latn' },
|
| 99 |
-
{ name: 'Kabuverdianu', code: 'kea_Latn' },
|
| 100 |
-
{ name: 'Khmer', code: 'khm_Khmr' },
|
| 101 |
-
{ name: 'Kikuyu', code: 'kik_Latn' },
|
| 102 |
-
{ name: 'Kinyarwanda', code: 'kin_Latn' },
|
| 103 |
-
{ name: 'Kyrgyz', code: 'kir_Cyrl' },
|
| 104 |
-
{ name: 'Kimbundu', code: 'kmb_Latn' },
|
| 105 |
-
{ name: 'Northern Kurdish', code: 'kmr_Latn' },
|
| 106 |
-
{ name: 'Kikongo', code: 'kon_Latn' },
|
| 107 |
-
{ name: 'Korean', code: 'kor_Hang' },
|
| 108 |
-
{ name: 'Lao', code: 'lao_Laoo' },
|
| 109 |
-
{ name: 'Ligurian', code: 'lij_Latn' },
|
| 110 |
-
{ name: 'Limburgish', code: 'lim_Latn' },
|
| 111 |
-
{ name: 'Lingala', code: 'lin_Latn' },
|
| 112 |
-
{ name: 'Lithuanian', code: 'lit_Latn' },
|
| 113 |
-
{ name: 'Lombard', code: 'lmo_Latn' },
|
| 114 |
-
{ name: 'Latgalian', code: 'ltg_Latn' },
|
| 115 |
-
{ name: 'Luxembourgish', code: 'ltz_Latn' },
|
| 116 |
-
{ name: 'Luba-Kasai', code: 'lua_Latn' },
|
| 117 |
-
{ name: 'Ganda', code: 'lug_Latn' },
|
| 118 |
-
{ name: 'Luo', code: 'luo_Latn' },
|
| 119 |
-
{ name: 'Mizo', code: 'lus_Latn' },
|
| 120 |
-
{ name: 'Standard Latvian', code: 'lvs_Latn' },
|
| 121 |
-
{ name: 'Magahi', code: 'mag_Deva' },
|
| 122 |
-
{ name: 'Maithili', code: 'mai_Deva' },
|
| 123 |
-
{ name: 'Malayalam', code: 'mal_Mlym' },
|
| 124 |
-
{ name: 'Marathi', code: 'mar_Deva' },
|
| 125 |
-
{ name: 'Minangkabau (Arabic script)', code: 'min_Arab' },
|
| 126 |
-
{ name: 'Minangkabau (Latin script)', code: 'min_Latn' },
|
| 127 |
-
{ name: 'Macedonian', code: 'mkd_Cyrl' },
|
| 128 |
-
{ name: 'Plateau Malagasy', code: 'plt_Latn' },
|
| 129 |
-
{ name: 'Maltese', code: 'mlt_Latn' },
|
| 130 |
-
{ name: 'Meitei (Bengali script)', code: 'mni_Beng' },
|
| 131 |
-
{ name: 'Halh Mongolian', code: 'khk_Cyrl' },
|
| 132 |
-
{ name: 'Mossi', code: 'mos_Latn' },
|
| 133 |
-
{ name: 'Maori', code: 'mri_Latn' },
|
| 134 |
-
{ name: 'Burmese', code: 'mya_Mymr' },
|
| 135 |
-
{ name: 'Dutch', code: 'nld_Latn' },
|
| 136 |
-
{ name: 'Norwegian Nynorsk', code: 'nno_Latn' },
|
| 137 |
-
{ name: 'Norwegian BokmΓ₯l', code: 'nob_Latn' },
|
| 138 |
-
{ name: 'Nepali', code: 'npi_Deva' },
|
| 139 |
-
{ name: 'Northern Sotho', code: 'nso_Latn' },
|
| 140 |
-
{ name: 'Nuer', code: 'nus_Latn' },
|
| 141 |
-
{ name: 'Nyanja', code: 'nya_Latn' },
|
| 142 |
-
{ name: 'Occitan', code: 'oci_Latn' },
|
| 143 |
-
{ name: 'West Central Oromo', code: 'gaz_Latn' },
|
| 144 |
-
{ name: 'Odia', code: 'ory_Orya' },
|
| 145 |
-
{ name: 'Pangasinan', code: 'pag_Latn' },
|
| 146 |
-
{ name: 'Eastern Panjabi', code: 'pan_Guru' },
|
| 147 |
-
{ name: 'Papiamento', code: 'pap_Latn' },
|
| 148 |
-
{ name: 'Western Persian', code: 'pes_Arab' },
|
| 149 |
-
{ name: 'Polish', code: 'pol_Latn' },
|
| 150 |
-
{ name: 'Portuguese', code: 'por_Latn' },
|
| 151 |
-
{ name: 'Dari', code: 'prs_Arab' },
|
| 152 |
-
{ name: 'Southern Pashto', code: 'pbt_Arab' },
|
| 153 |
-
{ name: 'Ayacucho Quechua', code: 'quy_Latn' },
|
| 154 |
-
{ name: 'Romanian', code: 'ron_Latn' },
|
| 155 |
-
{ name: 'Rundi', code: 'run_Latn' },
|
| 156 |
-
{ name: 'Russian', code: 'rus_Cyrl' },
|
| 157 |
-
{ name: 'Sango', code: 'sag_Latn' },
|
| 158 |
-
{ name: 'Sanskrit', code: 'san_Deva' },
|
| 159 |
-
{ name: 'Santali', code: 'sat_Olck' },
|
| 160 |
-
{ name: 'Sicilian', code: 'scn_Latn' },
|
| 161 |
-
{ name: 'Shan', code: 'shn_Mymr' },
|
| 162 |
-
{ name: 'Sinhala', code: 'sin_Sinh' },
|
| 163 |
-
{ name: 'Slovak', code: 'slk_Latn' },
|
| 164 |
-
{ name: 'Slovenian', code: 'slv_Latn' },
|
| 165 |
-
{ name: 'Slovenian', code: 'slv_Latn' },
|
| 166 |
-
{ name: 'Samoan', code: 'smo_Latn' },
|
| 167 |
-
{ name: 'Shona', code: 'sna_Latn' },
|
| 168 |
-
{ name: 'Sindhi', code: 'snd_Arab' },
|
| 169 |
-
{ name: 'Somali', code: 'som_Latn' },
|
| 170 |
-
{ name: 'Southern Sotho', code: 'sot_Latn' },
|
| 171 |
-
{ name: 'Spanish', code: 'spa_Latn' },
|
| 172 |
-
{ name: 'Tosk Albanian', code: 'als_Latn' },
|
| 173 |
-
{ name: 'Sardinian', code: 'srd_Latn' },
|
| 174 |
-
{ name: 'Serbian', code: 'srp_Cyrl' },
|
| 175 |
-
{ name: 'Swati', code: 'ssw_Latn' },
|
| 176 |
-
{ name: 'Sundanese', code: 'sun_Latn' },
|
| 177 |
-
{ name: 'Swedish', code: 'swe_Latn' },
|
| 178 |
-
{ name: 'Swahili', code: 'swh_Latn' },
|
| 179 |
-
{ name: 'Silesian', code: 'szl_Latn' },
|
| 180 |
-
{ name: 'Tamil', code: 'tam_Taml' },
|
| 181 |
-
{ name: 'Tatar', code: 'tat_Cyrl' },
|
| 182 |
-
{ name: 'Telugu', code: 'tel_Telu' },
|
| 183 |
-
{ name: 'Tajik', code: 'tgk_Cyrl' },
|
| 184 |
-
{ name: 'Tagalog', code: 'tgl_Latn' },
|
| 185 |
-
{ name: 'Thai', code: 'tha_Thai' },
|
| 186 |
-
{ name: 'Tigrinya', code: 'tir_Ethi' },
|
| 187 |
-
{ name: 'Tamasheq (Latin script)', code: 'taq_Latn' },
|
| 188 |
-
{ name: 'Tamasheq (Tifinagh script)', code: 'taq_Tfng' },
|
| 189 |
-
{ name: 'Tok Pisin', code: 'tpi_Latn' },
|
| 190 |
-
{ name: 'Tswana', code: 'tsn_Latn' },
|
| 191 |
-
{ name: 'Tsonga', code: 'tso_Latn' },
|
| 192 |
-
{ name: 'Turkmen', code: 'tuk_Latn' },
|
| 193 |
-
{ name: 'Tumbuka', code: 'tum_Latn' },
|
| 194 |
-
{ name: 'Turkish', code: 'tur_Latn' },
|
| 195 |
-
{ name: 'Twi', code: 'twi_Latn' },
|
| 196 |
-
{ name: 'Central Atlas Tamazight', code: 'tzm_Tfng' },
|
| 197 |
-
{ name: 'Uyghur', code: 'uig_Arab' },
|
| 198 |
-
{ name: 'Ukrainian', code: 'ukr_Cyrl' },
|
| 199 |
-
{ name: 'Umbundu', code: 'umb_Latn' },
|
| 200 |
-
{ name: 'Urdu', code: 'urd_Arab' },
|
| 201 |
-
{ name: 'Northern Uzbek', code: 'uzn_Latn' },
|
| 202 |
-
{ name: 'Venetian', code: 'vec_Latn' },
|
| 203 |
-
{ name: 'Vietnamese', code: 'vie_Latn' },
|
| 204 |
-
{ name: 'Waray', code: 'war_Latn' },
|
| 205 |
-
{ name: 'Wolof', code: 'wol_Latn' },
|
| 206 |
-
{ name: 'Xhosa', code: 'xho_Latn' },
|
| 207 |
-
{ name: 'Eastern Yiddish', code: 'ydd_Hebr' },
|
| 208 |
-
{ name: 'Yoruba', code: 'yor_Latn' },
|
| 209 |
-
{ name: 'Yue Chinese', code: 'yue_Hant' },
|
| 210 |
-
{ name: 'Chinese (Simplified)', code: 'zho_Hans' },
|
| 211 |
-
{ name: 'Chinese (Traditional)', code: 'zho_Hant' },
|
| 212 |
-
{ name: 'Standard Malay', code: 'zsm_Latn' },
|
| 213 |
-
{ name: 'Zulu', code: 'zul_Latn' },
|
| 214 |
-
];
|
| 215 |
-
|
| 216 |
-
// Function to populate the dropdown options
|
| 217 |
-
function populateDropdown(select, options) {
|
| 218 |
-
options.forEach((option) => {
|
| 219 |
-
const optionElem = document.createElement('option');
|
| 220 |
-
optionElem.value = option.code;
|
| 221 |
-
optionElem.text = option.name;
|
| 222 |
-
select.add(optionElem);
|
| 223 |
-
});
|
| 224 |
-
}
|
| 225 |
-
|
| 226 |
-
// Call the function to populate dropdown options
|
| 227 |
-
populateDropdown(targetLangSelect, languages);
|
| 228 |
-
populateDropdown(sourceLangSelect, [{ name: 'Auto Detect', code: 'auto' }, ...languages]);
|
| 229 |
-
|
| 230 |
-
form.addEventListener('submit', async (e) => {
|
| 231 |
-
e.preventDefault();
|
| 232 |
-
|
| 233 |
-
const targetLang = targetLangSelect.value;
|
| 234 |
-
const sourceLang = sourceLangSelect.value;
|
| 235 |
-
|
| 236 |
-
try {
|
| 237 |
-
// Change placeholder text to "Translating..."
|
| 238 |
-
outputText.placeholder = 'Translating...';
|
| 239 |
-
|
| 240 |
-
let sourceLanguage;
|
| 241 |
-
|
| 242 |
-
// Check if Auto Detect is selected for source language
|
| 243 |
-
if (sourceLang === 'auto') {
|
| 244 |
-
const detectionResponse = await fetch('https://lewiskimaru-helloworld.hf.space/translate_detect/', {
|
| 245 |
-
method: 'POST',
|
| 246 |
-
headers: {
|
| 247 |
-
'Content-Type': 'application/json'
|
| 248 |
-
},
|
| 249 |
-
body: JSON.stringify({
|
| 250 |
-
userinput: userInput.value,
|
| 251 |
-
target_lang: targetLang
|
| 252 |
-
})
|
| 253 |
-
});
|
| 254 |
-
|
| 255 |
-
const detectionData = await detectionResponse.json();
|
| 256 |
-
sourceLanguage = detectionData.source_language;
|
| 257 |
-
} else {
|
| 258 |
-
sourceLanguage = sourceLang;
|
| 259 |
-
}
|
| 260 |
-
|
| 261 |
-
// Check if Auto Detect is selected for target language
|
| 262 |
-
const targetLanguage = targetLang === 'auto' ? 'eng_Latn' : targetLang;
|
| 263 |
-
|
| 264 |
-
const translationResponse = await fetch('https://lewiskimaru-helloworld.hf.space/translate_enter/', {
|
| 265 |
-
method: 'POST',
|
| 266 |
-
headers: {
|
| 267 |
-
'Content-Type': 'application/json'
|
| 268 |
-
},
|
| 269 |
-
body: JSON.stringify({
|
| 270 |
-
userinput: userInput.value,
|
| 271 |
-
target_lang: targetLanguage,
|
| 272 |
-
source_lang: sourceLanguage
|
| 273 |
-
})
|
| 274 |
-
});
|
| 275 |
-
|
| 276 |
-
const translatedText = (await translationResponse.json()).translated_text;
|
| 277 |
-
|
| 278 |
-
// Update placeholder with the translated text
|
| 279 |
-
outputText.placeholder = translatedText;
|
| 280 |
-
|
| 281 |
-
} catch (error) {
|
| 282 |
-
console.error(error);
|
| 283 |
-
outputText.placeholder = 'An error occurred. Please try again.';
|
| 284 |
-
}
|
| 285 |
-
});
|
| 286 |
-
});
|
| 287 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static/style.css
DELETED
|
@@ -1,68 +0,0 @@
|
|
| 1 |
-
body {
|
| 2 |
-
font-family: 'Arial', sans-serif;
|
| 3 |
-
margin: 0;
|
| 4 |
-
padding: 0;
|
| 5 |
-
background-color: #f4f4f4;
|
| 6 |
-
}
|
| 7 |
-
|
| 8 |
-
.container {
|
| 9 |
-
display: flex;
|
| 10 |
-
justify-content: space-around;
|
| 11 |
-
align-items: center;
|
| 12 |
-
margin: 50px 0;
|
| 13 |
-
}
|
| 14 |
-
|
| 15 |
-
.text-box {
|
| 16 |
-
background-color: #fff;
|
| 17 |
-
border-radius: 8px;
|
| 18 |
-
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
| 19 |
-
padding: 20px;
|
| 20 |
-
width: 45%;
|
| 21 |
-
}
|
| 22 |
-
|
| 23 |
-
select,
|
| 24 |
-
textarea {
|
| 25 |
-
width: 100%;
|
| 26 |
-
padding: 10px;
|
| 27 |
-
margin-bottom: 15px;
|
| 28 |
-
border: 1px solid #ccc;
|
| 29 |
-
border-radius: 4px;
|
| 30 |
-
box-sizing: border-box;
|
| 31 |
-
}
|
| 32 |
-
|
| 33 |
-
textarea {
|
| 34 |
-
height: 150px;
|
| 35 |
-
}
|
| 36 |
-
|
| 37 |
-
.center-container {
|
| 38 |
-
display: flex;
|
| 39 |
-
align-items: center;
|
| 40 |
-
justify-content: center;
|
| 41 |
-
height: 10px;
|
| 42 |
-
margin: 0;
|
| 43 |
-
}
|
| 44 |
-
|
| 45 |
-
input[type="submit"] {
|
| 46 |
-
background-color: #4caf50;
|
| 47 |
-
color: #fff;
|
| 48 |
-
border: none;
|
| 49 |
-
padding: 10px 20px;
|
| 50 |
-
font-size: 16px;
|
| 51 |
-
cursor: pointer;
|
| 52 |
-
border-radius: 4px;
|
| 53 |
-
}
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
input[type="submit"]:hover {
|
| 57 |
-
background-color: #2674d4;
|
| 58 |
-
}
|
| 59 |
-
|
| 60 |
-
#output:disabled {
|
| 61 |
-
background-color: #f4f4f4;
|
| 62 |
-
color: #555;
|
| 63 |
-
}
|
| 64 |
-
|
| 65 |
-
h1 {
|
| 66 |
-
text-align: center;
|
| 67 |
-
color: #333;
|
| 68 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{modules β translation_models}/flores200_codes.py
RENAMED
|
File without changes
|
{modules β translation_models}/lid218e.bin
RENAMED
|
File without changes
|
{modules β translation_models}/sematrans-1.2B/config.json
RENAMED
|
File without changes
|
{modules β translation_models}/sematrans-1.2B/model.bin
RENAMED
|
File without changes
|
{modules β translation_models}/sematrans-1.2B/shared_vocabulary.txt
RENAMED
|
File without changes
|
{modules β translation_models}/sematrans-3.3B/config.json
RENAMED
|
File without changes
|
{modules β translation_models}/sematrans-3.3B/model.bin
RENAMED
|
File without changes
|
{modules β translation_models}/sematrans-3.3B/shared_vocabulary.txt
RENAMED
|
File without changes
|
{modules β translation_models}/spm.model
RENAMED
|
File without changes
|
{modules β translation_models}/translator_all_langs.tsv
RENAMED
|
File without changes
|