Reformat code.

This commit is contained in:
James Cole 2024-03-10 06:17:31 +01:00
parent c9ce5df74b
commit 1961487055
No known key found for this signature in database
GPG Key ID: B49A324B7EAD6D80
21 changed files with 572 additions and 571 deletions

View File

@ -22,6 +22,9 @@
SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
echo "Running PHP CS Fixer"
$SCRIPT_DIR/phpcs.sh $SCRIPT_DIR/phpcs.sh
echo "Running PHPStan"
$SCRIPT_DIR/phpstan.sh $SCRIPT_DIR/phpstan.sh
echo "Running PHPMD"
$SCRIPT_DIR/phpmd.sh $SCRIPT_DIR/phpmd.sh

View File

@ -36,16 +36,12 @@ class ExpressionController extends Controller
* This endpoint is documented at: * This endpoint is documented at:
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/rules/validateExpression * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/rules/validateExpression
* *
* @param ValidateExpressionRequest $request
*
* @return JsonResponse
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter) * @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/ */
public function validateExpression(ValidateExpressionRequest $request): JsonResponse public function validateExpression(ValidateExpressionRequest $request): JsonResponse
{ {
return response()->json([ return response()->json([
"valid" => true, 'valid' => true,
]); ]);
} }
} }

View File

@ -45,10 +45,7 @@ class ValidateExpressionRequest extends FormRequest
/** /**
* Handle a failed validation attempt. * Handle a failed validation attempt.
* *
* @param \Illuminate\Contracts\Validation\Validator $validator * @throws ValidationException
* @return void
*
* @throws \Illuminate\Validation\ValidationException
*/ */
protected function failedValidation(Validator $validator): void protected function failedValidation(Validator $validator): void
{ {
@ -58,7 +55,7 @@ class ValidateExpressionRequest extends FormRequest
$validator, $validator,
response()->json([ response()->json([
'valid' => false, 'valid' => false,
'error' => $error 'error' => $error,
], 200) ], 200)
); );
} }

View File

@ -42,6 +42,13 @@ class IndexRequest extends FormRequest
use ConvertsDataTypes; use ConvertsDataTypes;
use GetSortInstructions; use GetSortInstructions;
public function getAccountTypes(): array
{
$type = (string)$this->get('type', 'default');
return $this->mapAccountTypes($type);
}
/** /**
* Get all data from the request. * Get all data from the request.
*/ */
@ -50,13 +57,6 @@ class IndexRequest extends FormRequest
return $this->getCarbonDate('date'); return $this->getCarbonDate('date');
} }
public function getAccountTypes(): array
{
$type = (string)$this->get('type', 'default');
return $this->mapAccountTypes($type);
}
/** /**
* The rules that the incoming request must be matched against. * The rules that the incoming request must be matched against.
*/ */

View File

@ -36,7 +36,7 @@ trait CollectorProperties
public const string TEST = 'Test'; public const string TEST = 'Test';
/** @var array<int, string> */ /** @var array<int, string> */
public array $sorting; public array $sorting;
private ?int $endRow; private ?int $endRow;
private bool $expandGroupSearch; private bool $expandGroupSearch;
private array $fields; private array $fields;

View File

@ -23,6 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\Http\Controllers\Auth; namespace FireflyIII\Http\Controllers\Auth;
use Cookie;
use FireflyIII\Events\ActuallyLoggedIn; use FireflyIII\Events\ActuallyLoggedIn;
use FireflyIII\Exceptions\FireflyException; use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Http\Controllers\Controller; use FireflyIII\Http\Controllers\Controller;

View File

@ -122,13 +122,13 @@ class Account extends Model
protected $casts protected $casts
= [ = [
'created_at' => 'datetime', 'created_at' => 'datetime',
'updated_at' => 'datetime', 'updated_at' => 'datetime',
'user_id' => 'integer', 'user_id' => 'integer',
'deleted_at' => 'datetime', 'deleted_at' => 'datetime',
'active' => 'boolean', 'active' => 'boolean',
'encrypted' => 'boolean', 'encrypted' => 'boolean',
]; ];
protected $fillable = ['user_id', 'user_group_id', 'account_type_id', 'name', 'active', 'virtual_balance', 'iban']; protected $fillable = ['user_id', 'user_group_id', 'account_type_id', 'name', 'active', 'virtual_balance', 'iban'];

View File

@ -76,6 +76,13 @@ class RuleAction extends Model
protected $fillable = ['rule_id', 'action_type', 'action_value', 'order', 'active', 'stop_processing']; protected $fillable = ['rule_id', 'action_type', 'action_value', 'order', 'active', 'stop_processing'];
public function getValue(array $journal): string
{
$expr = new ActionExpression($this->action_value);
return $expr->evaluate($journal);
}
public function rule(): BelongsTo public function rule(): BelongsTo
{ {
return $this->belongsTo(Rule::class); return $this->belongsTo(Rule::class);
@ -94,10 +101,4 @@ class RuleAction extends Model
get: static fn ($value) => (int)$value, get: static fn ($value) => (int)$value,
); );
} }
public function getValue(array $journal): string
{
$expr = new ActionExpression($this->action_value);
return $expr->evaluate($journal);
}
} }

View File

@ -208,6 +208,7 @@ class FireflyServiceProvider extends ServiceProvider
static function () { static function () {
$expressionLanguage = new ExpressionLanguage(); $expressionLanguage = new ExpressionLanguage();
$expressionLanguage->registerProvider(new ActionExpressionLanguageProvider()); $expressionLanguage->registerProvider(new ActionExpressionLanguageProvider());
return $expressionLanguage; return $expressionLanguage;
} }
); );

View File

