mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-31 07:35:24 +00:00
v26.10.1 (#1599)
* feat: AI translations at release, 7 new languages and regional fallback * fix: proper plural forms for count strings and full translations * fix: plural forms for selected, hidden and active counts * fix: synced plugin updates failing on desktop and server-only plugins shown as stopped * fix: restore rounded corners on app icons and favicon * feat: desktop app auto updates with automatic, ask first or never modes * feat: community and custom plugin registries * feat: plugin guide for AI tools in the SDK with a lint check * fix: keep the terminal WebSocket open past nginx's 60s default (#1588) * chore: update changelog * feat: show plugin download counts only and stop CI builds inflating them * feat: hide installed plugins in the browse tab by default * chore: pin bundled plugins to latest releases * chore: update translations * fix: focusing a saved password field and saving no longer erases it * fix: tell desktop users when their 2.8 data needs 2.9 first * fix: point windows update info at the x64 installer * fix: keep desktop client tunnel sockets alive behind proxies * chore: pin bundled plugins to latest releases * fix: cover client tunnel keepalive in the c2s runtime tests * fix: typing after opening a host no longer goes to the host search * fix: accept tab and = separators in SSH config import (#1598) * chore: update changelog * chore: drop plugin versions from core changelog * chore: update translations * chore: lint, format, and bump version to 26.10.1 --------- Co-authored-by: Darnel Hunter <68697450+innotelinc@users.noreply.github.com> Co-authored-by: Iain <Iain1970@protonmail.com>
This commit is contained in:
174 files changed
+94334
-39995
No files matched your search
@@ -1,5 +1,9 @@
|
||||
# Translations
|
||||
|
||||
Only `en.json` needs to be updated. Every other language in `translated/` is filled in automatically for any string that doesn't have a translation yet.
|
||||
Only `en.json` needs to be updated. Every other language in `translated/` is translated automatically on each release (and by the Translate workflow) with the Termix LLM server, using the translator in [Termix-Registry](https://github.com/Termix-SSH/Termix-Registry/tree/main/translate).
|
||||
|
||||
If an automatic translation is wrong, fix it in that language's file. Strings that already have a translation are never overwritten.
|
||||
New strings and strings whose English changed are translated. `translations-lock.json` tracks which English text each translation was made from, so don't edit it by hand.
|
||||
|
||||
If an automatic translation is wrong, fix it in that language's file. A fixed string is kept until its English changes.
|
||||
|
||||
To add a language, add it to `languages.json` here and in `translate/languages.json` in Termix-Registry.
|
||||
+120
-28
@@ -233,6 +233,37 @@
|
||||
"desktopLinked": "Linked to {{server}}",
|
||||
"pluginsDocsLink": "Read about each one"
|
||||
},
|
||||
"desktopUpdates": {
|
||||
"title": "Desktop app",
|
||||
"mode": "Updates",
|
||||
"modeHint": "How this app gets new versions.",
|
||||
"manualModeHint": "This copy can not update itself, so Termix only tells you when a new version is out.",
|
||||
"modeAutomatic": "Automatic",
|
||||
"modePrompt": "Ask first",
|
||||
"modeNever": "Never",
|
||||
"automaticBody": "Download new versions in the background and install them when you restart.",
|
||||
"promptBody": "Tell me when a new version is out and let me choose when to download it.",
|
||||
"neverBody": "Do not check for updates. You can still check by hand in Settings.",
|
||||
"onboardingTitle": "App updates",
|
||||
"onboardingBody": "The desktop app can now update itself. Pick how you want new versions to arrive. You can change this later in Settings, Updates.",
|
||||
"onboardingManual": "This copy of the app was installed in a way that can not update itself, so Termix will tell you when a new version is out with a link to download it.",
|
||||
"status": "Version {{version}}",
|
||||
"statusIdle": "Not checked yet",
|
||||
"statusChecking": "Checking for updates",
|
||||
"statusAvailable": "Version {{version}} is available",
|
||||
"statusDownloading": "Downloading {{version}} ({{progress}}%)",
|
||||
"statusReady": "Version {{version}} is ready. Restart to install it.",
|
||||
"statusUpToDate": "You have the newest version",
|
||||
"statusError": "Could not check for updates. Try again later.",
|
||||
"checkNow": "Check now",
|
||||
"download": "Download",
|
||||
"restart": "Restart now",
|
||||
"later": "Later",
|
||||
"available": "Termix {{version}} is available",
|
||||
"manualHint": "Download it from the release page and install it over this one.",
|
||||
"ready": "Termix {{version}} is ready to install",
|
||||
"readyHint": "It installs the next time Termix restarts."
|
||||
},
|
||||
"nav": {
|
||||
"home": "Home",
|
||||
"terminal": "Terminal",
|
||||
@@ -280,7 +311,8 @@
|
||||
},
|
||||
"searchEverything": "Search hosts, tabs and actions",
|
||||
"search": "Search",
|
||||
"hiddenCount": "{{count}} hidden",
|
||||
"hiddenCount_one": "{{count}} hidden",
|
||||
"hiddenCount_other": "{{count}} hidden",
|
||||
"showInRail": "Show in sidebar",
|
||||
"moveUp": "Move up",
|
||||
"moveDown": "Move down",
|
||||
@@ -344,7 +376,8 @@
|
||||
"unsavedChangesDescription": "Your host changes have not been saved. Discard them?",
|
||||
"keepEditing": "Keep editing",
|
||||
"discardChanges": "Discard changes",
|
||||
"movedToFolder": "Moved {{count}} host(s) to \"{{folder}}\"",
|
||||
"movedToFolder_one": "Moved {{count}} host to \"{{folder}}\"",
|
||||
"movedToFolder_other": "Moved {{count}} hosts to \"{{folder}}\"",
|
||||
"editHostTooltip": "Edit host",
|
||||
"behavior": "Behavior",
|
||||
"scrollbackBuffer": "Scrollback Buffer",
|
||||
@@ -545,7 +578,8 @@
|
||||
"collapseSubHosts": "Collapse sub-hosts",
|
||||
"expandSubHosts": "Expand sub-hosts",
|
||||
"cannotNestUnderDescendant": "Can't nest a host under its own sub-host",
|
||||
"movedToParent": "Moved {{count}} host(s) under \"{{parent}}\"",
|
||||
"movedToParent_one": "Moved {{count}} host under \"{{parent}}\"",
|
||||
"movedToParent_other": "Moved {{count}} hosts under \"{{parent}}\"",
|
||||
"newFolder": "New folder",
|
||||
"createFolderTitle": "Create folder",
|
||||
"editFolderTitle": "Edit folder",
|
||||
@@ -573,7 +607,8 @@
|
||||
"folderSaved": "Folder saved",
|
||||
"failedToSaveFolder": "Failed to save folder",
|
||||
"folderDeleted": "Deleted folder \"{{name}}\"",
|
||||
"deleteFolderConfirm": "Delete \"{{name}}\" and its {{count}} host(s)? This cannot be undone.",
|
||||
"deleteFolderConfirm_one": "Delete \"{{name}}\" and its {{count}} host? This cannot be undone.",
|
||||
"deleteFolderConfirm_other": "Delete \"{{name}}\" and its {{count}} hosts? This cannot be undone.",
|
||||
"failedToMoveHosts": "Failed to move hosts",
|
||||
"failedToReorder": "Failed to reorder",
|
||||
"expandAll": "Expand all folders",
|
||||
@@ -641,7 +676,8 @@
|
||||
"copyLink": "Copy Link",
|
||||
"deleteCredentialConfirm": "Delete credential \"{{name}}\"?",
|
||||
"deletedCredential": "Deleted {{name}}",
|
||||
"deleteHostsConfirm": "Delete {{count}} host{{plural}}? This cannot be undone.",
|
||||
"deleteHostsConfirm_one": "Delete {{count}} host? This cannot be undone.",
|
||||
"deleteHostsConfirm_other": "Delete {{count}} hosts? This cannot be undone.",
|
||||
"movedToRoot": "Moved to root",
|
||||
"addTagsPlaceholder": "Add tags...",
|
||||
"authDetails": "Authentication Details",
|
||||
@@ -700,7 +736,8 @@
|
||||
"groupFeatureFlags": "Plugin settings",
|
||||
"groupAdvanced": "Advanced config",
|
||||
"preview": "Preview",
|
||||
"moreHosts": "... {{count}} more hosts",
|
||||
"moreHosts_one": "... {{count}} more host",
|
||||
"moreHosts_other": "... {{count}} more hosts",
|
||||
"summary": "{{selected}} of {{total}} hosts",
|
||||
"credentialsIncluded": "credentials included",
|
||||
"credentialsExcluded": "credentials excluded",
|
||||
@@ -713,16 +750,20 @@
|
||||
"sampleDownloaded": "Sample file downloaded",
|
||||
"failedToDeleteCredential2": "Failed to delete credential",
|
||||
"noFolderOption": "(No folder)",
|
||||
"nSelected": "{{count}} selected",
|
||||
"nSelected_one": "{{count}} selected",
|
||||
"nSelected_other": "{{count}} selected",
|
||||
"featuresMenu": "Plugins",
|
||||
"moveMenu": "Move",
|
||||
"connectSelected": "Connect",
|
||||
"cancelSelection": "Cancel",
|
||||
"deletedCount": "Deleted {{count}} hosts",
|
||||
"failedToDeleteCount": "Failed to delete {{count}} hosts",
|
||||
"deletedCount_one": "Deleted {{count}} host",
|
||||
"deletedCount_other": "Deleted {{count}} hosts",
|
||||
"failedToDeleteCount_one": "Failed to delete {{count}} host",
|
||||
"failedToDeleteCount_other": "Failed to delete {{count}} hosts",
|
||||
"duplicatedHost": "Duplicated \"{{name}}\"",
|
||||
"failedToDuplicateHost": "Failed to duplicate host",
|
||||
"updatedCount": "Updated {{count}} hosts",
|
||||
"updatedCount_one": "Updated {{count}} host",
|
||||
"updatedCount_other": "Updated {{count}} hosts",
|
||||
"friendlyNameLabel": "Friendly Name",
|
||||
"descriptionLabel": "Description",
|
||||
"loadingHosts": "Loading hosts...",
|
||||
@@ -762,7 +803,8 @@
|
||||
"shareHostTitle": "Share: {{name}}",
|
||||
"shareFolder": "Share Folder",
|
||||
"shareFolderTitle": "Share folder: {{name}}",
|
||||
"folderSharedSuccessfully": "Shared {{count}} host(s) in folder",
|
||||
"folderSharedSuccessfully_one": "Shared {{count}} host in folder",
|
||||
"folderSharedSuccessfully_other": "Shared {{count}} hosts in folder",
|
||||
"failedToShareFolder": "Failed to share folder",
|
||||
"sharing": {
|
||||
"loadError": "Failed to load sharing data. Please try again.",
|
||||
@@ -921,7 +963,8 @@
|
||||
"unsplit": "Unsplit",
|
||||
"layouts": "Layouts",
|
||||
"applyLayout": "Change layout",
|
||||
"maxPanes": "A split can hold up to {{count}} panes",
|
||||
"maxPanes_one": "A split can hold up to {{count}} pane",
|
||||
"maxPanes_other": "A split can hold up to {{count}} panes",
|
||||
"dropSplit": "Drop to split",
|
||||
"dropHere": "Drop to show here",
|
||||
"paneActions": "Pane actions",
|
||||
@@ -1084,6 +1127,7 @@
|
||||
"databaseConnectionFailed": "Failed to connect to the database server",
|
||||
"embeddedServerPortInUse": "Port {{port}} is already in use by another program. This is usually a Termix Docker container or a leftover Termix process from a previous session. Close it, then restart Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "One of the ports Termix needs is already in use by another program. Close whatever is using it, then restart Termix.",
|
||||
"embeddedServerOldDatabase": "Your local data is from Termix 2.8 or older and has to pass through 2.9 first. Install Termix 2.9.1, open it once so it can move your data, then update to this version again.",
|
||||
"embeddedServerCrashed": "The local server stopped unexpectedly. Restart Termix, and check the desktop log if this keeps happening.",
|
||||
"resetCodeSent": "Reset code sent to Docker logs",
|
||||
"codeVerified": "Code verified successfully",
|
||||
@@ -1237,7 +1281,8 @@
|
||||
"statusCheck": "Status Check",
|
||||
"sec": "sec",
|
||||
"logLevel": "Log Level",
|
||||
"usersCount": "{{count}} users",
|
||||
"usersCount_one": "{{count}} user",
|
||||
"usersCount_other": "{{count}} users",
|
||||
"searchUsers": "Search users...",
|
||||
"noUsers": "No users",
|
||||
"noUsersMatch": "No users match your search",
|
||||
@@ -1247,7 +1292,8 @@
|
||||
"roleName": "Name",
|
||||
"roleDisplayName": "Display Name",
|
||||
"roleDescription": "Description",
|
||||
"rolesCount": "{{count}} roles",
|
||||
"rolesCount_one": "{{count}} role",
|
||||
"rolesCount_other": "{{count}} roles",
|
||||
"createRole": "Create",
|
||||
"creating": "Creating...",
|
||||
"exportDatabase": "Export Database",
|
||||
@@ -1261,7 +1307,8 @@
|
||||
"changeFile": "Change",
|
||||
"import": "Import",
|
||||
"importing": "Importing...",
|
||||
"apiKeysCount": "{{count}} keys",
|
||||
"apiKeysCount_one": "{{count}} key",
|
||||
"apiKeysCount_other": "{{count}} keys",
|
||||
"apiKeysDocsLink": "View docs",
|
||||
"apiKeysCliHint": "Use an API key with the Termix CLI to manage servers from your terminal.",
|
||||
"apiKeysCliLink": "View CLI docs",
|
||||
@@ -1283,7 +1330,8 @@
|
||||
"systemBadge": "SYS",
|
||||
"customBadge": "CUSTOM",
|
||||
"youBadge": "YOU",
|
||||
"sessionsActive": "{{count}} active",
|
||||
"sessionsActive_one": "{{count}} active",
|
||||
"sessionsActive_other": "{{count}} active",
|
||||
"sessionActive": "Active: {{time}}",
|
||||
"sessionExpires": "Exp: {{time}}",
|
||||
"revokeAll": "All",
|
||||
@@ -1392,14 +1440,16 @@
|
||||
"exportUserDataDesc": "Download this user's hosts, credentials and file manager data as JSON. Secrets are decrypted.",
|
||||
"exportUserDataSuccess": "User data exported",
|
||||
"exportUserDataFailed": "Failed to export user data",
|
||||
"hostsCount": "{{count}} hosts",
|
||||
"hostsCount_one": "{{count}} host",
|
||||
"hostsCount_other": "{{count}} hosts",
|
||||
"addHostForUser": "Add Host",
|
||||
"noHostsForUser": "This user has no hosts",
|
||||
"connectToHost": "Connect",
|
||||
"deleteHostConfirm": "Delete host \"{{name}}\" belonging to {{username}}?",
|
||||
"hostDeletedSuccess": "Host deleted",
|
||||
"hostDeleteFailed": "Failed to delete host",
|
||||
"credentialsCount": "{{count}} credentials",
|
||||
"credentialsCount_one": "{{count}} credential",
|
||||
"credentialsCount_other": "{{count}} credentials",
|
||||
"addCredentialForUser": "Add Credential",
|
||||
"noCredentialsForUser": "This user has no credentials",
|
||||
"deleteCredentialConfirm": "Delete credential \"{{name}}\" belonging to {{username}}?",
|
||||
@@ -1428,7 +1478,8 @@
|
||||
"importError": "Database import failed",
|
||||
"sectionHostDefaults": "Host Defaults",
|
||||
"rolePermissions": {
|
||||
"count": "{{count}} permissions",
|
||||
"count_one": "{{count}} permission",
|
||||
"count_other": "{{count}} permissions",
|
||||
"editAction": "Edit permissions",
|
||||
"loadError": "Failed to load the permissions catalog",
|
||||
"saved": "Role permissions saved",
|
||||
@@ -1647,7 +1698,8 @@
|
||||
"apiKeyCreatedWarning": "Key created - copy it now, it won't be shown again.",
|
||||
"copyApiKey": "Copy API key",
|
||||
"copiedToClipboard": "Copied to clipboard",
|
||||
"apiKeyCount": "{{count}} keys",
|
||||
"apiKeyCount_one": "{{count}} key",
|
||||
"apiKeyCount_other": "{{count}} keys",
|
||||
"newKey": "New Key",
|
||||
"noApiKeys": "No API keys yet.",
|
||||
"apiKeyActive": "Active",
|
||||
@@ -1848,19 +1900,23 @@
|
||||
"tabs": {
|
||||
"installed": "Installed",
|
||||
"browse": "Browse",
|
||||
"updates": "Updates"
|
||||
"updates": "Updates",
|
||||
"registries": "Registries"
|
||||
},
|
||||
"status": {
|
||||
"summary": "{{installed}} installed, {{running}} running",
|
||||
"running": "Running",
|
||||
"disabled": "Disabled",
|
||||
"failed": "Stopped unexpectedly",
|
||||
"blocked": "Waiting on another plugin"
|
||||
"blocked": "Waiting on another plugin",
|
||||
"server": "Runs on your server"
|
||||
},
|
||||
"groups": {
|
||||
"running": "Running",
|
||||
"notRunning": "Not running"
|
||||
"notRunning": "Not running",
|
||||
"onServer": "On your server"
|
||||
},
|
||||
"runsOnServerHint": "This plugin only runs on your server, so it stays off in the desktop app. It still works there.",
|
||||
"sort": {
|
||||
"popular": "Most popular",
|
||||
"name": "Name",
|
||||
@@ -1878,7 +1934,7 @@
|
||||
"version": "Version",
|
||||
"status": "Status",
|
||||
"category": "Category",
|
||||
"installs": "Installs"
|
||||
"downloads": "Downloads"
|
||||
},
|
||||
"risk": {
|
||||
"critical": "Critical",
|
||||
@@ -2030,8 +2086,47 @@
|
||||
"noneInstalled": "No plugins installed yet. Browse to add some.",
|
||||
"nothingHere": "Nothing here.",
|
||||
"nothingHereHint": "Try another category or search.",
|
||||
"communitySoon": "Community plugins are coming in a later update. Plugin authors can already submit theirs to the community registry.",
|
||||
"showInstalled": "Show installed",
|
||||
"allInstalled": "Everything here is already installed.",
|
||||
"allInstalledHint": "Turn on Show installed to see them.",
|
||||
"communitySubmit": "How to submit",
|
||||
"registries": {
|
||||
"intro": "Registries are lists of plugins you can install. The official one is always on. You can turn on the community registry or add your own.",
|
||||
"hostYourOwn": "Host your own registry",
|
||||
"add": "Add registry",
|
||||
"addTitle": "Add a registry",
|
||||
"addHint": "Paste the link to the registry's index.json. Termix reads it and shows the key it signs plugins with. Only add registries from people you trust.",
|
||||
"urlLabel": "Index URL",
|
||||
"check": "Check",
|
||||
"addConfirm": "Trust and add",
|
||||
"added": "Added {{name}}",
|
||||
"customWarning": "Plugins from this registry are not reviewed by the Termix team. Only the owner of the registry decides what is in it. Every download must be signed by the key above.",
|
||||
"keyFingerprint": "Key {{keyId}}",
|
||||
"pluginCount_one": "{{count}} plugin",
|
||||
"pluginCount_other": "{{count}} plugins",
|
||||
"officialName": "Official",
|
||||
"communityName": "Community",
|
||||
"alwaysOn": "Always on",
|
||||
"communityHint": "Plugins made by other people. Each version is checked by a person and by automated checks before it is listed.",
|
||||
"communityConfirmTitle": "Turn on community plugins?",
|
||||
"communityConfirmBody": "Community plugins are made by other people, not the Termix team. Every version is checked by a person and by automated checks before it is listed, but mistakes can still get through. Only install plugins you trust and check what each one asks for.",
|
||||
"communityConfirm": "Turn on",
|
||||
"communityBadge": "Community",
|
||||
"communityBadgeHint": "From the community registry. Made by other people and reviewed before it was listed.",
|
||||
"customBadge": "Custom",
|
||||
"customBadgeHint": "From {{name}}, a registry an admin added. Not reviewed by the Termix team.",
|
||||
"remove": "Remove",
|
||||
"removeTitle": "Remove {{name}}?",
|
||||
"removeBody": "Its plugins will no longer show in Browse. You can add it again later.",
|
||||
"removed": "Removed {{name}}",
|
||||
"inUse": "Uninstall the plugins from {{name}} first: {{list}}",
|
||||
"changeFailed": "Could not change the registry: {{error}}",
|
||||
"loadFailed": "Could not load registries: {{error}}",
|
||||
"unreachable": "Could not read it: {{error}}",
|
||||
"filter": "Registry",
|
||||
"allRegistries": "All registries",
|
||||
"browseHint": "Turn on community plugins or add your own registry in the Registries tab."
|
||||
},
|
||||
"upToDate": "Everything is up to date.",
|
||||
"lastChecked": "Last checked {{time}}",
|
||||
"updatesReady_one": "{{count}} update ready.",
|
||||
@@ -2054,11 +2149,8 @@
|
||||
"signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS is set, so installing from a file stays blocked."
|
||||
},
|
||||
"count": {
|
||||
"active_one": "{{formatted}} active install",
|
||||
"active_other": "{{formatted}} active installs",
|
||||
"downloads_one": "{{formatted}} download",
|
||||
"downloads_other": "{{formatted}} downloads",
|
||||
"activeHint": "Instances that reported this plugin turned on in the last week. Instances with usage statistics turned off are not counted.",
|
||||
"downloadsHint": "How many times a release was downloaded. This is not the number of installs."
|
||||
},
|
||||
"unverified": "Unverified",
|
||||
|
||||
@@ -0,0 +1,103 @@
|
||||
[
|
||||
{ "code": "af", "file": "af_ZA", "name": "Afrikaans", "label": "Afrikaans" },
|
||||
{ "code": "ar", "file": "ar_SA", "name": "Arabic", "label": "العربية" },
|
||||
{ "code": "bn", "file": "bn_BD", "name": "Bengali", "label": "বাংলা" },
|
||||
{ "code": "bg", "file": "bg_BG", "name": "Bulgarian", "label": "Български" },
|
||||
{ "code": "ca", "file": "ca_ES", "name": "Catalan", "label": "Català" },
|
||||
{
|
||||
"code": "zh-CN",
|
||||
"file": "zh_CN",
|
||||
"name": "Simplified Chinese",
|
||||
"label": "中文 (简体)"
|
||||
},
|
||||
{
|
||||
"code": "zh-TW",
|
||||
"file": "zh_TW",
|
||||
"name": "Traditional Chinese (Taiwan)",
|
||||
"label": "中文 (繁體)"
|
||||
},
|
||||
{ "code": "hr", "file": "hr_HR", "name": "Croatian", "label": "Hrvatski" },
|
||||
{ "code": "cs", "file": "cs_CZ", "name": "Czech", "label": "Čeština" },
|
||||
{ "code": "da", "file": "da_DK", "name": "Danish", "label": "Dansk" },
|
||||
{ "code": "nl", "file": "nl_NL", "name": "Dutch", "label": "Nederlands" },
|
||||
{ "code": "et", "file": "et_EE", "name": "Estonian", "label": "Eesti" },
|
||||
{ "code": "fi", "file": "fi_FI", "name": "Finnish", "label": "Suomi" },
|
||||
{ "code": "fr", "file": "fr_FR", "name": "French", "label": "Français" },
|
||||
{ "code": "de", "file": "de_DE", "name": "German", "label": "Deutsch" },
|
||||
{ "code": "el", "file": "el_GR", "name": "Greek", "label": "Ελληνικά" },
|
||||
{ "code": "he", "file": "he_IL", "name": "Hebrew", "label": "עברית" },
|
||||
{ "code": "hi", "file": "hi_IN", "name": "Hindi", "label": "हिन्दी" },
|
||||
{ "code": "hu", "file": "hu_HU", "name": "Hungarian", "label": "Magyar" },
|
||||
{
|
||||
"code": "id",
|
||||
"file": "id_ID",
|
||||
"name": "Indonesian",
|
||||
"label": "Indonesia"
|
||||
},
|
||||
{ "code": "it", "file": "it_IT", "name": "Italian", "label": "Italiano" },
|
||||
{ "code": "ja", "file": "ja_JP", "name": "Japanese", "label": "日本語" },
|
||||
{ "code": "ko", "file": "ko_KR", "name": "Korean", "label": "한국어" },
|
||||
{ "code": "lv", "file": "lv_LV", "name": "Latvian", "label": "Latviešu" },
|
||||
{
|
||||
"code": "lt",
|
||||
"file": "lt_LT",
|
||||
"name": "Lithuanian",
|
||||
"label": "Lietuvių"
|
||||
},
|
||||
{ "code": "ms", "file": "ms_MY", "name": "Malay", "label": "Bahasa Melayu" },
|
||||
{
|
||||
"code": "no",
|
||||
"file": "no_NO",
|
||||
"name": "Norwegian Bokmål",
|
||||
"label": "Norsk"
|
||||
},
|
||||
{ "code": "pl", "file": "pl_PL", "name": "Polish", "label": "Polski" },
|
||||
{
|
||||
"code": "pt-PT",
|
||||
"file": "pt_PT",
|
||||
"name": "European Portuguese",
|
||||
"label": "Português (PT)"
|
||||
},
|
||||
{
|
||||
"code": "pt-BR",
|
||||
"file": "pt_BR",
|
||||
"name": "Brazilian Portuguese",
|
||||
"label": "Português (BR)"
|
||||
},
|
||||
{ "code": "ro", "file": "ro_RO", "name": "Romanian", "label": "Română" },
|
||||
{ "code": "ru", "file": "ru_RU", "name": "Russian", "label": "Русский" },
|
||||
{
|
||||
"code": "sr",
|
||||
"file": "sr_SP",
|
||||
"name": "Serbian (Cyrillic script)",
|
||||
"label": "Српски"
|
||||
},
|
||||
{ "code": "sk", "file": "sk_SK", "name": "Slovak", "label": "Slovenčina" },
|
||||
{
|
||||
"code": "sl",
|
||||
"file": "sl_SI",
|
||||
"name": "Slovenian",
|
||||
"label": "Slovenščina"
|
||||
},
|
||||
{
|
||||
"code": "es-ES",
|
||||
"file": "es_ES",
|
||||
"name": "Spanish (Spain)",
|
||||
"label": "Español"
|
||||
},
|
||||
{ "code": "sv-SE", "file": "sv_SE", "name": "Swedish", "label": "Svenska" },
|
||||
{ "code": "th", "file": "th_TH", "name": "Thai", "label": "ไทย" },
|
||||
{ "code": "tr", "file": "tr_TR", "name": "Turkish", "label": "Türkçe" },
|
||||
{
|
||||
"code": "uk",
|
||||
"file": "uk_UA",
|
||||
"name": "Ukrainian",
|
||||
"label": "Українська"
|
||||
},
|
||||
{
|
||||
"code": "vi",
|
||||
"file": "vi_VN",
|
||||
"name": "Vietnamese",
|
||||
"label": "Tiếng Việt"
|
||||
}
|
||||
]
|
||||
+1593
-1197
File diff suppressed because it is too large.
Load diff
+1722
-1102
File diff suppressed because it is too large.
Load diff
+1672
-1276
File diff suppressed because it is too large.
Load diff
+1761
-1365
File diff suppressed because it is too large.
Load diff
+1626
-1174
File diff suppressed because it is too large.
Load diff
+1687
-1179
File diff suppressed because it is too large.
Load diff
+1455
-1059
File diff suppressed because it is too large.
Load diff
+1406
-1010
File diff suppressed because it is too large.
Load diff
+1801
-1405
File diff suppressed because it is too large.
Load diff
+1403
-951
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
+1631
-1235
File diff suppressed because it is too large.
Load diff
+1372
-920
File diff suppressed because it is too large.
Load diff
+1871
-1419
File diff suppressed because it is too large.
Load diff
+1595
-1199
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
+1701
-1305
File diff suppressed because it is too large.
Load diff
+1496
-1156
File diff suppressed because it is too large.
Load diff
+1435
-983
File diff suppressed because it is too large.
Load diff
+1481
-1141
File diff suppressed because it is too large.
Load diff
+1456
-1116
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
+1624
-1228
File diff suppressed because it is too large.
Load diff
+1480
-1084
File diff suppressed because it is too large.
Load diff
+1482
-974
File diff suppressed because it is too large.
Load diff
+1624
-1172
File diff suppressed because it is too large.
Load diff
+1518
-1066
File diff suppressed because it is too large.
Load diff
+1866
-1414
File diff suppressed because it is too large.
Load diff
+1615
-1107
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
+1667
-1215
File diff suppressed because it is too large.
Load diff
+1467
-1071
File diff suppressed because it is too large.
Load diff
+1525
-1185
File diff suppressed because it is too large.
Load diff
+1487
-1091
File diff suppressed because it is too large.
Load diff
+1667
-1159
File diff suppressed because it is too large.
Load diff
+1384
-1044
File diff suppressed because it is too large.
Load diff
+1312
-972
File diff suppressed because it is too large.
Load diff
+1474
-1134
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user