@ -25,27 +25,27 @@ declare(strict_types=1);
namespace FireflyIII\Rules; namespace FireflyIII\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
use FireflyIII\TransactionRules\Expressions\ActionExpression; use FireflyIII\TransactionRules\Expressions\ActionExpression;
use Illuminate\Contracts\Validation\ValidationRule;
use Illuminate\Translation\PotentiallyTranslatedString;
class IsValidActionExpression implements ValidationRule class IsValidActionExpression implements ValidationRule
{ {
/** /**
* Check that the given action expression is syntactically valid. * Check that the given action expression is syntactically valid.
* *
* @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail * @param \Closure(string): PotentiallyTranslatedString $fail
* *
* @SuppressWarnings(PHPMD.UnusedFormalParameter) * @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/ */
public function validate(string $attribute, mixed $value, Closure $fail): void public function validate(string $attribute, mixed $value, \Closure $fail): void
{ {
$value ??= ''; $value ??= '';
$expr = new ActionExpression($value); $expr = new ActionExpression($value);
if (!$expr->isValid()) { if (!$expr->isValid()) {
$fail('validation.rule_action_expression')->translate([ $fail('validation.rule_action_expression')->translate([
'error' => $expr->getValidationError()->getMessage() 'error' => $expr->getValidationError()->getMessage(),
]); ]);
} }
} }

View File

@ -72,9 +72,9 @@ class OperatorQuerySearch implements SearchInterface
private GroupCollectorInterface $collector; private GroupCollectorInterface $collector;
private CurrencyRepositoryInterface $currencyRepository; private CurrencyRepositoryInterface $currencyRepository;
private array $excludeTags; private array $excludeTags;
private array $includeAnyTags; private array $includeAnyTags;
// added to fix #8632 // added to fix #8632
private array $includeTags; private array $includeTags;
private array $invalidOperators; private array $invalidOperators;
private int $limit; private int $limit;
private Collection $operators; private Collection $operators;

View File

@ -29,57 +29,57 @@ use Symfony\Component\ExpressionLanguage\SyntaxError;
class ActionExpression class ActionExpression
{ {
private static array $NAMES = array( private static array $NAMES = [
"transaction_group_id", 'transaction_group_id',
"user_id", 'user_id',
"user_group_id", 'user_group_id',
"created_at", 'created_at',
"updated_at", 'updated_at',
"transaction_group_title", 'transaction_group_title',
"group_created_at", 'group_created_at',
"group_updated_at", 'group_updated_at',
"transaction_journal_id", 'transaction_journal_id',
"transaction_type_id", 'transaction_type_id',
"description", 'description',
"date", 'date',
"order", 'order',
"transaction_type_type", 'transaction_type_type',
"source_transaction_id", 'source_transaction_id',
"source_account_id", 'source_account_id',
"reconciled", 'reconciled',
"amount", 'amount',
"currency_id", 'currency_id',
"currency_code", 'currency_code',
"currency_name", 'currency_name',
"currency_symbol", 'currency_symbol',
"currency_decimal_places", 'currency_decimal_places',
"foreign_amount", 'foreign_amount',
"foreign_currency_id", 'foreign_currency_id',
"foreign_currency_code", 'foreign_currency_code',
"foreign_currency_name", 'foreign_currency_name',
"foreign_currency_symbol", 'foreign_currency_symbol',
"foreign_currency_decimal_places", 'foreign_currency_decimal_places',
"destination_account_id", 'destination_account_id',
"source_account_name", 'source_account_name',
"source_account_iban", 'source_account_iban',
"source_account_type", 'source_account_type',
"destination_account_name", 'destination_account_name',
"destination_account_iban", 'destination_account_iban',
"destination_account_type", 'destination_account_type',
"category_id", 'category_id',
"category_name", 'category_name',
"budget_id", 'budget_id',
"budget_name", 'budget_name',
"tags", 'tags',
"attachments", 'attachments',
"interest_date", 'interest_date',
"payment_date", 'payment_date',
"invoice_date", 'invoice_date',
"book_date", 'book_date',
"due_date", 'due_date',
"process_date", 'process_date',
"destination_transaction_id" 'destination_transaction_id',
); ];
private ExpressionLanguage $expressionLanguage; private ExpressionLanguage $expressionLanguage;
private string $expr; private string $expr;
@ -89,15 +89,15 @@ class ActionExpression
public function __construct(string $expr) public function __construct(string $expr)
{ {
$this->expressionLanguage = app(ExpressionLanguage::class); $this->expressionLanguage = app(ExpressionLanguage::class);
$this->expr = $expr; $this->expr = $expr;
$this->isExpression = self::isExpression($expr); $this->isExpression = self::isExpression($expr);
$this->validationError = $this->validate(); $this->validationError = $this->validate();
} }
private static function isExpression(string $expr): bool private static function isExpression(string $expr): bool
{ {
return str_starts_with($expr, "="); return str_starts_with($expr, '=');
} }
private function validate(): ?SyntaxError private function validate(): ?SyntaxError
@ -108,6 +108,7 @@ class ActionExpression
try { try {
$this->lint(); $this->lint();
return null; return null;
} catch (SyntaxError $e) { } catch (SyntaxError $e) {
return $e; return $e;
@ -130,7 +131,7 @@ class ActionExpression
public function isValid(): bool public function isValid(): bool
{ {
return $this->validationError === null; return null === $this->validationError;
} }
public function getValidationError(): ?SyntaxError public function getValidationError(): ?SyntaxError
@ -141,7 +142,8 @@ class ActionExpression
private function evaluateExpression(string $expr, array $journal): string private function evaluateExpression(string $expr, array $journal): string
{ {
$result = $this->expressionLanguage->evaluate($expr, $journal); $result = $this->expressionLanguage->evaluate($expr, $journal);
return strval($result);
return (string) $result;
} }
public function evaluate(array $journal): string public function evaluate(array $journal): string

View File

@ -32,8 +32,8 @@ class ActionExpressionLanguageProvider implements ExpressionFunctionProviderInte
public function getFunctions(): array public function getFunctions(): array
{ {
return [ return [
ExpressionFunction::fromPhp("substr"), ExpressionFunction::fromPhp('substr'),
ExpressionFunction::fromPhp("strlen") ExpressionFunction::fromPhp('strlen'),
]; ];
} }
} }

View File

@ -35,7 +35,6 @@ use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
use FireflyIII\Services\Password\Verifier; use FireflyIII\Services\Password\Verifier;
use FireflyIII\Support\ParseDateString; use FireflyIII\Support\ParseDateString;
use FireflyIII\TransactionRules\Expressions\ActionExpression;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Validation\Validator; use Illuminate\Validation\Validator;
use PragmaRX\Google2FA\Exceptions\IncompatibleWithGoogleAuthenticatorException; use PragmaRX\Google2FA\Exceptions\IncompatibleWithGoogleAuthenticatorException;

View File

@ -36,12 +36,12 @@ bcscale(12);
if (!function_exists('envNonEmpty')) { if (!function_exists('envNonEmpty')) {
/** /**
* @param string $key * @param string $key
* @param string|int|bool|null $default * @param string|int|bool|null $default
* *
* @return mixed|null * @return mixed|null
*/ */
function envNonEmpty(string $key, string|int|bool|null $default = null) function envNonEmpty(string $key, string | int | bool | null $default = null)
{ {
$result = env($key, $default); $result = env($key, $default);
if ('' === $result) { if ('' === $result) {

View File

@ -20,6 +20,7 @@
*/ */
declare(strict_types=1); declare(strict_types=1);
use FireflyIII\User; use FireflyIII\User;
if ('ldap' === strtolower((string)env('AUTHENTICATION_GUARD'))) { if ('ldap' === strtolower((string)env('AUTHENTICATION_GUARD'))) {

View File

@ -21,6 +21,7 @@
*/ */
declare(strict_types=1); declare(strict_types=1);
use Diglactic\Breadcrumbs\Generator; use Diglactic\Breadcrumbs\Generator;
use Diglactic\Breadcrumbs\Manager; use Diglactic\Breadcrumbs\Manager;

View File

@ -21,8 +21,6 @@
declare(strict_types=1); declare(strict_types=1);
use Illuminate\Support\Str;
$databaseUrl = getenv('DATABASE_URL'); $databaseUrl = getenv('DATABASE_URL');
$host = ''; $host = '';
$username = ''; $username = '';

View File

@ -20,6 +20,7 @@
*/ */
declare(strict_types=1); declare(strict_types=1);
use FireflyIII\User; use FireflyIII\User;
return [ return [

View File

@ -25,51 +25,51 @@
declare(strict_types=1); declare(strict_types=1);
return [ return [
'html_language' => 'en', 'html_language' => 'en',
'locale' => 'en, English, en_US.utf8, en_US.UTF-8', 'locale' => 'en, English, en_US.utf8, en_US.UTF-8',
// 'month' => '%B %Y', // 'month' => '%B %Y',
'month_js' => 'MMMM YYYY', 'month_js' => 'MMMM YYYY',
// 'month_and_day' => '%B %e, %Y', // 'month_and_day' => '%B %e, %Y',
'month_and_day_moment_js' => 'MMM D, YYYY', 'month_and_day_moment_js' => 'MMM D, YYYY',
'month_and_day_fns' => 'MMMM d, y', 'month_and_day_fns' => 'MMMM d, y',
'month_and_day_js' => 'MMMM Do, YYYY', 'month_and_day_js' => 'MMMM Do, YYYY',
// 'month_and_date_day' => '%A %B %e, %Y', // 'month_and_date_day' => '%A %B %e, %Y',
'month_and_date_day_js' => 'dddd MMMM Do, YYYY', 'month_and_date_day_js' => 'dddd MMMM Do, YYYY',
// 'month_and_day_no_year' => '%B %e', // 'month_and_day_no_year' => '%B %e',
'month_and_day_no_year_js' => 'MMMM Do', 'month_and_day_no_year_js' => 'MMMM Do',
// Ignore this comment // Ignore this comment
// 'date_time' => '%B %e, %Y, @ %T', // 'date_time' => '%B %e, %Y, @ %T',
'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss', 'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss',
'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss',
'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm',
// 'specific_day' => '%e %B %Y', // 'specific_day' => '%e %B %Y',
'specific_day_js' => 'D MMMM YYYY', 'specific_day_js' => 'D MMMM YYYY',
// 'week_in_year' => 'Week %V, %G', // 'week_in_year' => 'Week %V, %G',
'week_in_year_js' => '[Week] W, GGGG', 'week_in_year_js' => '[Week] W, GGGG',
'week_in_year_fns' => "'Week' w, yyyy", 'week_in_year_fns' => "'Week' w, yyyy",
// 'year' => '%Y', // 'year' => '%Y',
'year_js' => 'YYYY', 'year_js' => 'YYYY',
// 'half_year' => '%B %Y', // 'half_year' => '%B %Y',
'half_year_js' => '\QQ YYYY', 'half_year_js' => '\QQ YYYY',
'quarter_fns' => "'Q'Q, yyyy", 'quarter_fns' => "'Q'Q, yyyy",
'half_year_fns' => "'H{half}', yyyy", 'half_year_fns' => "'H{half}', yyyy",
'dow_1' => 'Monday', 'dow_1' => 'Monday',
'dow_2' => 'Tuesday', 'dow_2' => 'Tuesday',
'dow_3' => 'Wednesday', 'dow_3' => 'Wednesday',
'dow_4' => 'Thursday', 'dow_4' => 'Thursday',
'dow_5' => 'Friday', 'dow_5' => 'Friday',
'dow_6' => 'Saturday', 'dow_6' => 'Saturday',
'dow_7' => 'Sunday', 'dow_7' => 'Sunday',
]; ];
// Ignore this comment // Ignore this comment

View File

@ -1,444 +1,444 @@
{ {
"af_NA": "Afrikaans (Namibia)", "af_NA": "Afrikaans (Namibia)",
"af_ZA": "Afrikaans (South Africa)", "af_ZA": "Afrikaans (South Africa)",
"ak_GH": "Akan (Ghana)", "ak_GH": "Akan (Ghana)",
"sq_AL": "Albanian (Albania)", "sq_AL": "Albanian (Albania)",
"sq_XK": "Albanian (Kosovo)", "sq_XK": "Albanian (Kosovo)",
"sq_MK": "Albanian (Macedonia)", "sq_MK": "Albanian (Macedonia)",
"am_ET": "Amharic (Ethiopia)", "am_ET": "Amharic (Ethiopia)",
"ar_DZ": "Arabic (Algeria)", "ar_DZ": "Arabic (Algeria)",
"ar_BH": "Arabic (Bahrain)", "ar_BH": "Arabic (Bahrain)",
"ar_TD": "Arabic (Chad)", "ar_TD": "Arabic (Chad)",
"ar_KM": "Arabic (Comoros)", "ar_KM": "Arabic (Comoros)",
"ar_DJ": "Arabic (Djibouti)", "ar_DJ": "Arabic (Djibouti)",
"ar_EG": "Arabic (Egypt)", "ar_EG": "Arabic (Egypt)",
"ar_ER": "Arabic (Eritrea)", "ar_ER": "Arabic (Eritrea)",
"ar_IQ": "Arabic (Iraq)", "ar_IQ": "Arabic (Iraq)",
"ar_IL": "Arabic (Israel)", "ar_IL": "Arabic (Israel)",
"ar_JO": "Arabic (Jordan)", "ar_JO": "Arabic (Jordan)",
"ar_KW": "Arabic (Kuwait)", "ar_KW": "Arabic (Kuwait)",
"ar_LB": "Arabic (Lebanon)", "ar_LB": "Arabic (Lebanon)",
"ar_LY": "Arabic (Libya)", "ar_LY": "Arabic (Libya)",
"ar_MR": "Arabic (Mauritania)", "ar_MR": "Arabic (Mauritania)",
"ar_MA": "Arabic (Morocco)", "ar_MA": "Arabic (Morocco)",
"ar_OM": "Arabic (Oman)", "ar_OM": "Arabic (Oman)",
"ar_PS": "Arabic (Palestinian Territories)", "ar_PS": "Arabic (Palestinian Territories)",
"ar_QA": "Arabic (Qatar)", "ar_QA": "Arabic (Qatar)",
"ar_SA": "Arabic (Saudi Arabia)", "ar_SA": "Arabic (Saudi Arabia)",
"ar_SO": "Arabic (Somalia)", "ar_SO": "Arabic (Somalia)",
"ar_SS": "Arabic (South Sudan)", "ar_SS": "Arabic (South Sudan)",
"ar_SD": "Arabic (Sudan)", "ar_SD": "Arabic (Sudan)",
"ar_SY": "Arabic (Syria)", "ar_SY": "Arabic (Syria)",
"ar_TN": "Arabic (Tunisia)", "ar_TN": "Arabic (Tunisia)",
"ar_AE": "Arabic (United Arab Emirates)", "ar_AE": "Arabic (United Arab Emirates)",
"ar_EH": "Arabic (Western Sahara)", "ar_EH": "Arabic (Western Sahara)",
"ar_YE": "Arabic (Yemen)", "ar_YE": "Arabic (Yemen)",
"hy_AM": "Armenian (Armenia)", "hy_AM": "Armenian (Armenia)",
"as_IN": "Assamese (India)", "as_IN": "Assamese (India)",
"az_AZ": "Azerbaijani (Azerbaijan)", "az_AZ": "Azerbaijani (Azerbaijan)",
"az_Cyrl_AZ": "Azerbaijani (Cyrillic, Azerbaijan)", "az_Cyrl_AZ": "Azerbaijani (Cyrillic, Azerbaijan)",
"az_Cyrl": "Azerbaijani (Cyrillic)", "az_Cyrl": "Azerbaijani (Cyrillic)",
"az_Latn_AZ": "Azerbaijani (Latin, Azerbaijan)", "az_Latn_AZ": "Azerbaijani (Latin, Azerbaijan)",
"az_Latn": "Azerbaijani (Latin)", "az_Latn": "Azerbaijani (Latin)",
"bm_Latn_ML": "Bambara (Latin, Mali)", "bm_Latn_ML": "Bambara (Latin, Mali)",
"bm_Latn": "Bambara (Latin)", "bm_Latn": "Bambara (Latin)",
"eu_ES": "Basque (Spain)", "eu_ES": "Basque (Spain)",
"be_BY": "Belarusian (Belarus)", "be_BY": "Belarusian (Belarus)",
"bn_BD": "Bengali (Bangladesh)", "bn_BD": "Bengali (Bangladesh)",
"bn_IN": "Bengali (India)", "bn_IN": "Bengali (India)",
"bs_BA": "Bosnian (Bosnia & Herzegovina)", "bs_BA": "Bosnian (Bosnia & Herzegovina)",
"bs_Cyrl_BA": "Bosnian (Cyrillic, Bosnia & Herzegovina)", "bs_Cyrl_BA": "Bosnian (Cyrillic, Bosnia & Herzegovina)",
"bs_Cyrl": "Bosnian (Cyrillic)", "bs_Cyrl": "Bosnian (Cyrillic)",
"bs_Latn_BA": "Bosnian (Latin, Bosnia & Herzegovina)", "bs_Latn_BA": "Bosnian (Latin, Bosnia & Herzegovina)",
"bs_Latn": "Bosnian (Latin)", "bs_Latn": "Bosnian (Latin)",
"br_FR": "Breton (France)", "br_FR": "Breton (France)",
"bg_BG": "Bulgarian (Bulgaria)", "bg_BG": "Bulgarian (Bulgaria)",
"my_MM": "Burmese (Myanmar (Burma))", "my_MM": "Burmese (Myanmar (Burma))",
"ca_AD": "Catalan (Andorra)", "ca_AD": "Catalan (Andorra)",
"ca_FR": "Catalan (France)", "ca_FR": "Catalan (France)",
"ca_IT": "Catalan (Italy)", "ca_IT": "Catalan (Italy)",
"ca_ES": "Catalan (Spain)", "ca_ES": "Catalan (Spain)",
"zh_CN": "Chinese (China)", "zh_CN": "Chinese (China)",
"zh_HK": "Chinese (Hong Kong SAR China)", "zh_HK": "Chinese (Hong Kong SAR China)",
"zh_MO": "Chinese (Macau SAR China)", "zh_MO": "Chinese (Macau SAR China)",
"zh_Hans_CN": "Chinese (Simplified, China)", "zh_Hans_CN": "Chinese (Simplified, China)",
"zh_Hans_HK": "Chinese (Simplified, Hong Kong SAR China)", "zh_Hans_HK": "Chinese (Simplified, Hong Kong SAR China)",
"zh_Hans_MO": "Chinese (Simplified, Macau SAR China)", "zh_Hans_MO": "Chinese (Simplified, Macau SAR China)",
"zh_Hans_SG": "Chinese (Simplified, Singapore)", "zh_Hans_SG": "Chinese (Simplified, Singapore)",
"zh_Hans": "Chinese (Simplified)", "zh_Hans": "Chinese (Simplified)",
"zh_SG": "Chinese (Singapore)", "zh_SG": "Chinese (Singapore)",
"zh_TW": "Chinese (Taiwan)", "zh_TW": "Chinese (Taiwan)",
"zh_Hant_HK": "Chinese (Traditional, Hong Kong SAR China)", "zh_Hant_HK": "Chinese (Traditional, Hong Kong SAR China)",
"zh_Hant_MO": "Chinese (Traditional, Macau SAR China)", "zh_Hant_MO": "Chinese (Traditional, Macau SAR China)",
"zh_Hant_TW": "Chinese (Traditional, Taiwan)", "zh_Hant_TW": "Chinese (Traditional, Taiwan)",
"zh_Hant": "Chinese (Traditional)", "zh_Hant": "Chinese (Traditional)",
"kw_GB": "Cornish (United Kingdom)", "kw_GB": "Cornish (United Kingdom)",
"hr_BA": "Croatian (Bosnia & Herzegovina)", "hr_BA": "Croatian (Bosnia & Herzegovina)",
"hr_HR": "Croatian (Croatia)", "hr_HR": "Croatian (Croatia)",
"cs_CZ": "Czech (Czech Republic)", "cs_CZ": "Czech (Czech Republic)",
"da_DK": "Danish (Denmark)", "da_DK": "Danish (Denmark)",
"da_GL": "Danish (Greenland)", "da_GL": "Danish (Greenland)",
"nl_AW": "Dutch (Aruba)", "nl_AW": "Dutch (Aruba)",
"nl_BE": "Dutch (Belgium)", "nl_BE": "Dutch (Belgium)",
"nl_BQ": "Dutch (Caribbean Netherlands)", "nl_BQ": "Dutch (Caribbean Netherlands)",
"nl_CW": "Dutch (Cura\u00e7ao)", "nl_CW": "Dutch (Cura\u00e7ao)",
"nl_NL": "Dutch (Netherlands)", "nl_NL": "Dutch (Netherlands)",
"nl_SX": "Dutch (Sint Maarten)", "nl_SX": "Dutch (Sint Maarten)",
"nl_SR": "Dutch (Suriname)", "nl_SR": "Dutch (Suriname)",
"dz_BT": "Dzongkha (Bhutan)", "dz_BT": "Dzongkha (Bhutan)",
"en_AS": "English (American Samoa)", "en_AS": "English (American Samoa)",
"en_AI": "English (Anguilla)", "en_AI": "English (Anguilla)",
"en_AG": "English (Antigua & Barbuda)", "en_AG": "English (Antigua & Barbuda)",
"en_AU": "English (Australia)", "en_AU": "English (Australia)",
"en_BS": "English (Bahamas)", "en_BS": "English (Bahamas)",
"en_BB": "English (Barbados)", "en_BB": "English (Barbados)",
"en_BE": "English (Belgium)", "en_BE": "English (Belgium)",
"en_BZ": "English (Belize)", "en_BZ": "English (Belize)",
"en_BM": "English (Bermuda)", "en_BM": "English (Bermuda)",
"en_BW": "English (Botswana)", "en_BW": "English (Botswana)",
"en_IO": "English (British Indian Ocean Territory)", "en_IO": "English (British Indian Ocean Territory)",
"en_VG": "English (British Virgin Islands)", "en_VG": "English (British Virgin Islands)",
"en_CM": "English (Cameroon)", "en_CM": "English (Cameroon)",
"en_CA": "English (Canada)", "en_CA": "English (Canada)",
"en_KY": "English (Cayman Islands)", "en_KY": "English (Cayman Islands)",
"en_CX": "English (Christmas Island)", "en_CX": "English (Christmas Island)",
"en_CC": "English (Cocos (Keeling) Islands)", "en_CC": "English (Cocos (Keeling) Islands)",
"en_CK": "English (Cook Islands)", "en_CK": "English (Cook Islands)",
"en_DG": "English (Diego Garcia)", "en_DG": "English (Diego Garcia)",
"en_DM": "English (Dominica)", "en_DM": "English (Dominica)",
"en_ER": "English (Eritrea)", "en_ER": "English (Eritrea)",
"en_FK": "English (Falkland Islands)", "en_FK": "English (Falkland Islands)",
"en_FJ": "English (Fiji)", "en_FJ": "English (Fiji)",
"en_GM": "English (Gambia)", "en_GM": "English (Gambia)",
"en_GH": "English (Ghana)", "en_GH": "English (Ghana)",
"en_GI": "English (Gibraltar)", "en_GI": "English (Gibraltar)",
"en_GD": "English (Grenada)", "en_GD": "English (Grenada)",
"en_GU": "English (Guam)", "en_GU": "English (Guam)",
"en_GG": "English (Guernsey)", "en_GG": "English (Guernsey)",
"en_GY": "English (Guyana)", "en_GY": "English (Guyana)",
"en_HK": "English (Hong Kong SAR China)", "en_HK": "English (Hong Kong SAR China)",
"en_IN": "English (India)", "en_IN": "English (India)",
"en_IE": "English (Ireland)", "en_IE": "English (Ireland)",
"en_IM": "English (Isle of Man)", "en_IM": "English (Isle of Man)",
"en_JM": "English (Jamaica)", "en_JM": "English (Jamaica)",
"en_JE": "English (Jersey)", "en_JE": "English (Jersey)",
"en_KE": "English (Kenya)", "en_KE": "English (Kenya)",
"en_KI": "English (Kiribati)", "en_KI": "English (Kiribati)",
"en_LS": "English (Lesotho)", "en_LS": "English (Lesotho)",
"en_LR": "English (Liberia)", "en_LR": "English (Liberia)",
"en_MO": "English (Macau SAR China)", "en_MO": "English (Macau SAR China)",
"en_MG": "English (Madagascar)", "en_MG": "English (Madagascar)",
"en_MW": "English (Malawi)", "en_MW": "English (Malawi)",
"en_MY": "English (Malaysia)", "en_MY": "English (Malaysia)",
"en_MT": "English (Malta)", "en_MT": "English (Malta)",
"en_MH": "English (Marshall Islands)", "en_MH": "English (Marshall Islands)",
"en_MU": "English (Mauritius)", "en_MU": "English (Mauritius)",
"en_FM": "English (Micronesia)", "en_FM": "English (Micronesia)",
"en_MS": "English (Montserrat)", "en_MS": "English (Montserrat)",
"en_NA": "English (Namibia)", "en_NA": "English (Namibia)",
"en_NR": "English (Nauru)", "en_NR": "English (Nauru)",
"en_NZ": "English (New Zealand)", "en_NZ": "English (New Zealand)",
"en_NG": "English (Nigeria)", "en_NG": "English (Nigeria)",
"en_NU": "English (Niue)", "en_NU": "English (Niue)",
"en_NF": "English (Norfolk Island)", "en_NF": "English (Norfolk Island)",
"en_MP": "English (Northern Mariana Islands)", "en_MP": "English (Northern Mariana Islands)",
"en_PK": "English (Pakistan)", "en_PK": "English (Pakistan)",
"en_PW": "English (Palau)", "en_PW": "English (Palau)",
"en_PG": "English (Papua New Guinea)", "en_PG": "English (Papua New Guinea)",
"en_PH": "English (Philippines)", "en_PH": "English (Philippines)",
"en_PN": "English (Pitcairn Islands)", "en_PN": "English (Pitcairn Islands)",
"en_PR": "English (Puerto Rico)", "en_PR": "English (Puerto Rico)",
"en_RW": "English (Rwanda)", "en_RW": "English (Rwanda)",
"en_WS": "English (Samoa)", "en_WS": "English (Samoa)",
"en_SC": "English (Seychelles)", "en_SC": "English (Seychelles)",
"en_SL": "English (Sierra Leone)", "en_SL": "English (Sierra Leone)",
"en_SG": "English (Singapore)", "en_SG": "English (Singapore)",
"en_SX": "English (Sint Maarten)", "en_SX": "English (Sint Maarten)",
"en_SB": "English (Solomon Islands)", "en_SB": "English (Solomon Islands)",
"en_ZA": "English (South Africa)", "en_ZA": "English (South Africa)",
"en_SS": "English (South Sudan)", "en_SS": "English (South Sudan)",
"en_SH": "English (St. Helena)", "en_SH": "English (St. Helena)",
"en_KN": "English (St. Kitts & Nevis)", "en_KN": "English (St. Kitts & Nevis)",
"en_LC": "English (St. Lucia)", "en_LC": "English (St. Lucia)",
"en_VC": "English (St. Vincent & Grenadines)", "en_VC": "English (St. Vincent & Grenadines)",
"en_SD": "English (Sudan)", "en_SD": "English (Sudan)",
"en_SZ": "English (Swaziland)", "en_SZ": "English (Swaziland)",
"en_TZ": "English (Tanzania)", "en_TZ": "English (Tanzania)",
"en_TK": "English (Tokelau)", "en_TK": "English (Tokelau)",
"en_TO": "English (Tonga)", "en_TO": "English (Tonga)",
"en_TT": "English (Trinidad & Tobago)", "en_TT": "English (Trinidad & Tobago)",
"en_TC": "English (Turks & Caicos Islands)", "en_TC": "English (Turks & Caicos Islands)",
"en_TV": "English (Tuvalu)", "en_TV": "English (Tuvalu)",
"en_UM": "English (U.S. Outlying Islands)", "en_UM": "English (U.S. Outlying Islands)",
"en_VI": "English (U.S. Virgin Islands)", "en_VI": "English (U.S. Virgin Islands)",
"en_UG": "English (Uganda)", "en_UG": "English (Uganda)",
"en_GB": "English (United Kingdom)", "en_GB": "English (United Kingdom)",
"en_US": "English (United States)", "en_US": "English (United States)",
"en_VU": "English (Vanuatu)", "en_VU": "English (Vanuatu)",
"en_ZM": "English (Zambia)", "en_ZM": "English (Zambia)",
"en_ZW": "English (Zimbabwe)", "en_ZW": "English (Zimbabwe)",
"et_EE": "Estonian (Estonia)", "et_EE": "Estonian (Estonia)",
"ee_GH": "Ewe (Ghana)", "ee_GH": "Ewe (Ghana)",
"ee_TG": "Ewe (Togo)", "ee_TG": "Ewe (Togo)",
"fo_FO": "Faroese (Faroe Islands)", "fo_FO": "Faroese (Faroe Islands)",
"fi_FI": "Finnish (Finland)", "fi_FI": "Finnish (Finland)",
"fr_DZ": "French (Algeria)", "fr_DZ": "French (Algeria)",
"fr_BE": "French (Belgium)", "fr_BE": "French (Belgium)",
"fr_BJ": "French (Benin)", "fr_BJ": "French (Benin)",
"fr_BF": "French (Burkina Faso)", "fr_BF": "French (Burkina Faso)",
"fr_BI": "French (Burundi)", "fr_BI": "French (Burundi)",
"fr_CM": "French (Cameroon)", "fr_CM": "French (Cameroon)",
"fr_CA": "French (Canada)", "fr_CA": "French (Canada)",
"fr_CF": "French (Central African Republic)", "fr_CF": "French (Central African Republic)",
"fr_TD": "French (Chad)", "fr_TD": "French (Chad)",
"fr_KM": "French (Comoros)", "fr_KM": "French (Comoros)",
"fr_CG": "French (Congo - Brazzaville)", "fr_CG": "French (Congo - Brazzaville)",
"fr_CD": "French (Congo - Kinshasa)", "fr_CD": "French (Congo - Kinshasa)",
"fr_CI": "French (C\u00f4te d\u2019Ivoire)", "fr_CI": "French (C\u00f4te d\u2019Ivoire)",
"fr_DJ": "French (Djibouti)", "fr_DJ": "French (Djibouti)",
"fr_GQ": "French (Equatorial Guinea)", "fr_GQ": "French (Equatorial Guinea)",
"fr_FR": "French (France)", "fr_FR": "French (France)",
"fr_GF": "French (French Guiana)", "fr_GF": "French (French Guiana)",
"fr_PF": "French (French Polynesia)", "fr_PF": "French (French Polynesia)",
"fr_GA": "French (Gabon)", "fr_GA": "French (Gabon)",
"fr_GP": "French (Guadeloupe)", "fr_GP": "French (Guadeloupe)",
"fr_GN": "French (Guinea)", "fr_GN": "French (Guinea)",
"fr_HT": "French (Haiti)", "fr_HT": "French (Haiti)",
"fr_LU": "French (Luxembourg)", "fr_LU": "French (Luxembourg)",
"fr_MG": "French (Madagascar)", "fr_MG": "French (Madagascar)",
"fr_ML": "French (Mali)", "fr_ML": "French (Mali)",
"fr_MQ": "French (Martinique)", "fr_MQ": "French (Martinique)",
"fr_MR": "French (Mauritania)", "fr_MR": "French (Mauritania)",
"fr_MU": "French (Mauritius)", "fr_MU": "French (Mauritius)",
"fr_YT": "French (Mayotte)", "fr_YT": "French (Mayotte)",
"fr_MC": "French (Monaco)", "fr_MC": "French (Monaco)",
"fr_MA": "French (Morocco)", "fr_MA": "French (Morocco)",
"fr_NC": "French (New Caledonia)", "fr_NC": "French (New Caledonia)",
"fr_NE": "French (Niger)", "fr_NE": "French (Niger)",
"fr_RE": "French (R\u00e9union)", "fr_RE": "French (R\u00e9union)",
"fr_RW": "French (Rwanda)", "fr_RW": "French (Rwanda)",
"fr_SN": "French (Senegal)", "fr_SN": "French (Senegal)",
"fr_SC": "French (Seychelles)", "fr_SC": "French (Seychelles)",
"fr_BL": "French (St. Barth\u00e9lemy)", "fr_BL": "French (St. Barth\u00e9lemy)",
"fr_MF": "French (St. Martin)", "fr_MF": "French (St. Martin)",
"fr_PM": "French (St. Pierre & Miquelon)", "fr_PM": "French (St. Pierre & Miquelon)",
"fr_CH": "French (Switzerland)", "fr_CH": "French (Switzerland)",
"fr_SY": "French (Syria)", "fr_SY": "French (Syria)",
"fr_TG": "French (Togo)", "fr_TG": "French (Togo)",
"fr_TN": "French (Tunisia)", "fr_TN": "French (Tunisia)",
"fr_VU": "French (Vanuatu)", "fr_VU": "French (Vanuatu)",
"fr_WF": "French (Wallis & Futuna)", "fr_WF": "French (Wallis & Futuna)",
"ff_CM": "Fulah (Cameroon)", "ff_CM": "Fulah (Cameroon)",
"ff_GN": "Fulah (Guinea)", "ff_GN": "Fulah (Guinea)",
"ff_MR": "Fulah (Mauritania)", "ff_MR": "Fulah (Mauritania)",
"ff_SN": "Fulah (Senegal)", "ff_SN": "Fulah (Senegal)",
"gl_ES": "Galician (Spain)", "gl_ES": "Galician (Spain)",
"lg_UG": "Ganda (Uganda)", "lg_UG": "Ganda (Uganda)",
"ka_GE": "Georgian (Georgia)", "ka_GE": "Georgian (Georgia)",
"de_AT": "German (Austria)", "de_AT": "German (Austria)",
"de_BE": "German (Belgium)", "de_BE": "German (Belgium)",
"de_DE": "German (Germany)", "de_DE": "German (Germany)",
"de_LI": "German (Liechtenstein)", "de_LI": "German (Liechtenstein)",
"de_LU": "German (Luxembourg)", "de_LU": "German (Luxembourg)",
"de_CH": "German (Switzerland)", "de_CH": "German (Switzerland)",
"el_CY": "Greek (Cyprus)", "el_CY": "Greek (Cyprus)",
"el_GR": "Greek (Greece)", "el_GR": "Greek (Greece)",
"gu_IN": "Gujarati (India)", "gu_IN": "Gujarati (India)",
"ha_GH": "Hausa (Ghana)", "ha_GH": "Hausa (Ghana)",
"ha_Latn_GH": "Hausa (Latin, Ghana)", "ha_Latn_GH": "Hausa (Latin, Ghana)",
"ha_Latn_NE": "Hausa (Latin, Niger)", "ha_Latn_NE": "Hausa (Latin, Niger)",
"ha_Latn_NG": "Hausa (Latin, Nigeria)", "ha_Latn_NG": "Hausa (Latin, Nigeria)",
"ha_Latn": "Hausa (Latin)", "ha_Latn": "Hausa (Latin)",
"ha_NE": "Hausa (Niger)", "ha_NE": "Hausa (Niger)",
"ha_NG": "Hausa (Nigeria)", "ha_NG": "Hausa (Nigeria)",
"he_IL": "Hebrew (Israel)", "he_IL": "Hebrew (Israel)",
"hi_IN": "Hindi (India)", "hi_IN": "Hindi (India)",
"hu_HU": "Hungarian (Hungary)", "hu_HU": "Hungarian (Hungary)",
"is_IS": "Icelandic (Iceland)", "is_IS": "Icelandic (Iceland)",
"ig_NG": "Igbo (Nigeria)", "ig_NG": "Igbo (Nigeria)",
"id_ID": "Indonesian (Indonesia)", "id_ID": "Indonesian (Indonesia)",
"ga_IE": "Irish (Ireland)", "ga_IE": "Irish (Ireland)",
"it_IT": "Italian (Italy)", "it_IT": "Italian (Italy)",
"it_SM": "Italian (San Marino)", "it_SM": "Italian (San Marino)",
"it_CH": "Italian (Switzerland)", "it_CH": "Italian (Switzerland)",
"ja_JP": "Japanese (Japan)", "ja_JP": "Japanese (Japan)",
"kl_GL": "Kalaallisut (Greenland)", "kl_GL": "Kalaallisut (Greenland)",
"kn_IN": "Kannada (India)", "kn_IN": "Kannada (India)",
"ks_Arab_IN": "Kashmiri (Arabic, India)", "ks_Arab_IN": "Kashmiri (Arabic, India)",
"ks_Arab": "Kashmiri (Arabic)", "ks_Arab": "Kashmiri (Arabic)",
"ks_IN": "Kashmiri (India)", "ks_IN": "Kashmiri (India)",
"kk_Cyrl_KZ": "Kazakh (Cyrillic, Kazakhstan)", "kk_Cyrl_KZ": "Kazakh (Cyrillic, Kazakhstan)",
"kk_Cyrl": "Kazakh (Cyrillic)", "kk_Cyrl": "Kazakh (Cyrillic)",
"kk_KZ": "Kazakh (Kazakhstan)", "kk_KZ": "Kazakh (Kazakhstan)",
"km_KH": "Khmer (Cambodia)", "km_KH": "Khmer (Cambodia)",
"ki_KE": "Kikuyu (Kenya)", "ki_KE": "Kikuyu (Kenya)",
"rw_RW": "Kinyarwanda (Rwanda)", "rw_RW": "Kinyarwanda (Rwanda)",
"ko_KP": "Korean (North Korea)", "ko_KP": "Korean (North Korea)",
"ko_KR": "Korean (South Korea)", "ko_KR": "Korean (South Korea)",
"ky_Cyrl_KG": "Kyrgyz (Cyrillic, Kyrgyzstan)", "ky_Cyrl_KG": "Kyrgyz (Cyrillic, Kyrgyzstan)",
"ky_Cyrl": "Kyrgyz (Cyrillic)", "ky_Cyrl": "Kyrgyz (Cyrillic)",
"ky_KG": "Kyrgyz (Kyrgyzstan)", "ky_KG": "Kyrgyz (Kyrgyzstan)",
"lo_LA": "Lao (Laos)", "lo_LA": "Lao (Laos)",
"lv_LV": "Latvian (Latvia)", "lv_LV": "Latvian (Latvia)",
"ln_AO": "Lingala (Angola)", "ln_AO": "Lingala (Angola)",
"ln_CF": "Lingala (Central African Republic)", "ln_CF": "Lingala (Central African Republic)",
"ln_CG": "Lingala (Congo - Brazzaville)", "ln_CG": "Lingala (Congo - Brazzaville)",
"ln_CD": "Lingala (Congo - Kinshasa)", "ln_CD": "Lingala (Congo - Kinshasa)",
"lt_LT": "Lithuanian (Lithuania)", "lt_LT": "Lithuanian (Lithuania)",
"lu_CD": "Luba-Katanga (Congo - Kinshasa)", "lu_CD": "Luba-Katanga (Congo - Kinshasa)",
"lb_LU": "Luxembourgish (Luxembourg)", "lb_LU": "Luxembourgish (Luxembourg)",
"mk_MK": "Macedonian (Macedonia)", "mk_MK": "Macedonian (Macedonia)",
"mg_MG": "Malagasy (Madagascar)", "mg_MG": "Malagasy (Madagascar)",
"ms_BN": "Malay (Brunei)", "ms_BN": "Malay (Brunei)",
"ms_Latn_BN": "Malay (Latin, Brunei)", "ms_Latn_BN": "Malay (Latin, Brunei)",
"ms_Latn_MY": "Malay (Latin, Malaysia)", "ms_Latn_MY": "Malay (Latin, Malaysia)",
"ms_Latn_SG": "Malay (Latin, Singapore)", "ms_Latn_SG": "Malay (Latin, Singapore)",
"ms_Latn": "Malay (Latin)", "ms_Latn": "Malay (Latin)",
"ms_MY": "Malay (Malaysia)", "ms_MY": "Malay (Malaysia)",
"ms_SG": "Malay (Singapore)", "ms_SG": "Malay (Singapore)",
"ml_IN": "Malayalam (India)", "ml_IN": "Malayalam (India)",
"mt_MT": "Maltese (Malta)", "mt_MT": "Maltese (Malta)",
"gv_IM": "Manx (Isle of Man)", "gv_IM": "Manx (Isle of Man)",
"mr_IN": "Marathi (India)", "mr_IN": "Marathi (India)",
"mn_Cyrl_MN": "Mongolian (Cyrillic, Mongolia)", "mn_Cyrl_MN": "Mongolian (Cyrillic, Mongolia)",
"mn_Cyrl": "Mongolian (Cyrillic)", "mn_Cyrl": "Mongolian (Cyrillic)",
"mn_MN": "Mongolian (Mongolia)", "mn_MN": "Mongolian (Mongolia)",
"ne_IN": "Nepali (India)", "ne_IN": "Nepali (India)",
"ne_NP": "Nepali (Nepal)", "ne_NP": "Nepali (Nepal)",
"nd_ZW": "North Ndebele (Zimbabwe)", "nd_ZW": "North Ndebele (Zimbabwe)",
"se_FI": "Northern Sami (Finland)", "se_FI": "Northern Sami (Finland)",
"se_NO": "Northern Sami (Norway)", "se_NO": "Northern Sami (Norway)",
"se_SE": "Northern Sami (Sweden)", "se_SE": "Northern Sami (Sweden)",
"no_NO": "Norwegian (Norway)", "no_NO": "Norwegian (Norway)",
"nb_NO": "Norwegian Bokm\u00e5l (Norway)", "nb_NO": "Norwegian Bokm\u00e5l (Norway)",
"nb_SJ": "Norwegian Bokm\u00e5l (Svalbard & Jan Mayen)", "nb_SJ": "Norwegian Bokm\u00e5l (Svalbard & Jan Mayen)",
"nn_NO": "Norwegian Nynorsk (Norway)", "nn_NO": "Norwegian Nynorsk (Norway)",
"or_IN": "Oriya (India)", "or_IN": "Oriya (India)",
"om_ET": "Oromo (Ethiopia)", "om_ET": "Oromo (Ethiopia)",
"om_KE": "Oromo (Kenya)", "om_KE": "Oromo (Kenya)",
"os_GE": "Ossetic (Georgia)", "os_GE": "Ossetic (Georgia)",
"os_RU": "Ossetic (Russia)", "os_RU": "Ossetic (Russia)",
"ps_AF": "Pashto (Afghanistan)", "ps_AF": "Pashto (Afghanistan)",
"fa_AF": "Persian (Afghanistan)", "fa_AF": "Persian (Afghanistan)",
"fa_IR": "Persian (Iran)", "fa_IR": "Persian (Iran)",
"pl_PL": "Polish (Poland)", "pl_PL": "Polish (Poland)",
"pt_AO": "Portuguese (Angola)", "pt_AO": "Portuguese (Angola)",
"pt_BR": "Portuguese (Brazil)", "pt_BR": "Portuguese (Brazil)",
"pt_CV": "Portuguese (Cape Verde)", "pt_CV": "Portuguese (Cape Verde)",
"pt_GW": "Portuguese (Guinea-Bissau)", "pt_GW": "Portuguese (Guinea-Bissau)",
"pt_MO": "Portuguese (Macau SAR China)", "pt_MO": "Portuguese (Macau SAR China)",
"pt_MZ": "Portuguese (Mozambique)", "pt_MZ": "Portuguese (Mozambique)",
"pt_PT": "Portuguese (Portugal)", "pt_PT": "Portuguese (Portugal)",
"pt_ST": "Portuguese (S\u00e3o Tom\u00e9 & Pr\u00edncipe)", "pt_ST": "Portuguese (S\u00e3o Tom\u00e9 & Pr\u00edncipe)",
"pt_TL": "Portuguese (Timor-Leste)", "pt_TL": "Portuguese (Timor-Leste)",
"pa_Arab_PK": "Punjabi (Arabic, Pakistan)", "pa_Arab_PK": "Punjabi (Arabic, Pakistan)",
"pa_Arab": "Punjabi (Arabic)", "pa_Arab": "Punjabi (Arabic)",
"pa_Guru_IN": "Punjabi (Gurmukhi, India)", "pa_Guru_IN": "Punjabi (Gurmukhi, India)",
"pa_Guru": "Punjabi (Gurmukhi)", "pa_Guru": "Punjabi (Gurmukhi)",
"pa_IN": "Punjabi (India)", "pa_IN": "Punjabi (India)",
"pa_PK": "Punjabi (Pakistan)", "pa_PK": "Punjabi (Pakistan)",
"qu_BO": "Quechua (Bolivia)", "qu_BO": "Quechua (Bolivia)",
"qu_EC": "Quechua (Ecuador)", "qu_EC": "Quechua (Ecuador)",
"qu_PE": "Quechua (Peru)", "qu_PE": "Quechua (Peru)",
"ro_MD": "Romanian (Moldova)", "ro_MD": "Romanian (Moldova)",
"ro_RO": "Romanian (Romania)", "ro_RO": "Romanian (Romania)",
"rm_CH": "Romansh (Switzerland)", "rm_CH": "Romansh (Switzerland)",
"rn_BI": "Rundi (Burundi)", "rn_BI": "Rundi (Burundi)",
"ru_BY": "Russian (Belarus)", "ru_BY": "Russian (Belarus)",
"ru_KZ": "Russian (Kazakhstan)", "ru_KZ": "Russian (Kazakhstan)",
"ru_KG": "Russian (Kyrgyzstan)", "ru_KG": "Russian (Kyrgyzstan)",
"ru_MD": "Russian (Moldova)", "ru_MD": "Russian (Moldova)",
"ru_RU": "Russian (Russia)", "ru_RU": "Russian (Russia)",
"ru_UA": "Russian (Ukraine)", "ru_UA": "Russian (Ukraine)",
"sg_CF": "Sango (Central African Republic)", "sg_CF": "Sango (Central African Republic)",
"gd_GB": "Scottish Gaelic (United Kingdom)", "gd_GB": "Scottish Gaelic (United Kingdom)",
"sr_BA": "Serbian (Bosnia & Herzegovina)", "sr_BA": "Serbian (Bosnia & Herzegovina)",
"sr_Cyrl_BA": "Serbian (Cyrillic, Bosnia & Herzegovina)", "sr_Cyrl_BA": "Serbian (Cyrillic, Bosnia & Herzegovina)",
"sr_Cyrl_XK": "Serbian (Cyrillic, Kosovo)", "sr_Cyrl_XK": "Serbian (Cyrillic, Kosovo)",
"sr_Cyrl_ME": "Serbian (Cyrillic, Montenegro)", "sr_Cyrl_ME": "Serbian (Cyrillic, Montenegro)",
"sr_Cyrl_RS": "Serbian (Cyrillic, Serbia)", "sr_Cyrl_RS": "Serbian (Cyrillic, Serbia)",
"sr_Cyrl": "Serbian (Cyrillic)", "sr_Cyrl": "Serbian (Cyrillic)",
"sr_XK": "Serbian (Kosovo)", "sr_XK": "Serbian (Kosovo)",
"sr_Latn_BA": "Serbian (Latin, Bosnia & Herzegovina)", "sr_Latn_BA": "Serbian (Latin, Bosnia & Herzegovina)",
"sr_Latn_XK": "Serbian (Latin, Kosovo)", "sr_Latn_XK": "Serbian (Latin, Kosovo)",
"sr_Latn_ME": "Serbian (Latin, Montenegro)", "sr_Latn_ME": "Serbian (Latin, Montenegro)",
"sr_Latn_RS": "Serbian (Latin, Serbia)", "sr_Latn_RS": "Serbian (Latin, Serbia)",
"sr_Latn": "Serbian (Latin)", "sr_Latn": "Serbian (Latin)",
"sr_ME": "Serbian (Montenegro)", "sr_ME": "Serbian (Montenegro)",
"sr_RS": "Serbian (Serbia)", "sr_RS": "Serbian (Serbia)",
"sh_BA": "Serbo-Croatian (Bosnia & Herzegovina)", "sh_BA": "Serbo-Croatian (Bosnia & Herzegovina)",
"sn_ZW": "Shona (Zimbabwe)", "sn_ZW": "Shona (Zimbabwe)",
"ii_CN": "Sichuan Yi (China)", "ii_CN": "Sichuan Yi (China)",
"si_LK": "Sinhala (Sri Lanka)", "si_LK": "Sinhala (Sri Lanka)",
"sk_SK": "Slovak (Slovakia)", "sk_SK": "Slovak (Slovakia)",
"sl_SI": "Slovenian (Slovenia)", "sl_SI": "Slovenian (Slovenia)",
"so_DJ": "Somali (Djibouti)", "so_DJ": "Somali (Djibouti)",
"so_ET": "Somali (Ethiopia)", "so_ET": "Somali (Ethiopia)",
"so_KE": "Somali (Kenya)", "so_KE": "Somali (Kenya)",
"so_SO": "Somali (Somalia)", "so_SO": "Somali (Somalia)",
"es_AR": "Spanish (Argentina)", "es_AR": "Spanish (Argentina)",
"es_BO": "Spanish (Bolivia)", "es_BO": "Spanish (Bolivia)",
"es_IC": "Spanish (Canary Islands)", "es_IC": "Spanish (Canary Islands)",
"es_EA": "Spanish (Ceuta & Melilla)", "es_EA": "Spanish (Ceuta & Melilla)",
"es_CL": "Spanish (Chile)", "es_CL": "Spanish (Chile)",
"es_CO": "Spanish (Colombia)", "es_CO": "Spanish (Colombia)",
"es_CR": "Spanish (Costa Rica)", "es_CR": "Spanish (Costa Rica)",
"es_CU": "Spanish (Cuba)", "es_CU": "Spanish (Cuba)",
"es_DO": "Spanish (Dominican Republic)", "es_DO": "Spanish (Dominican Republic)",
"es_EC": "Spanish (Ecuador)", "es_EC": "Spanish (Ecuador)",
"es_SV": "Spanish (El Salvador)", "es_SV": "Spanish (El Salvador)",
"es_GQ": "Spanish (Equatorial Guinea)", "es_GQ": "Spanish (Equatorial Guinea)",
"es_GT": "Spanish (Guatemala)", "es_GT": "Spanish (Guatemala)",
"es_HN": "Spanish (Honduras)", "es_HN": "Spanish (Honduras)",
"es_MX": "Spanish (Mexico)", "es_MX": "Spanish (Mexico)",
"es_NI": "Spanish (Nicaragua)", "es_NI": "Spanish (Nicaragua)",
"es_PA": "Spanish (Panama)", "es_PA": "Spanish (Panama)",
"es_PY": "Spanish (Paraguay)", "es_PY": "Spanish (Paraguay)",
"es_PE": "Spanish (Peru)", "es_PE": "Spanish (Peru)",
"es_PH": "Spanish (Philippines)", "es_PH": "Spanish (Philippines)",
"es_PR": "Spanish (Puerto Rico)", "es_PR": "Spanish (Puerto Rico)",
"es_ES": "Spanish (Spain)", "es_ES": "Spanish (Spain)",
"es_US": "Spanish (United States)", "es_US": "Spanish (United States)",
"es_UY": "Spanish (Uruguay)", "es_UY": "Spanish (Uruguay)",
"es_VE": "Spanish (Venezuela)", "es_VE": "Spanish (Venezuela)",
"sw_KE": "Swahili (Kenya)", "sw_KE": "Swahili (Kenya)",
"sw_TZ": "Swahili (Tanzania)", "sw_TZ": "Swahili (Tanzania)",
"sw_UG": "Swahili (Uganda)", "sw_UG": "Swahili (Uganda)",
"sv_AX": "Swedish (\u00c5land Islands)", "sv_AX": "Swedish (\u00c5land Islands)",
"sv_FI": "Swedish (Finland)", "sv_FI": "Swedish (Finland)",
"sv_SE": "Swedish (Sweden)", "sv_SE": "Swedish (Sweden)",
"tl_PH": "Tagalog (Philippines)", "tl_PH": "Tagalog (Philippines)",
"ta_IN": "Tamil (India)", "ta_IN": "Tamil (India)",
"ta_MY": "Tamil (Malaysia)", "ta_MY": "Tamil (Malaysia)",
"ta_SG": "Tamil (Singapore)", "ta_SG": "Tamil (Singapore)",
"ta_LK": "Tamil (Sri Lanka)", "ta_LK": "Tamil (Sri Lanka)",
"te_IN": "Telugu (India)", "te_IN": "Telugu (India)",
"th_TH": "Thai (Thailand)", "th_TH": "Thai (Thailand)",
"bo_CN": "Tibetan (China)", "bo_CN": "Tibetan (China)",
"bo_IN": "Tibetan (India)", "bo_IN": "Tibetan (India)",
"ti_ER": "Tigrinya (Eritrea)", "ti_ER": "Tigrinya (Eritrea)",
"ti_ET": "Tigrinya (Ethiopia)", "ti_ET": "Tigrinya (Ethiopia)",
"to_TO": "Tongan (Tonga)", "to_TO": "Tongan (Tonga)",
"tr_CY": "Turkish (Cyprus)", "tr_CY": "Turkish (Cyprus)",
"tr_TR": "Turkish (Turkey)", "tr_TR": "Turkish (Turkey)",
"uk_UA": "Ukrainian (Ukraine)", "uk_UA": "Ukrainian (Ukraine)",
"ur_IN": "Urdu (India)", "ur_IN": "Urdu (India)",
"ur_PK": "Urdu (Pakistan)", "ur_PK": "Urdu (Pakistan)",
"ug_Arab_CN": "Uyghur (Arabic, China)", "ug_Arab_CN": "Uyghur (Arabic, China)",
"ug_Arab": "Uyghur (Arabic)", "ug_Arab": "Uyghur (Arabic)",
"ug_CN": "Uyghur (China)", "ug_CN": "Uyghur (China)",
"uz_AF": "Uzbek (Afghanistan)", "uz_AF": "Uzbek (Afghanistan)",
"uz_Arab_AF": "Uzbek (Arabic, Afghanistan)", "uz_Arab_AF": "Uzbek (Arabic, Afghanistan)",
"uz_Arab": "Uzbek (Arabic)", "uz_Arab": "Uzbek (Arabic)",
"uz_Cyrl_UZ": "Uzbek (Cyrillic, Uzbekistan)", "uz_Cyrl_UZ": "Uzbek (Cyrillic, Uzbekistan)",
"uz_Cyrl": "Uzbek (Cyrillic)", "uz_Cyrl": "Uzbek (Cyrillic)",
"uz_Latn_UZ": "Uzbek (Latin, Uzbekistan)", "uz_Latn_UZ": "Uzbek (Latin, Uzbekistan)",
"uz_Latn": "Uzbek (Latin)", "uz_Latn": "Uzbek (Latin)",
"uz_UZ": "Uzbek (Uzbekistan)", "uz_UZ": "Uzbek (Uzbekistan)",
"vi_VN": "Vietnamese (Vietnam)", "vi_VN": "Vietnamese (Vietnam)",
"cy_GB": "Welsh (United Kingdom)", "cy_GB": "Welsh (United Kingdom)",
"fy_NL": "Western Frisian (Netherlands)", "fy_NL": "Western Frisian (Netherlands)",
"yo_BJ": "Yoruba (Benin)", "yo_BJ": "Yoruba (Benin)",
"yo_NG": "Yoruba (Nigeria)", "yo_NG": "Yoruba (Nigeria)",
"zu_ZA": "Zulu (South Africa)" "zu_ZA": "Zulu (South Africa)"
} }