Split translations between EW and shared components (#31441)

* Split translations between EW and shared components

Uses update module API with global TranslationKey type that can be
overridden.

WIP.

* Removed the wrong script (for now)

* Add the type files

* Add shared components i18n file

* More i18n strings

* Add i18n check for shared conmponents

* Needs a different name

* rerun i18n for merge from develop, fix test

* Move translated strings to shared components file

NB. there are lots of removed strings for a few languages where we
seem to have hit a localazy bug or something where the key/value
for plurals got switched, making the translations invalid. They've
been missing for a while so I'm removing them rather than trying to
restore them,

* Add shared components files to localazy

* Merge element web & shared component translations

for the built app

* Use right translations for shared component tests

and fix missign en_EN strings

* Pull shared components translations too

* Fix/disable warnings

* We can now remove the build:res call

...right? (right?)

* Remove webpack import for languages index

..and just load it using a relative path which we do for the individual
language files and also did anyway for the index because even in non-test
it was an object, not a string, so we always usesd the 'test' code path.

* Make the storybook language selector work

...without referring to the parent app's files

* Revert unnecessary yarn lock change

* Typo

Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>

* Add comment on why we use merge

* Fix localazy download config

to actually put the translations in the right place

* Better typescript syntax

Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>

* Watch both translations files

---------

Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
David Baker 2026-01-07 11:49:01 +00:00 committed by GitHub
parent 4ee04d0661
commit 13696af194
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
131 changed files with 1783 additions and 1763 deletions

View file

@ -41,8 +41,8 @@ jobs:
- name: Typecheck Shared Components
run: "yarn --cwd packages/shared-components run lint:types"
i18n_lint:
name: "i18n Check"
i18n_lint_ew:
name: "i18n Check (Element Web)"
uses: matrix-org/matrix-web-i18n/.github/workflows/i18n_check.yml@main
permissions:
pull-requests: read
@ -59,6 +59,15 @@ jobs:
devtools|settings|elementCallUrl
labs|sliding_sync_description
i18n_lint_shared_components:
name: "i18n Check (Shared Components)"
uses: matrix-org/matrix-web-i18n/.github/workflows/i18n_check.yml@main
permissions:
pull-requests: read
with:
path: "packages/shared-components"
hardcoded-words: "Element"
rethemendex_lint:
name: "Rethemendex Check"
runs-on: ubuntu-24.04

View file

@ -18,6 +18,18 @@
"file": "element-web.json",
"excludes": ["src/i18n/strings/en_EN.json"],
"lang": "${autodetectLang}"
},
{
"pattern": "packages/shared-components/src/i18n/strings/en_EN.json",
"file": "shared-components.json",
"lang": "inherited"
},
{
"group": "existing",
"pattern": "packages/shared-components/src/i18n/strings/*.json",
"file": "shared-components.json",
"excludes": ["packages/shared-components/src/i18n/strings/en_EN.json"],
"lang": "${autodetectLang}"
}
]
},
@ -27,6 +39,10 @@
{
"conditions": "equals: ${file}, element-web.json",
"output": "src/i18n/strings/${langLsrUnderscore}.json"
},
{
"conditions": "equals: ${file}, shared-components.json",
"output": "packages/shared-components/src/i18n/strings/${langLsrUnderscore}.json"
}
],
"includeSourceLang": "${includeSourceLang|false}",

View file

@ -29,7 +29,7 @@
"UserFriendlyError"
],
"scripts": {
"i18n": "matrix-gen-i18n src res packages/shared-components/src && yarn i18n:sort && yarn i18n:lint",
"i18n": "matrix-gen-i18n src res && yarn i18n:sort && yarn i18n:lint",
"i18n:sort": "jq --sort-keys '.' src/i18n/strings/en_EN.json > src/i18n/strings/en_EN.json.tmp && mv src/i18n/strings/en_EN.json.tmp src/i18n/strings/en_EN.json",
"i18n:lint": "matrix-i18n-lint && prettier --log-level=silent --write src/i18n/strings/ --ignore-path /dev/null",
"i18n:diff": "cp src/i18n/strings/en_EN.json src/i18n/strings/en_EN_orig.json && yarn i18n && matrix-compare-i18n-files src/i18n/strings/en_EN_orig.json src/i18n/strings/en_EN.json",

View file

@ -10,16 +10,14 @@ import { WithTooltip, IconButton, TooltipLinkList } from "storybook/internal/com
import React from "react";
import { GlobeIcon } from "@storybook/icons";
// We can't import `shared/i18n.tsx` directly here.
// The storybook addon doesn't seem to benefit the vite config of storybook and we can't resolve the alias in i18n.tsx.
import json from "../../../webapp/i18n/languages.json";
const languages = Object.keys(json).filter((lang) => lang !== "default");
const languages = JSON.parse(process.env.STORYBOOK_LANGUAGES);
/**
* Returns the title of a language in the user's locale.
*/
function languageTitle(language: string): string {
return new Intl.DisplayNames([language], { type: "language", style: "short" }).of(language) || language;
const normalisedLang = language.toLowerCase().replace("_", "-");
return new Intl.DisplayNames([normalisedLang], { type: "language", style: "short" }).of(normalisedLang) || language;
}
export const languageAddon: Addon = {

View file

@ -7,12 +7,15 @@ Please see LICENSE files in the repository root for full details.
import type { StorybookConfig } from "@storybook/react-vite";
import path from "node:path";
import fs from "node:fs";
import { nodePolyfills } from "vite-plugin-node-polyfills";
import { mergeConfig } from "vite";
// Get a list of available languages so the language selector can display them at runtime
const languages = fs.readdirSync("src/i18n/strings").map((f) => f.slice(0, -5));
const config: StorybookConfig = {
stories: ["../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"],
staticDirs: ["../../../webapp"],
addons: ["@storybook/addon-docs", "@storybook/addon-designs", "@storybook/addon-a11y"],
framework: "@storybook/react-vite",
core: {
@ -29,8 +32,42 @@ const config: StorybookConfig = {
$webapp: path.resolve("../../webapp"),
},
},
// Needed for counterpart to work
plugins: [nodePolyfills({ include: ["process", "util"] })],
plugins: [
// Needed for counterpart to work
nodePolyfills({ include: ["process", "util"] }),
{
name: "language-middleware",
configureServer(server) {
server.middlewares.use((req, res, next) => {
if (req.url === "/i18n/languages.json") {
// Dynamically generate a languages.json file based on what files are available
const langJson: Record<string, string> = {};
for (const lang of languages) {
const normalizedLanguage = lang.toLowerCase().replace("_", "-");
const languageParts = normalizedLanguage.split("-");
if (languageParts.length === 2 && languageParts[0] === languageParts[1]) {
langJson[languageParts[0]] = `${lang}.json`;
} else {
langJson[normalizedLanguage] = `${lang}.json`;
}
}
res.setHeader("Content-Type", "application/json");
res.end(JSON.stringify(langJson));
} else if (req.url?.startsWith("/i18n/")) {
// Serve the individual language files, which annoyingly can't be a simple
// static dir because the directory structure in src doesn't match what
// the app requests.
const langFile = req.url.split("/").pop();
res.setHeader("Content-Type", "application/json");
fs.createReadStream(`src/i18n/strings/${langFile}`).pipe(res);
} else {
next();
}
});
},
},
],
server: {
allowedHosts: ["localhost", ".docker.internal"],
},
@ -42,5 +79,9 @@ const config: StorybookConfig = {
url: "https://element-hq.github.io/compound-web/",
},
},
env: (config) => ({
...config,
STORYBOOK_LANGUAGES: JSON.stringify(languages),
}),
};
export default config;

View file

@ -34,8 +34,11 @@
"package.json"
],
"scripts": {
"i18n": "matrix-gen-i18n src && yarn i18n:sort && yarn i18n:lint",
"i18n:sort": "jq --sort-keys '.' src/i18n/strings/en_EN.json > src/i18n/strings/en_EN.json.tmp && mv src/i18n/strings/en_EN.json.tmp src/i18n/strings/en_EN.json",
"i18n:lint": "matrix-i18n-lint && prettier --log-level=silent --write src/i18n/strings/ --ignore-path /dev/null",
"test": "jest",
"prepare": "patch-package && yarn --cwd ../.. build:res && node scripts/gatherTranslationKeys.ts && vite build",
"prepare": "patch-package && vite build",
"storybook": "storybook dev -p 6007",
"build-storybook": "storybook build",
"lint": "yarn lint:types && yarn lint:js",

View file

@ -1,67 +0,0 @@
/*
Copyright 2025 Element Creations Ltd.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
// Gathers all the translation keys from element-web's en_EN.json into a TypeScript type definition file
// that exports a type `TranslationKey` which is a union of all supported translation keys.
// This prevents having to import the json file and make typescript do the work as this results in vite-dts
// generating an import to the json file in the .d.ts which doesn't work at runtime: this way, the type
// gets put into the bundle.
// XXX: It should *not* be in the 'src' directory, being a generated file, but if it isn't then the type
// bundler won't bundle the types and will leave the file as a relative import, which will break.
import * as fs from "fs";
import * as path from "path";
import { dirname } from "node:path";
import { fileURLToPath } from "node:url";
const __dirname = dirname(fileURLToPath(import.meta.url));
const i18nStringsPath = path.resolve(__dirname, "../../../src/i18n/strings/en_EN.json");
const outPath = path.resolve(__dirname, "../src/i18nKeys.d.ts");
function gatherKeys(obj: any, prefix: string[] = []): string[] {
if (typeof obj !== "object" || obj === null) return [];
let keys: string[] = [];
for (const key of Object.keys(obj)) {
const value = obj[key];
// add the path (for both leaves and intermediates as then we include plurals)
keys.push([...prefix, key].join("|"));
if (typeof value === "object" && value !== null) {
// If the value is an object, recurse
keys = keys.concat(gatherKeys(value, [...prefix, key]));
}
}
return keys;
}
function main() {
const json = JSON.parse(fs.readFileSync(i18nStringsPath, "utf8"));
const keys = gatherKeys(json);
const typeDef =
"/*\n" +
" * Copyright 2025 Element Creations Ltd.\n" +
" *\n" +
" * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial\n" +
" * Please see LICENSE files in the repository root for full details.\n" +
" */\n" +
"\n" +
"// This file is auto-generated by gatherTranslationKeys.ts\n" +
"// Do not edit manually.\n\n" +
"export type TranslationKey =\n" +
keys.map((k) => ` | \"${k}\"`).join("\n") +
";\n";
fs.mkdirSync(path.dirname(outPath), { recursive: true });
fs.writeFileSync(outPath, typeDef, "utf8");
console.log(`Wrote ${keys.length} keys to ${outPath}`);
}
if (import.meta.url.startsWith("file:")) {
const modulePath = fileURLToPath(import.meta.url);
if (process.argv[1] === modulePath) {
main();
}
}

View file

@ -0,0 +1,14 @@
/*
Copyright 2025 Element Creations Ltd.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
import { type TranslationKey as _TranslationKey } from "matrix-web-i18n";
import type Translations from "../i18n/strings/en_EN.json";
declare global {
type TranslationKey = _TranslationKey<typeof Translations>;
}

View file

@ -0,0 +1,43 @@
{
"a11y": {
"seek_bar_label": "Panel posunu zvuku"
},
"action": {
"delete": "Smazat",
"dismiss": "Zavřít",
"explore_rooms": "Procházet místnosti",
"pause": "Pozastavit",
"play": "Přehrát",
"search": "Hledání"
},
"encryption": {
"pinned_identity_changed": "Identita %(displayName)s (<b>%(userId)s</b>) se změnila. <a>Další informace</a>",
"withdraw_verification_action": "Zrušit ověření"
},
"left_panel": {
"open_dial_pad": "Otevřít číselník"
},
"time": {
"about_day_ago": "před jedním dnem",
"about_hour_ago": "asi před hodinou",
"about_minute_ago": "před minutou",
"few_seconds_ago": "před pár vteřinami",
"in_about_day": "asi za den",
"in_about_hour": "asi za hodinu",
"in_about_minute": "asi za minutu",
"in_few_seconds": "za pár vteřin",
"in_n_days": "za %(num)s dní",
"in_n_hours": "za %(num)s hodin",
"in_n_minutes": "za %(num)s minut",
"n_days_ago": "před %(num)s dny",
"n_hours_ago": "před %(num)s hodinami",
"n_minutes_ago": "před %(num)s minutami"
},
"timeline": {
"m.audio": {
"audio_player": "Audio přehrávač",
"error_downloading_audio": "Chyba při stahování audia",
"unnamed_audio": "Nepojmenovaný audio soubor"
}
}
}

View file

@ -0,0 +1,43 @@
{
"a11y": {
"seek_bar_label": "Bar chwilio sain"
},
"action": {
"delete": "Dileu",
"dismiss": "Gwrthod",
"explore_rooms": "Archwilio Ystafelloedd",
"pause": "Oedi",
"play": "Chwarae",
"search": "Chwilio"
},
"encryption": {
"pinned_identity_changed": "Cafodd hunaniaeth (<b>%(userId)s</b>) %(displayName)s ei ailosod. <a>Dysgu rhagor</a>",
"withdraw_verification_action": "Tynnu'r dilysiad yn ôl"
},
"left_panel": {
"open_dial_pad": "Agor y pad deialu"
},
"time": {
"about_day_ago": "tua diwrnod yn ôl",
"about_hour_ago": "tua awr yn ol",
"about_minute_ago": "tua munud yn ôl",
"few_seconds_ago": "ychydig eiliadau yn ôl",
"in_about_day": "tua diwrnod o nawr",
"in_about_hour": "tuag awr o hyn",
"in_about_minute": "tua munud o nawr",
"in_few_seconds": "ychydig eiliadau o nawr",
"in_n_days": "%(num)s diwrnod o nawr",
"in_n_hours": "%(num)s awr o nawr",
"in_n_minutes": "%(num)s munud o nawr",
"n_days_ago": "%(num)s diwrnod yn ôl",
"n_hours_ago": "%(num)s awr yn ôl",
"n_minutes_ago": "%(num)s munud yn ôl"
},
"timeline": {
"m.audio": {
"audio_player": "Chwaraewr sain",
"error_downloading_audio": "Gwall wrth llwytho i lawrsain",
"unnamed_audio": "Sain dienw"
}
}
}

View file

@ -0,0 +1,35 @@
{
"a11y": {
"seek_bar_label": "Progressionsmarkør for lydafspiller"
},
"action": {
"delete": "Slet",
"dismiss": "Afvis",
"explore_rooms": "Udforsk rum",
"pause": "Pausér",
"play": "Afspil",
"search": "Søg"
},
"time": {
"about_day_ago": "omkring en dag siden",
"about_hour_ago": "for omkring en time siden",
"about_minute_ago": "for omkring et minut siden",
"few_seconds_ago": "for et par sekunder siden",
"in_about_day": "om cirka en dag fra nu",
"in_about_hour": "omkring en time fra nu",
"in_about_minute": "omkring et minut fra nu",
"in_few_seconds": "et par sekunder fra nu",
"in_n_days": "%(num)s dage fra nu",
"in_n_hours": "%(num)s timer fra nu",
"in_n_minutes": "%(num)s minutter fra nu",
"n_days_ago": "%(num)s dage siden",
"n_hours_ago": "%(num)s timer siden",
"n_minutes_ago": "%(num)s minutter siden"
},
"timeline": {
"m.audio": {
"error_downloading_audio": "Fejl ved download af lyd",
"unnamed_audio": "Unavngiven lyd"
}
}
}

View file

@ -0,0 +1,43 @@
{
"a11y": {
"seek_bar_label": "Audio-Suchleiste"
},
"action": {
"delete": "Löschen",
"dismiss": "Ausblenden",
"explore_rooms": "Chats erkunden",
"pause": "Pausieren",
"play": "Abspielen",
"search": "Suchen"
},
"encryption": {
"pinned_identity_changed": "%(displayName)s's (<b>%(userId)s</b>) Identität wurde zurückgesetzt. <a>Mehr erfahren </a>",
"withdraw_verification_action": "Verifizierung zurückziehen"
},
"left_panel": {
"open_dial_pad": "Wähltastatur öffnen"
},
"time": {
"about_day_ago": "vor etwa einem Tag",
"about_hour_ago": "vor etwa einer Stunde",
"about_minute_ago": "vor etwa einer Minute",
"few_seconds_ago": "vor ein paar Sekunden",
"in_about_day": "in etwa einem Tag",
"in_about_hour": "in etwa einer Stunde",
"in_about_minute": "in etwa einer Minute",
"in_few_seconds": "in ein paar Sekunden",
"in_n_days": "in %(num)s Tagen",
"in_n_hours": "in %(num)s Stunden",
"in_n_minutes": "In etwa %(num)s Minuten",
"n_days_ago": "vor %(num)s Tagen",
"n_hours_ago": "vor %(num)s Stunden",
"n_minutes_ago": "vor %(num)s Minuten"
},
"timeline": {
"m.audio": {
"audio_player": "Audio-Player",
"error_downloading_audio": "Fehler beim Herunterladen der Audiodatei",
"unnamed_audio": "Unbenannte Audiodatei"
}
}
}

View file

@ -0,0 +1,35 @@
{
"action": {
"delete": "Διαγραφή",
"dismiss": "Απόρριψη",
"explore_rooms": "Εξερευνήστε αίθουσες",
"pause": "Παύση",
"play": "Αναπαραγωγή",
"search": "Αναζήτηση"
},
"left_panel": {
"open_dial_pad": "Άνοιγμα πληκτρολογίου κλήσης"
},
"time": {
"about_day_ago": "σχεδόν μία μέρα πριν",
"about_hour_ago": "σχεδόν μία ώρα πριν",
"about_minute_ago": "σχεδόν ένα λεπτό πριν",
"few_seconds_ago": "λίγα δευτερόλεπτα πριν",
"in_about_day": "περίπου μια μέρα από τώρα",
"in_about_hour": "περίπου μία ώρα από τώρα",
"in_about_minute": "περίπου ένα λεπτό από τώρα",
"in_few_seconds": "λίγα δευτερόλεπτα από τώρα",
"in_n_days": "%(num)s μέρες από τώρα",
"in_n_hours": "%(num)s ώρες από τώρα",
"in_n_minutes": "%(num)s λεπτά από τώρα",
"n_days_ago": "%(num)s μέρες πριν",
"n_hours_ago": "%(num)s ώρες πριν",
"n_minutes_ago": "%(num)s λεπτά πριν"
},
"timeline": {
"m.audio": {
"error_downloading_audio": "Σφάλμα λήψης ήχου",
"unnamed_audio": "Ήχος χωρίς όνομα"
}
}
}

View file

@ -0,0 +1,48 @@
{
"a11y": {
"seek_bar_label": "Audio seek bar"
},
"action": {
"delete": "Delete",
"dismiss": "Dismiss",
"explore_rooms": "Explore rooms",
"pause": "Pause",
"play": "Play",
"search": "Search"
},
"encryption": {
"pinned_identity_changed": "%(displayName)s's (<b>%(userId)s</b>) identity was reset. <a>Learn more</a>",
"withdraw_verification_action": "Withdraw verification"
},
"left_panel": {
"open_dial_pad": "Open dial pad"
},
"room": {
"status_bar": {
"history_visible": "This room has been configured so that new members can read history. <a>Learn More</a>"
}
},
"time": {
"about_day_ago": "about a day ago",
"about_hour_ago": "about an hour ago",
"about_minute_ago": "about a minute ago",
"few_seconds_ago": "a few seconds ago",
"in_about_day": "about a day from now",
"in_about_hour": "about an hour from now",
"in_about_minute": "about a minute from now",
"in_few_seconds": "a few seconds from now",
"in_n_days": "%(num)s days from now",
"in_n_hours": "%(num)s hours from now",
"in_n_minutes": "%(num)s minutes from now",
"n_days_ago": "%(num)s days ago",
"n_hours_ago": "%(num)s hours ago",
"n_minutes_ago": "%(num)s minutes ago"
},
"timeline": {
"m.audio": {
"audio_player": "Audio player",
"error_downloading_audio": "Error downloading audio",
"unnamed_audio": "Unnamed audio"
}
}
}

View file

@ -0,0 +1,35 @@
{
"action": {
"delete": "Forigi",
"dismiss": "Rezigni",
"explore_rooms": "Esplori ĉambrojn",
"pause": "Paŭzigi",
"play": "Ludi",
"search": "Serĉi"
},
"left_panel": {
"open_dial_pad": "Malfermi ciferplaton"
},
"time": {
"about_day_ago": "antaŭ ĉirkaŭ tago",
"about_hour_ago": "antaŭ ĉirkaŭ horo",
"about_minute_ago": "antaŭ ĉirkaŭ minuto",
"few_seconds_ago": "antaŭ kelkaj sekundoj",
"in_about_day": "ĉirkaŭ tagon de nun",
"in_about_hour": "ĉirkaŭ horon de nun",
"in_about_minute": "ĉirkaŭ minuton de nun",
"in_few_seconds": "kelkajn sekundojn de nun",
"in_n_days": "%(num)s tagojn de nun",
"in_n_hours": "%(num)s horojn de nun",
"in_n_minutes": "%(num)s minutojn de nun",
"n_days_ago": "antaŭ %(num)s tagoj",
"n_hours_ago": "antaŭ %(num)s horoj",
"n_minutes_ago": "antaŭ %(num)s minutoj"
},
"timeline": {
"m.audio": {
"error_downloading_audio": "Eraris elŝuto de sondosiero",
"unnamed_audio": "Sennoma sondosiero"
}
}
}

View file

@ -0,0 +1,39 @@
{
"a11y": {
"seek_bar_label": "Barra de búsqueda de audio"
},
"action": {
"delete": "Borrar",
"dismiss": "Omitir",
"explore_rooms": "Explorar salas",
"pause": "Pausar",
"play": "Reproducir",
"search": "Buscar"
},
"left_panel": {
"open_dial_pad": "Abrir teclado numérico"
},
"time": {
"about_day_ago": "hace aprox. un día",
"about_hour_ago": "hace aprox. una hora",
"about_minute_ago": "hace aproximadamente un minuto",
"few_seconds_ago": "hace unos segundos",
"in_about_day": "dentro de un día",
"in_about_hour": "dentro de una hora",
"in_about_minute": "dentro de un minuto",
"in_few_seconds": "dentro de unos segundos",
"in_n_days": "dentro de %(num)s días",
"in_n_hours": "dentro de %(num)s horas",
"in_n_minutes": "dentro de %(num)s minutos",
"n_days_ago": "hace %(num)s días",
"n_hours_ago": "hace %(num)s horas",
"n_minutes_ago": "hace %(num)s minutos"
},
"timeline": {
"m.audio": {
"audio_player": "Reproductor de audio",
"error_downloading_audio": "Error al descargar el audio",
"unnamed_audio": "Audio sin título"
}
}
}

View file

@ -0,0 +1,48 @@
{
"a11y": {
"seek_bar_label": "Heli kerimisriba"
},
"action": {
"delete": "Kustuta",
"dismiss": "Loobu",
"explore_rooms": "Tutvu jututubadega",
"pause": "Peata",
"play": "Esita",
"search": "Otsing"
},
"encryption": {
"pinned_identity_changed": "Kasutaja %(displayName)s (<b>%(userId)s</b>) võrguidentiteet on lähtestatud. <a>Lisateave</a>",
"withdraw_verification_action": "Eemalda verifitseerimine"
},
"left_panel": {
"open_dial_pad": "Ava numbriklahvistik"
},
"room": {
"status_bar": {
"history_visible": "See jututuba on seadistatud sel viisil, et uued liikmed saavad lugeda varasemat ajalugu.<a> Lisateave</a>"
}
},
"time": {
"about_day_ago": "umbes päev tagasi",
"about_hour_ago": "umbes tund aega tagasi",
"about_minute_ago": "umbes minut tagasi",
"few_seconds_ago": "mõni sekund tagasi",
"in_about_day": "umbes päeva pärast",
"in_about_hour": "umbes tunni pärast",
"in_about_minute": "umbes minuti pärast",
"in_few_seconds": "mõne sekundi pärast",
"in_n_days": "%(num)s päeva pärast",
"in_n_hours": "%(num)s tunni pärast",
"in_n_minutes": "%(num)s minuti pärast",
"n_days_ago": "%(num)s päeva tagasi",
"n_hours_ago": "%(num)s tundi tagasi",
"n_minutes_ago": "%(num)s minutit tagasi"
},
"timeline": {
"m.audio": {
"audio_player": "Meediaesitaja",
"error_downloading_audio": "Helifaili allalaadimine ei õnnestunud",
"unnamed_audio": "Nimetu helifail"
}
}
}

View file

@ -0,0 +1,29 @@
{
"action": {
"delete": "پاک‌کردن",
"dismiss": "نادیده بگیر",
"explore_rooms": "جستجو در اتاق ها",
"pause": "متوقف‌کردن",
"play": "اجرا کردن",
"search": "جستجو"
},
"left_panel": {
"open_dial_pad": "باز کردن صفحه شماره‌گیری"
},
"time": {
"about_day_ago": "حدود یک روز قبل",
"about_hour_ago": "حدود یک ساعت قبل",
"about_minute_ago": "حدود یک دقیقه قبل",
"few_seconds_ago": "چند ثانیه قبل",
"in_about_day": "حدود یک روز دیگر",
"in_about_hour": "حدود یک ساعت دیگر",
"in_about_minute": "حدود یک دقیقه دیگر",
"in_few_seconds": "چند ثانیه دیگر",
"in_n_days": "%(num)s روز دیگر",
"in_n_hours": "%(num)s ساعت دیگر",
"in_n_minutes": "%(num)s دقیقه دیگر",
"n_days_ago": "%(num)s روز قبل",
"n_hours_ago": "%(num)s ساعت قبل",
"n_minutes_ago": "%(num)s دقیقه قبل"
}
}

View file

@ -0,0 +1,38 @@
{
"a11y": {
"seek_bar_label": "Äänen siirtymispalkki"
},
"action": {
"delete": "Poista",
"dismiss": "Hylkää",
"explore_rooms": "Selaa huoneita",
"pause": "Keskeytä",
"play": "Toista",
"search": "Haku"
},
"left_panel": {
"open_dial_pad": "Avaa näppäimistö"
},
"time": {
"about_day_ago": "noin päivä sitten",
"about_hour_ago": "noin tunti sitten",
"about_minute_ago": "noin minuutti sitten",
"few_seconds_ago": "muutama sekunti sitten",
"in_about_day": "noin päivä sitten",
"in_about_hour": "noin tunti sitten",
"in_about_minute": "noin minuutti sitten",
"in_few_seconds": "muutama sekunti sitten",
"in_n_days": "%(num)s päivää sitten",
"in_n_hours": "%(num)s tuntia sitten",
"in_n_minutes": "%(num)s minuuttia sitten",
"n_days_ago": "%(num)s päivää sitten",
"n_hours_ago": "%(num)s tuntia sitten",
"n_minutes_ago": "%(num)s minuuttia sitten"
},
"timeline": {
"m.audio": {
"error_downloading_audio": "Virhe ääntä ladattaessa",
"unnamed_audio": "Nimetön ääni"
}
}
}

View file

@ -0,0 +1,48 @@
{
"a11y": {
"seek_bar_label": "Barre de recherche audio"
},
"action": {
"delete": "Supprimer",
"dismiss": "Ignorer",
"explore_rooms": "Parcourir les salons",
"pause": "Pause",
"play": "Lecture",
"search": "Rechercher"
},
"encryption": {
"pinned_identity_changed": "L'identité de %(displayName)s (<b>%(userId)s</b>) semble avoir changé. <a>En savoir plus</a>",
"withdraw_verification_action": "Révoquer la vérification"
},
"left_panel": {
"open_dial_pad": "Ouvrir le pavé de numérotation"
},
"room": {
"status_bar": {
"history_visible": "Ce salon a été configuré afin que les nouveaux membres puissent lire l'historique.<a> En savori plus</a>"
}
},
"time": {
"about_day_ago": "il y a environ un jour",
"about_hour_ago": "il y a environ une heure",
"about_minute_ago": "il y a environ une minute",
"few_seconds_ago": "il y a quelques secondes",
"in_about_day": "dans un jour environ",
"in_about_hour": "dans une heure environ",
"in_about_minute": "dans une minute environ",
"in_few_seconds": "dans quelques secondes",
"in_n_days": "dans %(num)s jours",
"in_n_hours": "dans %(num)s heures",
"in_n_minutes": "dans %(num)s minutes",
"n_days_ago": "il y a %(num)s jours",
"n_hours_ago": "il y a %(num)s heures",
"n_minutes_ago": "il y a %(num)s minutes"
},
"timeline": {
"m.audio": {
"audio_player": "Lecteur audio",
"error_downloading_audio": "Erreur lors du téléchargement de laudio",
"unnamed_audio": "Audio sans nom"
}
}
}

View file

@ -0,0 +1,35 @@
{
"action": {
"delete": "Eliminar",
"dismiss": "Rexeitar",
"explore_rooms": "Explorar salas",
"pause": "Deter",
"play": "Reproducir",
"search": "Busca"
},
"left_panel": {
"open_dial_pad": "Abrir marcador"
},
"time": {
"about_day_ago": "onte",
"about_hour_ago": "fai unha hora",
"about_minute_ago": "fai un minuto",
"few_seconds_ago": "fai uns segundos",
"in_about_day": "foi onte",
"in_about_hour": "fará unha hora",
"in_about_minute": "haberá un minuto",
"in_few_seconds": "hai só uns segundos",
"in_n_days": "fará %(num)s días",
"in_n_hours": "fará %(num)s horas",
"in_n_minutes": "fará %(num)s minutos",
"n_days_ago": "fai %(num)s días",
"n_hours_ago": "fai %(num)s horas",
"n_minutes_ago": "fai %(num)s minutos"
},
"timeline": {
"m.audio": {
"error_downloading_audio": "Erro ao descargar o audio",
"unnamed_audio": "Audio sen nome"
}
}
}

View file

@ -0,0 +1,27 @@
{
"action": {
"delete": "מחק",
"dismiss": "התעלם",
"explore_rooms": "גלה חדרים",
"search": "חפש"
},
"left_panel": {
"open_dial_pad": "פתח לוח חיוג"
},
"time": {
"about_day_ago": "בערך לפני יום",
"about_hour_ago": "בערך לפני כשעה",
"about_minute_ago": "לפני בערך דקה",
"few_seconds_ago": "לפני מספר שניות",
"in_about_day": "בערך בעוד יום מעכשיו",
"in_about_hour": "בערך בעוד כשעה",
"in_about_minute": "בערך עוד דקה אחת",
"in_few_seconds": "בעוד מספר שניות מעכשיו",
"in_n_days": "בעוד %(num)s ימים מעכשיו",
"in_n_hours": "בעוד %(num)s שעות",
"in_n_minutes": "בעוד %(num)s דקות",
"n_days_ago": "לפני %(num)s ימים",
"n_hours_ago": "לפני %(num)s שעות",
"n_minutes_ago": "לפני %(num)s דקות"
}
}

View file

@ -0,0 +1,43 @@
{
"a11y": {
"seek_bar_label": "Hang keresősávja"
},
"action": {
"delete": "Törlés",
"dismiss": "Eltüntetés",
"explore_rooms": "Szobák felderítése",
"pause": "Szünet",
"play": "Lejátszás",
"search": "Keresés"
},
"encryption": {
"pinned_identity_changed": "Úgy tűnik, hogy %(displayName)s (<b>%(userId)s</b>) személyazonossága megváltozott. <a>További információ</a>",
"withdraw_verification_action": "Ellenőrzés visszavonása"
},
"left_panel": {
"open_dial_pad": "Számlap megnyitása"
},
"time": {
"about_day_ago": "egy napja",
"about_hour_ago": "egy órája",
"about_minute_ago": "egy perce",
"few_seconds_ago": "néhány másodperce",
"in_about_day": "egy nap múlva",
"in_about_hour": "egy óra múlva",
"in_about_minute": "egy perc múlva",
"in_few_seconds": "másodpercek múlva",
"in_n_days": "%(num)s nap múlva",
"in_n_hours": "%(num)s óra múlva",
"in_n_minutes": "%(num)s perc múlva",
"n_days_ago": "%(num)s nappal ezelőtt",
"n_hours_ago": "%(num)s órával ezelőtt",
"n_minutes_ago": "%(num)s perccel ezelőtt"
},
"timeline": {
"m.audio": {
"audio_player": "Hanglejátszó",
"error_downloading_audio": "Hiba a hang letöltésekor",
"unnamed_audio": "Névtelen hang"
}
}
}

View file

@ -0,0 +1,43 @@
{
"a11y": {
"seek_bar_label": "Աուդիո որոնման գոտի"
},
"action": {
"delete": "Ջնջել",
"dismiss": "Հեռացնել",
"explore_rooms": "Փնտրել սենյակներ",
"pause": "Դադար",
"play": "Միացնել",
"search": "Որոնել"
},
"encryption": {
"pinned_identity_changed": "%(displayName)s-ի (<b>%(userId)s</b> ) ինքնությունը վերակայվել է։ <a> Իմանալ ավելին</a>",
"withdraw_verification_action": "Հետ կանչել հաստատումը"
},
"left_panel": {
"open_dial_pad": "Բացեք թվերի հավաքման վահանակը"
},
"time": {
"about_day_ago": "մոտ մեկ օր առաջ",
"about_hour_ago": "մոտ մեկ ժամ առաջ",
"about_minute_ago": "մոտ մեկ րոպե առաջ",
"few_seconds_ago": "մի քանի վայրկյան առաջ",
"in_about_day": "մոտ մեկ օր անց",
"in_about_hour": "մոտ մեկ ժամ անց",
"in_about_minute": "մոտ մեկ րոպե անց",
"in_few_seconds": "մի քանի վայրկյան անց",
"in_n_days": "%(num)s օր անց",
"in_n_hours": "%(num)s ժամ անց",
"in_n_minutes": "%(num)s րոպեներ անց",
"n_days_ago": "%(num)s օր առաջ",
"n_hours_ago": "%(num)s ժամ առաջ",
"n_minutes_ago": "%(num)s րոպե առաջ"
},
"timeline": {
"m.audio": {
"audio_player": "Աուդիո նվագարկիչ",
"error_downloading_audio": "Աուդիո ներբեռնման սխալ",
"unnamed_audio": "Անանուն աուդիո"
}
}
}

View file

@ -0,0 +1,43 @@
{
"a11y": {
"seek_bar_label": "Bilah pencarian audio"
},
"action": {
"delete": "Hapus",
"dismiss": "Abaikan",
"explore_rooms": "Jelajahi ruangan",
"pause": "Jeda",
"play": "Mainkan",
"search": "Cari"
},
"encryption": {
"pinned_identity_changed": "Identitas (<b>%(userId)s</b>) %(displayName)s tampaknya telah berubah. <a>Pelajari lebih lanjut</a>",
"withdraw_verification_action": "Tolak verifikasi"
},
"left_panel": {
"open_dial_pad": "Buka tombol penyetel"
},
"time": {
"about_day_ago": "1 hari yang lalu",
"about_hour_ago": "1 jam yang lalu",
"about_minute_ago": "1 menit yang lalu",
"few_seconds_ago": "beberapa detik yang lalu",
"in_about_day": "1 hari dari sekarang",
"in_about_hour": "1 jam dari sekarang",
"in_about_minute": "1 menit dari sekarang",
"in_few_seconds": "beberapa detik dari sekarang",
"in_n_days": "%(num)s hari dari sekarang",
"in_n_hours": "%(num)s jam dari sekarang",
"in_n_minutes": "%(num)s dari sekarang",
"n_days_ago": "%(num)s hari yang lalu",
"n_hours_ago": "%(num)s jam yang lalu",
"n_minutes_ago": "%(num)s menit yang lalu"
},
"timeline": {
"m.audio": {
"audio_player": "Pemutar audio",
"error_downloading_audio": "Terjadi kesalahan mengunduh audio",
"unnamed_audio": "Audio tidak dinamai"
}
}
}

View file

@ -0,0 +1,35 @@
{
"action": {
"delete": "Eyða",
"dismiss": "Hunsa",
"explore_rooms": "Kanna spjallrásir",
"pause": "Bið",
"play": "Spila",
"search": "Leita"
},
"left_panel": {
"open_dial_pad": "Opna talnaborð"
},
"time": {
"about_day_ago": "fyrir um degi síðan",
"about_hour_ago": "fyrir um klukkustund síðan",
"about_minute_ago": "fyrir um það bil mínútu síðan",
"few_seconds_ago": "fyrir örfáum sekúndum síðan",
"in_about_day": "eftir um það bil einn dag",
"in_about_hour": "eftir um það bil klukkustund",
"in_about_minute": "eftir um það bil mínútu",
"in_few_seconds": "eftir nokkrar sekúndur",
"in_n_days": "eftir %(num)s daga",
"in_n_hours": "eftir %(num)s klukkustundir",
"in_n_minutes": "eftir %(num)s mínútur",
"n_days_ago": "fyrir %(num)s dögum síðan",
"n_hours_ago": "fyrir %(num)s klukkustundum síðan",
"n_minutes_ago": "fyrir %(num)s mínútum síðan"
},
"timeline": {
"m.audio": {
"error_downloading_audio": "Villa við að sækja hljóð",
"unnamed_audio": "Nafnlaust hljóð"
}
}
}

View file

@ -0,0 +1,38 @@
{
"a11y": {
"seek_bar_label": "Barra di ricerca audio"
},
"action": {
"delete": "Elimina",
"dismiss": "Chiudi",
"explore_rooms": "Esplora stanze",
"pause": "Pausa",
"play": "Riproduci",
"search": "Cerca"
},
"left_panel": {
"open_dial_pad": "Apri tastierino"
},
"time": {
"about_day_ago": "circa un giorno fa",
"about_hour_ago": "circa un'ora fa",
"about_minute_ago": "circa un minuto fa",
"few_seconds_ago": "pochi secondi fa",
"in_about_day": "circa un giorno da adesso",
"in_about_hour": "circa un'ora da adesso",
"in_about_minute": "circa un minuto da adesso",
"in_few_seconds": "pochi secondi da adesso",
"in_n_days": "%(num)s giorni da adesso",
"in_n_hours": "%(num)s ore da adesso",
"in_n_minutes": "%(num)s minuti da adesso",
"n_days_ago": "%(num)s giorni fa",
"n_hours_ago": "%(num)s ore fa",
"n_minutes_ago": "%(num)s minuti fa"
},
"timeline": {
"m.audio": {
"error_downloading_audio": "Errore di scaricamento dell'audio",
"unnamed_audio": "Audio senza nome"
}
}
}

View file

@ -0,0 +1,35 @@
{
"action": {
"delete": "削除",
"dismiss": "閉じる",
"explore_rooms": "ルームを探す",
"pause": "一時停止",
"play": "再生",
"search": "検索"
},
"left_panel": {
"open_dial_pad": "ダイヤルパッドを開く"
},
"time": {
"about_day_ago": "約1日前",
"about_hour_ago": "約1時間前",
"about_minute_ago": "約1分前",
"few_seconds_ago": "数秒前",
"in_about_day": "今から約1日前",
"in_about_hour": "今から約1時間前",
"in_about_minute": "今から約1分前",
"in_few_seconds": "今から数秒前",
"in_n_days": "今から%(num)s日前",
"in_n_hours": "今から%(num)s時間前",
"in_n_minutes": "今から%(num)s分前",
"n_days_ago": "%(num)s日前",
"n_hours_ago": "%(num)s時間前",
"n_minutes_ago": "%(num)s分前"
},
"timeline": {
"m.audio": {
"error_downloading_audio": "音声をダウンロードする際にエラーが発生しました",
"unnamed_audio": "名前のない音声"
}
}
}

View file

@ -0,0 +1,32 @@
{
"action": {
"delete": "წაშლა",
"dismiss": "დახურვა",
"explore_rooms": "ოთახების დათავლიერება",
"pause": "პაუზა",
"play": "დაკვრა",
"search": "ძიება"
},
"time": {
"about_day_ago": "დაახლოებით ერთი დღის წინ",
"about_hour_ago": "დაახლოებით ერთი საათის წინ",
"about_minute_ago": "დაახლოებით ერთი წუთის წინ",
"few_seconds_ago": "რამდენიმე წამის წინ",
"in_about_day": "დაახლოებით ერთი დღის შემდეგ",
"in_about_hour": "დაახლოებით ერთი საათის შემდეგ",
"in_about_minute": "დაახლოებით ერთი წუთის შემდეგ",
"in_few_seconds": "რამდენიმე წამის შემდეგ",
"in_n_days": "%(num)sდღეებიდან",
"in_n_hours": "%(num)sსაათის შემდეგ",
"in_n_minutes": "%(num)sწუთის შემდეგ",
"n_days_ago": "%(num)sდღის წინ",
"n_hours_ago": "%(num)sსაათის წინ",
"n_minutes_ago": "%(num)sწუთის წინ"
},
"timeline": {
"m.audio": {
"error_downloading_audio": "შეცდომა აუდიოს ჩამოტვირთვისას",
"unnamed_audio": "უსახელო აუდიო"
}
}
}

View file

@ -0,0 +1,43 @@
{
"a11y": {
"seek_bar_label": "오디오 탐색 바"
},
"action": {
"delete": "삭제",
"dismiss": "버리기",
"explore_rooms": "방 검색",
"pause": "일시중지",
"play": "재생",
"search": "찾기"
},
"encryption": {
"pinned_identity_changed": "%(displayName)s (<b>%(userId)s</b>)의 신원이 재설정되었습니다. <a>자세히 알아보기</a>",
"withdraw_verification_action": "인증 취소"
},
"left_panel": {
"open_dial_pad": "다이얼 패드 열기"
},
"time": {
"about_day_ago": "약 1일 전",
"about_hour_ago": "약 1 시간 전",
"about_minute_ago": "약 1분 전",
"few_seconds_ago": "몇 초 전",
"in_about_day": "하루 정도 후",
"in_about_hour": "지금부터 한 시간 정도 후에",
"in_about_minute": "지금부터 약 1분 후",
"in_few_seconds": "몇 초 후",
"in_n_days": "지금부터 %(num)s 일 후에",
"in_n_hours": "지금부터 %(num)s 시간 후",
"in_n_minutes": "지금부터 %(num)s분 후",
"n_days_ago": "%(num)s일 전",
"n_hours_ago": "%(num)s 시간 전",
"n_minutes_ago": "%(num)s분 전"
},
"timeline": {
"m.audio": {
"audio_player": "오디오 플레이어",
"error_downloading_audio": "오디오 다운로드 중 오류 발생",
"unnamed_audio": "이름 없는 오디오"
}
}
}

View file

@ -0,0 +1,35 @@
{
"action": {
"delete": "ລຶບ",
"dismiss": "ຍົກເລີກ",
"explore_rooms": "ການສຳຫຼວດຫ້ອງ",
"pause": "ຢຸດຊົ່ວຄາວ",
"play": "ຫຼິ້ນ",
"search": "ຊອກຫາ"
},
"left_panel": {
"open_dial_pad": "ເປີດແຜ່ນປັດ"
},
"time": {
"about_day_ago": "ປະມານຫນຶ່ງມື້ກ່ອນຫນ້ານີ້",
"about_hour_ago": "ປະມານຫນຶ່ງຊົ່ວໂມງກ່ອນຫນ້ານີ້",
"about_minute_ago": "ປະມານໜຶ່ງວິນາທີກ່ອນຫນ້ານີ້",
"few_seconds_ago": "ສອງສາມວິນາທີກ່ອນຫນ້ານີ້",
"in_about_day": "ປະມານນຶ່ງມື້ຈາກນີ້",
"in_about_hour": "ປະມານຫນຶ່ງຊົ່ວໂມງຈາກປະຈຸບັນນີ້",
"in_about_minute": "ປະມານໜຶ່ງນາທີຕໍ່ຈາກນີ້",
"in_few_seconds": "ສອງສາມວິນາທີຕໍ່ຈາກນີ້ໄປ",
"in_n_days": "%(num)s ມື້ຕໍ່ຈາກນີ້",
"in_n_hours": "%(num)s ຊົ່ວໂມງຈາກປະຈຸບັນນີ້",
"in_n_minutes": "%(num)s ນາທີຕໍ່ຈາກນີ້",
"n_days_ago": "%(num)sມື້ກ່ອນຫນ້ານີ້",
"n_hours_ago": "%(num)s ຊົ່ວໂມງກ່ອນ",
"n_minutes_ago": "%(num)s ນາທີກ່ອນ"
},
"timeline": {
"m.audio": {
"error_downloading_audio": "ເກີດຄວາມຜິດພາດໃນການດາວໂຫຼດສຽງ",
"unnamed_audio": "ສຽງບໍ່ມີຊື່"
}
}
}

View file

@ -0,0 +1,24 @@
{
"action": {
"delete": "Ištrinti",
"dismiss": "Atmesti",
"explore_rooms": "Žvalgyti kambarius",
"search": "Ieškoti"
},
"time": {
"about_day_ago": "maždaug prieš dieną",
"about_hour_ago": "maždaug prieš valandą",
"about_minute_ago": "maždaug prieš minutę",
"few_seconds_ago": "prieš kelias sekundes",
"in_about_day": "apie dieną nuo dabar",
"in_about_hour": "apie valandą nuo dabar",
"in_about_minute": "apie minutę nuo dabar",
"in_few_seconds": "keletą sekundžių nuo dabar",
"in_n_days": "%(num)s dienas(-ų) nuo dabar",
"in_n_hours": "%(num)s valandas(-ų) nuo dabar",
"in_n_minutes": "%(num)s minutes(-ų) nuo dabar",
"n_days_ago": "prieš %(num)s dienas(-ų)",
"n_hours_ago": "prieš %(num)s valandas(-ų)",
"n_minutes_ago": "prieš %(num)s minutes(-ų)"
}
}

View file

@ -0,0 +1,35 @@
{
"a11y": {
"seek_bar_label": "Audio meklēšanas josla"
},
"action": {
"delete": "Izdzēst",
"dismiss": "Atmest",
"explore_rooms": "Pārlūkot istabas",
"pause": "Pauzēt",
"play": "Atskaņot",
"search": "Meklēt"
},
"time": {
"about_day_ago": "aptuveni dienu iepriekš",
"about_hour_ago": "aptuveni stundu iepriekš",
"about_minute_ago": "aptuveni minūti iepriekš",
"few_seconds_ago": "pirms dažām sekundēm",
"in_about_day": "aptuveni dienu kopš šī brīža",
"in_about_hour": "aptuveni stundu kopš šī brīža",
"in_about_minute": "aptuveni minūti kopš šī brīža",
"in_few_seconds": "dažas sekundes kopš šī brīža",
"in_n_days": "%(num)s dienas kopš šī brīža",
"in_n_hours": "%(num)s stundas kopš šī brīža",
"in_n_minutes": "%(num)s minūtes kopš šī brīža",
"n_days_ago": "%(num)s dienas iepriekš",
"n_hours_ago": "%(num)s stundas iepriekš",
"n_minutes_ago": "%(num)s minūtes iepriekš"
},
"timeline": {
"m.audio": {
"error_downloading_audio": "Kļūda skaņas lejupielādēšanā",
"unnamed_audio": "Nenosaukts audio"
}
}
}

View file

@ -0,0 +1,38 @@
{
"a11y": {
"seek_bar_label": "Audio mitady bar"
},
"action": {
"delete": "Esorina",
"dismiss": "Hanario",
"explore_rooms": "Tsidiho ny efitrano",
"pause": "Mihato",
"play": "Milalao",
"search": "Karohina"
},
"left_panel": {
"open_dial_pad": "Sokafy ny dial pad"
},
"time": {
"about_day_ago": "Tokony ho iray andro izay",
"about_hour_ago": "Manakaiky adin'iray Teo ho eo",
"about_minute_ago": "Misy iray minitra Teo izay",
"few_seconds_ago": "Segondra vitsy lasa",
"in_about_day": "Anatiny iray andro eo ho eo",
"in_about_hour": "Adiny iray eo ho eo",
"in_about_minute": "Afaka iray minitra eo ho eo",
"in_few_seconds": "Afaka segondra vitsy",
"in_n_days": "%(num) s andro manomboka izao",
"in_n_hours": "% (num) sAnatiny ora vitsivitsy",
"in_n_minutes": "% (Num) sAfaka minitra vitsy",
"n_days_ago": "%(num)s Andro vitsivitsy izay",
"n_hours_ago": "%(num)sOra maromaro",
"n_minutes_ago": "%(Num)s Minitra vitsivitsy izay"
},
"timeline": {
"m.audio": {
"error_downloading_audio": "Hadisoana tamin'ny fampidinana feo",
"unnamed_audio": "Audio tsy voatonona anarana"
}
}
}

View file

@ -0,0 +1,43 @@
{
"a11y": {
"seek_bar_label": "Søkelinje for lyd"
},
"action": {
"delete": "Slett",
"dismiss": "Avvis",
"explore_rooms": "Se alle rom",
"pause": "Pause",
"play": "Spill av",
"search": "Søk"
},
"encryption": {
"pinned_identity_changed": "%(displayName)ss (<b>%(userId)s</b>) identitet ser ut til å ha endret seg. <a>Finn ut mer</a>",
"withdraw_verification_action": "Trekk tilbake verifisering"
},
"left_panel": {
"open_dial_pad": "Åpne nummerpanelet"
},
"time": {
"about_day_ago": "cirka 1 dag siden",
"about_hour_ago": "cirka 1 time siden",
"about_minute_ago": "cirka 1 minutt siden",
"few_seconds_ago": "noen sekunder siden",
"in_about_day": "rundt en dag fra nå",
"in_about_hour": "rundt en time fra nå",
"in_about_minute": "rundt et minutt fra nå",
"in_few_seconds": "om noen sekunder fra nå",
"in_n_days": "%(num)s dager fra nå",
"in_n_hours": "%(num)s timer fra nå",
"in_n_minutes": "%(num)s minutter fra nå",
"n_days_ago": "%(num)s dager siden",
"n_hours_ago": "%(num)s timer siden",
"n_minutes_ago": "%(num)s minutter siden"
},
"timeline": {
"m.audio": {
"audio_player": "Lydavspiller",
"error_downloading_audio": "Feil ved nedlasting av lyd",
"unnamed_audio": "Ikke navngitt lyd"
}
}
}

View file

@ -0,0 +1,38 @@
{
"a11y": {
"seek_bar_label": "Audio zoekbalk"
},
"action": {
"delete": "Verwijderen",
"dismiss": "Sluiten",
"explore_rooms": "Kamers ontdekken",
"pause": "Pauze",
"play": "Afspelen",
"search": "Zoeken"
},
"left_panel": {
"open_dial_pad": "Kiestoetsen openen"
},
"time": {
"about_day_ago": "ongeveer een dag geleden",
"about_hour_ago": "ongeveer een uur geleden",
"about_minute_ago": "ongeveer een minuut geleden",
"few_seconds_ago": "enige tellen geleden",
"in_about_day": "over een dag of zo",
"in_about_hour": "over ongeveer een uur",
"in_about_minute": "over ongeveer een minuut",
"in_few_seconds": "over een paar tellen",
"in_n_days": "over %(num)s dagen",
"in_n_hours": "over %(num)s uur",
"in_n_minutes": "over %(num)s minuten",
"n_days_ago": "%(num)s dagen geleden",
"n_hours_ago": "%(num)s uur geleden",
"n_minutes_ago": "%(num)s minuten geleden"
},
"timeline": {
"m.audio": {
"error_downloading_audio": "Fout bij downloaden van audio",
"unnamed_audio": "Naamloze audio"
}
}
}

View file

@ -0,0 +1,43 @@
{
"a11y": {
"seek_bar_label": "Pasek wyszukiwania audio"
},
"action": {
"delete": "Usuń",
"dismiss": "Pomiń",
"explore_rooms": "Przeglądaj pokoje",
"pause": "Wstrzymaj",
"play": "Odtwórz",
"search": "Szukaj"
},
"encryption": {
"pinned_identity_changed": "Tożsamość %(displayName)s (<b>%(userId)s</b>) została zresetowana. <a>Dowiedz się więcej</a>",
"withdraw_verification_action": "Wycofaj weryfikację"
},
"left_panel": {
"open_dial_pad": "Otwórz klawiaturę numeryczną"
},
"time": {
"about_day_ago": "około dzień temu",
"about_hour_ago": "około godziny temu",
"about_minute_ago": "około minuty temu",
"few_seconds_ago": "kilka sekund temu",
"in_about_day": "około dnia od teraz",
"in_about_hour": "około godziny od teraz",
"in_about_minute": "około minuty od teraz",
"in_few_seconds": "za kilka sekund",
"in_n_days": "za %(num)s dni",
"in_n_hours": "za %(num)s godzin",
"in_n_minutes": "za %(num)s minut",
"n_days_ago": "%(num)s dni temu",
"n_hours_ago": "%(num)s godzin temu",
"n_minutes_ago": "%(num)s minut temu"
},
"timeline": {
"m.audio": {
"audio_player": "Odtwarzacz audio",
"error_downloading_audio": "Wystąpił błąd w trakcie pobierania audio",
"unnamed_audio": "Audio bez nazwy"
}
}
}

View file

@ -0,0 +1,42 @@
{
"a11y": {
"seek_bar_label": "Barra de procura de áudio"
},
"action": {
"delete": "Apagar",
"dismiss": "Descartar",
"explore_rooms": "Explorar rooms",
"pause": "Pausar",
"play": "Reproduzir",
"search": "Pesquisar"
},
"encryption": {
"pinned_identity_changed": "A identidade de %(displayName)s (<b>%(userId)s</b> ) foi alterada. <a> Saber mais</a>",
"withdraw_verification_action": "Retirar verificação"
},
"left_panel": {
"open_dial_pad": "Abre o teclado de marcação"
},
"time": {
"about_day_ago": "há cerca de um dia",
"about_hour_ago": "há cerca de uma hora",
"about_minute_ago": "há cerca de um minuto",
"few_seconds_ago": "há alguns segundos atrás",
"in_about_day": "daqui a um dia",
"in_about_hour": "daqui a uma hora",
"in_about_minute": "daqui a um minuto",
"in_few_seconds": "daqui a alguns segundos",
"in_n_days": "daqui a %(num)s dias",
"in_n_hours": "daqui a %(num)s horas",
"in_n_minutes": "daqui a %(num)s minutos",
"n_days_ago": "%(num)s dias atrás",
"n_hours_ago": "%(num)s horas atrás",
"n_minutes_ago": "%(num)s minutos atrás"
},
"timeline": {
"m.audio": {
"error_downloading_audio": "Erro ao descarregar áudio",
"unnamed_audio": "Áudio sem nome"
}
}
}

View file

@ -0,0 +1,43 @@
{
"a11y": {
"seek_bar_label": "Barra de busca de áudio"
},
"action": {
"delete": "Excluir",
"dismiss": "Dispensar",
"explore_rooms": "Explorar salas",
"pause": "Pausar",
"play": "Reproduzir",
"search": "Buscar"
},
"encryption": {
"pinned_identity_changed": "A identidade de %(displayName)s (<b>%(userId)s</b>) parece ter mudado. <a>Saiba mais</a>",
"withdraw_verification_action": "Retirar verificação"
},
"left_panel": {
"open_dial_pad": "Abrir o teclado de discagem"
},
"time": {
"about_day_ago": "há aproximadamente um dia",
"about_hour_ago": "há aproximadamente uma hora",
"about_minute_ago": "há aproximadamente um minuto",
"few_seconds_ago": "há alguns segundos",
"in_about_day": "dentro de aproximadamente um dia",
"in_about_hour": "dentro de aproximadamente uma hora",
"in_about_minute": "dentro de aproximadamente um minuto",
"in_few_seconds": "dentro de alguns segundos",
"in_n_days": "dentro de %(num)s dias",
"in_n_hours": "dentro de %(num)s horas",
"in_n_minutes": "dentro de %(num)s minutos",
"n_days_ago": "há %(num)s dias",
"n_hours_ago": "há %(num)s horas",
"n_minutes_ago": "há %(num)s minutos"
},
"timeline": {
"m.audio": {
"audio_player": "Reprodutor de Áudio",
"error_downloading_audio": "Erro ao baixar o áudio",
"unnamed_audio": "Áudio sem nome"
}
}
}

View file

@ -0,0 +1,43 @@
{
"a11y": {
"seek_bar_label": "Панель поиска аудио"
},
"action": {
"delete": "Удалить",
"dismiss": "Закрыть",
"explore_rooms": "Обзор комнат",
"pause": "Пауза",
"play": "Воспроизведение",
"search": "Поиск"
},
"encryption": {
"pinned_identity_changed": "Идентичность %(displayName)s (<b>%(userId)s</b>), похоже, изменилась. <a>Узнать больше</a>",
"withdraw_verification_action": "Подтверждение верификации"
},
"left_panel": {
"open_dial_pad": "Открыть панель набора номера"
},
"time": {
"about_day_ago": "около суток назад",
"about_hour_ago": "около часа назад",
"about_minute_ago": "около минуты назад",
"few_seconds_ago": "несколько секунд назад",
"in_about_day": "примерно через день",
"in_about_hour": "примерно через час",
"in_about_minute": "примерно через минуту",
"in_few_seconds": "несколько секунд назад",
"in_n_days": "%(num)s дней спустя",
"in_n_hours": "%(num)s часов спустя",
"in_n_minutes": "%(num)s минут спустя",
"n_days_ago": "%(num)s дней назад",
"n_hours_ago": "%(num)s часов назад",
"n_minutes_ago": "%(num)s минут назад"
},
"timeline": {
"m.audio": {
"audio_player": "Аудиоплеер",
"error_downloading_audio": "Ошибка загрузки аудио",
"unnamed_audio": "Безымянное аудио"
}
}
}

View file

@ -0,0 +1,48 @@
{
"a11y": {
"seek_bar_label": "Panel vyhľadávania zvuku"
},
"action": {
"delete": "Vymazať",
"dismiss": "Zamietnuť",
"explore_rooms": "Preskúmať miestnosti",
"pause": "Pozastaviť",
"play": "Prehrať",
"search": "Hľadať"
},
"encryption": {
"pinned_identity_changed": "Zdá sa, že identita (<b>%(userId)s</b>) používateľa %(displayName)s bola obnovená. <a>Zistiť viac </a>",
"withdraw_verification_action": "Zrušiť overenie"
},
"left_panel": {
"open_dial_pad": "Otvoriť číselník"
},
"room": {
"status_bar": {
"history_visible": "Správy, ktoré odošlete, budú zdieľané s novými členmi pozvanými do tejto miestnosti. <a>Zistiť viac</a>"
}
},
"time": {
"about_day_ago": "asi pred jedným dňom",
"about_hour_ago": "približne pred hodinou",
"about_minute_ago": "približne pred minútou",
"few_seconds_ago": "pred pár sekundami",
"in_about_day": "približne o deň",
"in_about_hour": "približne o hodinu",
"in_about_minute": "približne o minútu",
"in_few_seconds": "o pár sekúnd",
"in_n_days": "o %(num)s dní",
"in_n_hours": "o %(num)s hodín",
"in_n_minutes": "o %(num)s minút",
"n_days_ago": "pred %(num)s dňami",
"n_hours_ago": "pred %(num)s hodinami",
"n_minutes_ago": "pred %(num)s minútami"
},
"timeline": {
"m.audio": {
"audio_player": "Prehrávač zvuku",
"error_downloading_audio": "Chyba pri sťahovaní zvuku",
"unnamed_audio": "Nepomenovaný zvukový záznam"
}
}
}

View file

@ -0,0 +1,35 @@
{
"action": {
"delete": "Fshije",
"dismiss": "Mos e merr parasysh",
"explore_rooms": "Eksploroni dhoma",
"pause": "Ndalesë",
"play": "Luaje",
"search": "Kërkoni"
},
"left_panel": {
"open_dial_pad": "Hap butona numrash"
},
"time": {
"about_day_ago": "rreth një ditë më parë",
"about_hour_ago": "rreth një orë më parë",
"about_minute_ago": "rreth një minutë më parë",
"few_seconds_ago": "pak sekonda më parë",
"in_about_day": "rreth një ditë nga tani",
"in_about_hour": "rreth një orë nga tani",
"in_about_minute": "rreth një minutë nga tani",
"in_few_seconds": "pak sekonda nga tani",
"in_n_days": "%(num)s ditë nga tani",
"in_n_hours": "%(num)s orë nga tani",
"in_n_minutes": "%(num)s minuta nga tani",
"n_days_ago": "%(num)s ditë më parë",
"n_hours_ago": "%(num)s orë më parë",
"n_minutes_ago": "%(num)s minuta më parë"
},
"timeline": {
"m.audio": {
"error_downloading_audio": "Gabim në shkarkim audioje",
"unnamed_audio": "Audio pa emër"
}
}
}

View file

@ -0,0 +1,43 @@
{
"a11y": {
"seek_bar_label": "Förloppsfält för ljud"
},
"action": {
"delete": "Radera",
"dismiss": "Avvisa",
"explore_rooms": "Utforska rum",
"pause": "Pausa",
"play": "Spela",
"search": "Sök"
},
"encryption": {
"pinned_identity_changed": "%(displayName)ss (<b>%(userId)s</b> ) identitet verkar ha ändrats.<a> Läs mer</a>",
"withdraw_verification_action": "Återkalla verifieringen"
},
"left_panel": {
"open_dial_pad": "Öppna knappsats"
},
"time": {
"about_day_ago": "cirka en dag sedan",
"about_hour_ago": "cirka en timme sedan",
"about_minute_ago": "cirka en minut sedan",
"few_seconds_ago": "några sekunder sedan",
"in_about_day": "om cirka en dag",
"in_about_hour": "om cirka en timme",
"in_about_minute": "om cirka en minut",
"in_few_seconds": "om några sekunder",
"in_n_days": "om %(num)s dagar",
"in_n_hours": "om %(num)s timmar",
"in_n_minutes": "om %(num)s minuter",
"n_days_ago": "%(num)s dagar sedan",
"n_hours_ago": "%(num)s timmar sedan",
"n_minutes_ago": "%(num)s minuter sedan"
},
"timeline": {
"m.audio": {
"audio_player": "Ljudspelare",
"error_downloading_audio": "Fel vid nedladdning av ljud",
"unnamed_audio": "Namnlöst ljud"
}
}
}

View file

@ -0,0 +1,42 @@
{
"a11y": {
"seek_bar_label": "Ses arama çubuğu"
},
"action": {
"delete": "Sil",
"dismiss": "Kapat",
"explore_rooms": "Odaları keşfet",
"pause": "Durdur",
"play": "Oynat",
"search": "Ara"
},
"encryption": {
"pinned_identity_changed": "%(displayName)s'ın (<b>%(userId)s</b>) kimliği değişmiş gibi görünüyor. <a>Daha fazla bilgi </a>",
"withdraw_verification_action": "Doğrulamayı iptal et"
},
"left_panel": {
"open_dial_pad": "Arama tuşlarını aç"
},
"time": {
"about_day_ago": "yaklaşık bir gün önce",
"about_hour_ago": "yaklaşık bir saat önce",
"about_minute_ago": "yaklaşık bir dakika önce",
"few_seconds_ago": "bir kaç saniye önce",
"in_about_day": "şu andan itibaren yaklaşık bir gün",
"in_about_hour": "şu andan itibaren yaklaşık bir saat",
"in_about_minute": "şu andan itibaren yaklaşık bir dakika",
"in_few_seconds": "şu andan itibaren bir kaç saniye",
"in_n_days": "şu andan itibaren %(num)s gün",
"in_n_hours": "şu andan itibaren %(num)s saat",
"in_n_minutes": "şu andan itibaren %(num)s dakika",
"n_days_ago": "%(num)s gün önce",
"n_hours_ago": "%(num)s saat önce",
"n_minutes_ago": "%(num)s dakika önce"
},
"timeline": {
"m.audio": {
"error_downloading_audio": "Ses dosyası indirilirken hata oluştu",
"unnamed_audio": "İsimsiz ses"
}
}
}

View file

@ -0,0 +1,43 @@
{
"a11y": {
"seek_bar_label": "Панель гортання аудіо"
},
"action": {
"delete": "Видалити",
"dismiss": "Відхилити",
"explore_rooms": "Каталог кімнат",
"pause": "Призупинити",
"play": "Відтворити",
"search": "Пошук"
},
"encryption": {
"pinned_identity_changed": "Ідентичність %(displayName)s (<b>%(userId)s</b>) скинуто. <a>Докладніше</a>",
"withdraw_verification_action": "Відкликати верифікацію"
},
"left_panel": {
"open_dial_pad": "Відкрити номеронабирач"
},
"time": {
"about_day_ago": "близько доби тому",
"about_hour_ago": "близько години тому",
"about_minute_ago": "близько хвилини тому",
"few_seconds_ago": "Декілька секунд тому",
"in_about_day": "приблизно через день",
"in_about_hour": "приблизно через годину",
"in_about_minute": "приблизно через хвилинку",
"in_few_seconds": "декілька секунд тому",
"in_n_days": "%(num)s днів по тому",
"in_n_hours": "%(num)s годин по тому",
"in_n_minutes": "%(num)s хвилин по тому",
"n_days_ago": "%(num)s днів тому",
"n_hours_ago": "%(num)s годин тому",
"n_minutes_ago": "%(num)s хвилин тому"
},
"timeline": {
"m.audio": {
"audio_player": "Звуковий програвач",
"error_downloading_audio": "Помилка завантаження аудіо",
"unnamed_audio": "Аудіо без назви"
}
}
}

View file

@ -0,0 +1,35 @@
{
"action": {
"delete": "Xoá",
"dismiss": "Bỏ qua",
"explore_rooms": "Khám phá các phòng",
"pause": "Tạm dừng",
"play": "Chạy",
"search": "Tìm kiếm"
},
"left_panel": {
"open_dial_pad": "Mở bàn phím quay số"
},
"time": {
"about_day_ago": "khoảng một ngày trước",
"about_hour_ago": "khoảng một giờ trước",
"about_minute_ago": "khoảng một phút trước",
"few_seconds_ago": "vài giây trước",
"in_about_day": "khoảng một ngày kể từ bây giờ",
"in_about_hour": "khoảng một giờ kể từ bây giờ",
"in_about_minute": "khoảng một phút kể từ bây giờ",
"in_few_seconds": "một vài giây kể từ bây giờ",
"in_n_days": "%(num)s ngày kể từ bây giờ",
"in_n_hours": "%(num)s giờ kể từ bây giờ",
"in_n_minutes": "%(num)s phút kể từ bây giờ",
"n_days_ago": "%(num)s ngày trước",
"n_hours_ago": "%(num)s giờ trước",
"n_minutes_ago": "%(num)s phút trước"
},
"timeline": {
"m.audio": {
"error_downloading_audio": "Lỗi khi tải xuống âm thanh",
"unnamed_audio": "Âm thanh không tên"
}
}
}

View file

@ -0,0 +1,35 @@
{
"action": {
"delete": "删除",
"dismiss": "忽略",
"explore_rooms": "查找房间",
"pause": "暂停",
"play": "播放",
"search": "搜索"
},
"left_panel": {
"open_dial_pad": "打开拨号键盘"
},
"time": {
"about_day_ago": "约一天前",
"about_hour_ago": "约一小时前",
"about_minute_ago": "约一分钟前",
"few_seconds_ago": "数秒前",
"in_about_day": "从现在开始约一天",
"in_about_hour": "从现在开始约一小时",
"in_about_minute": "从现在开始约一分钟",
"in_few_seconds": "从现在开始数秒",
"in_n_days": "从现在开始%(num)s天",
"in_n_hours": "从现在开始%(num)s小时",
"in_n_minutes": "从现在开始%(num)s分钟",
"n_days_ago": "%(num)s天前",
"n_hours_ago": "%(num)s小时前",
"n_minutes_ago": "%(num)s分钟前"
},
"timeline": {
"m.audio": {
"error_downloading_audio": "下载音频时出错",
"unnamed_audio": "未命名的音频"
}
}
}

View file

@ -0,0 +1,35 @@
{
"action": {
"delete": "刪除",
"dismiss": "關閉",
"explore_rooms": "探索聊天室",
"pause": "暫停",
"play": "播放",
"search": "搜尋"
},
"left_panel": {
"open_dial_pad": "開啟撥號鍵盤"
},
"time": {
"about_day_ago": "大約一天前",
"about_hour_ago": "大約一小時前",
"about_minute_ago": "大約一分鐘前",
"few_seconds_ago": "數秒前",
"in_about_day": "從現在開始大約一天",
"in_about_hour": "從現在開始大約一小時",
"in_about_minute": "從現在開始大約一分鐘",
"in_few_seconds": "從現在開始數秒鐘",
"in_n_days": "從現在開始 %(num)s 天",
"in_n_hours": "從現在開始 %(num)s 小時",
"in_n_minutes": "從現在開始 %(num)s 分鐘",
"n_days_ago": "%(num)s 天前",
"n_hours_ago": "%(num)s 小時前",
"n_minutes_ago": "%(num)s 分鐘前"
},
"timeline": {
"m.audio": {
"error_downloading_audio": "下載音訊時發生錯誤",
"unnamed_audio": "未命名的音訊"
}
}
}

View file

@ -36,7 +36,3 @@ export * from "./utils/I18nApi";
export * from "./viewmodel";
export * from "./useMockedViewModel";
export * from "./useViewModel";
// i18n (we must export this directly in order to not confuse the type bundler, it seems,
// otherwise it will leave it as a relative import rather than bundling it)
export type * from "./i18nKeys.d.ts";

View file

@ -8,7 +8,7 @@ Please see LICENSE files in the repository root for full details.
import fetchMock from "fetch-mock-jest";
import { setLanguage } from "../../src/utils/i18n";
import en from "../../../../src/i18n/strings/en_EN.json";
import en from "../i18n/strings/en_EN.json";
export function setupLanguageMock(): void {
fetchMock

View file

@ -5,14 +5,13 @@
* Please see LICENSE files in the repository root for full details.
*/
import { type TranslationKey } from "../i18nKeys";
import { I18nApi } from "./I18nApi";
describe("I18nApi", () => {
it("can register a translation and use it", () => {
const i18n = new I18nApi();
i18n.register({
"hello.world": {
["hello.world" as TranslationKey]: {
en: "Hello, World!",
},
});

View file

@ -9,7 +9,6 @@ import { type I18nApi as II18nApi, type Variables, type Translations } from "@el
import { humanizeTime } from "./humanize";
import { _t, getLocale, registerTranslations } from "./i18n";
import { type TranslationKey } from "../i18nKeys";
export class I18nApi implements II18nApi {
/**
@ -24,10 +23,11 @@ export class I18nApi implements II18nApi {
*/
public register(translations: Partial<Translations>): void {
const langs: Record<string, Record<string, string>> = {};
for (const key in translations) {
for (const lang in translations[key]) {
for (const lang in translations[key as keyof Translations]) {
langs[lang] = langs[lang] || {};
langs[lang][key] = translations[key][lang];
langs[lang][key] = translations[key as keyof Translations]![lang];
}
}

View file

@ -25,13 +25,11 @@ import React from "react";
import { KEY_SEPARATOR } from "matrix-web-i18n";
import counterpart from "counterpart";
import type { TranslationKey } from "../index";
// @ts-ignore - $webapp is a webpack resolve alias pointing to the output directory, see webpack config
import webpackLangJsonUrl from "$webapp/i18n/languages.json";
export { KEY_SEPARATOR, normalizeLanguageKey, getNormalizedLanguageKeys } from "matrix-web-i18n";
// Path where we load language files from (the index plus translations for each language)
// The filename is appended to this, so a relative path here will result in a fetch for
// a relative URL.
const i18nFolder = "i18n/";
// Control whether to also return original, untranslated strings
@ -421,13 +419,7 @@ async function getLanguage(langPath: string): Promise<ICounterpartTranslation> {
}
export async function getLangsJson(): Promise<Languages> {
let url: string;
if (typeof webpackLangJsonUrl === "string") {
// in Jest this 'url' isn't a URL, so just fall through
url = webpackLangJsonUrl;
} else {
url = i18nFolder + "languages.json";
}
const url = i18nFolder + "languages.json";
const res = await fetch(url, { method: "GET" });

View file

@ -9,8 +9,10 @@ import _ from "lodash";
import webpack from "webpack";
import type { Translations } from "matrix-web-i18n";
const I18N_BASE_PATH = "src/i18n/strings/";
const INCLUDE_LANGS = [...new Set([...fs.readdirSync(I18N_BASE_PATH)])]
const EW_I18N_BASE_PATH = "src/i18n/strings/";
const SC_I18N_BASE_PATH = "packages/shared-components/src/i18n/strings/";
const INCLUDE_LANGS = [...new Set([...fs.readdirSync(EW_I18N_BASE_PATH)])]
.filter((fn) => fn.endsWith(".json"))
.map((f) => f.slice(0, -5));
@ -41,11 +43,17 @@ const logWatch = (path: string) => {
}
};
function prepareLangFile(lang: string, dest: string): [filename: string, json: string] {
const path = I18N_BASE_PATH + lang + ".json";
/*
* Make a JSON language file for the given language by merging all translations
* into a single file (ie. element-web and shared-components).
* Returns the filename (including hash) and JSON content.
*/
function prepareLangFile(lang: string): [filename: string, json: string] {
const ewTranslationsPath = EW_I18N_BASE_PATH + lang + ".json";
const scTranslationsPath = SC_I18N_BASE_PATH + lang + ".json";
let translations: Translations = {};
[path].forEach(function (f) {
[ewTranslationsPath, scTranslationsPath].forEach(function (f) {
if (fs.existsSync(f)) {
try {
translations = _.merge(translations, JSON.parse(fs.readFileSync(f).toString()));
@ -99,7 +107,8 @@ function genLangList(langFileMap: Record<string, string>): void {
* and regenerating languages.json with the new filename
*/
function watchLanguage(lang: string, dest: string, langFileMap: Record<string, string>): void {
const path = I18N_BASE_PATH + lang + ".json";
const ewTranslationsPath = EW_I18N_BASE_PATH + lang + ".json";
const scTranslationsPath = SC_I18N_BASE_PATH + lang + ".json";
// XXX: Use a debounce because for some reason if we read the language
// file immediately after the FS event is received, the file contents
@ -110,14 +119,14 @@ function watchLanguage(lang: string, dest: string, langFileMap: Record<string, s
clearTimeout(makeLangDebouncer);
}
makeLangDebouncer = setTimeout(() => {
const [filename, json] = prepareLangFile(lang, dest);
const [filename, json] = prepareLangFile(lang);
genLangFile(dest, filename, json);
langFileMap[lang] = filename;
genLangList(langFileMap);
}, 500);
};
[path].forEach(function (f) {
[ewTranslationsPath, scTranslationsPath].forEach(function (f) {
chokidar
.watch(f, { ignoreInitial: true })
.on("ready", () => {
@ -132,7 +141,7 @@ function watchLanguage(lang: string, dest: string, langFileMap: Record<string, s
// language resources
const I18N_DEST = "webapp/i18n/";
const I18N_FILENAME_MAP = INCLUDE_LANGS.reduce<Record<string, string>>((m, l) => {
const [filename, json] = prepareLangFile(l, I18N_DEST);
const [filename, json] = prepareLangFile(l);
if (!watch) {
genLangFile(I18N_DEST, filename, json);
}

14
src/@types/i18n.d.ts vendored Normal file
View file

@ -0,0 +1,14 @@
/*
Copyright 2025 Element Creations Ltd.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
import { type TranslationKey as _TranslationKey } from "matrix-web-i18n";
import type Translations from "../i18n/strings/en_EN.json";
declare global {
type TranslationKey = _TranslationKey<typeof Translations>;
}

View file

@ -9,7 +9,7 @@ Please see LICENSE files in the repository root for full details.
*/
// Import i18n.tsx instead of languageHandler to avoid circular deps
import { _td, type TranslationKey } from "@element-hq/web-shared-components";
import { _td } from "@element-hq/web-shared-components";
import { IS_MAC, IS_ELECTRON, Key } from "../Keyboard";
import { type IBaseSetting } from "../settings/Settings";

View file

@ -12,7 +12,7 @@ import sanitizeHtml from "sanitize-html";
import classnames from "classnames";
import { logger } from "matrix-js-sdk/src/logger";
import { _t, type TranslationKey } from "../../languageHandler";
import { _t } from "../../languageHandler";
import dis from "../../dispatcher/dispatcher";
import { MatrixClientPeg } from "../../MatrixClientPeg";
import MatrixClientContext from "../../contexts/MatrixClientContext";

View file

@ -11,7 +11,7 @@ Please see LICENSE files in the repository root for full details.
import React, { type JSX } from "react";
import classNames from "classnames";
import { _t, type TranslationKey } from "../../languageHandler";
import { _t } from "../../languageHandler";
import AutoHideScrollbar from "./AutoHideScrollbar";
import { PosthogScreenTracker, type ScreenName } from "../../PosthogTrackers";
import { type NonEmptyArray } from "../../@types/common";

View file

@ -15,7 +15,7 @@ import { Action } from "../../../../dispatcher/actions";
import { asyncSome } from "../../../../utils/arrays";
import { getUserDeviceIds } from "../../../../utils/crypto/deviceInfo";
import { type RoomMember } from "../../../../models/rooms/RoomMember";
import { _t, _td, type TranslationKey } from "../../../../languageHandler";
import { _t, _td } from "../../../../languageHandler";
import { E2EStatus } from "../../../../utils/ShieldUtils";
interface MemberTileViewModelProps {

View file

@ -8,7 +8,7 @@ Please see LICENSE files in the repository root for full details.
import { useCallback, useEffect, useMemo, useState } from "react";
import { FilterKey } from "../../../stores/room-list-v3/skip-list/filters";
import { _t, _td, type TranslationKey } from "../../../languageHandler";
import { _t, _td } from "../../../languageHandler";
import RoomListStoreV3, {
LISTS_LOADED_EVENT,
LISTS_UPDATE_EVENT,

View file

@ -9,7 +9,7 @@ Please see LICENSE files in the repository root for full details.
import React, { type ComponentProps, PureComponent, type Ref } from "react";
import Field, { type IInputProps } from "../elements/Field";
import { _t, _td, type TranslationKey } from "../../../languageHandler";
import { _t, _td } from "../../../languageHandler";
import withValidation, { type IFieldState, type IValidationResult } from "../elements/Validation";
import * as Email from "../../../email";

View file

@ -10,7 +10,7 @@ import React, { type ComponentProps, PureComponent, type Ref } from "react";
import Field, { type IInputProps } from "../elements/Field";
import withValidation, { type IFieldState, type IValidationResult } from "../elements/Validation";
import { _t, _td, type TranslationKey } from "../../../languageHandler";
import { _t, _td } from "../../../languageHandler";
interface IProps extends Omit<IInputProps, "onValidate" | "label" | "element"> {
id?: string;

View file

@ -12,7 +12,7 @@ import classNames from "classnames";
import type { ZxcvbnResult } from "@zxcvbn-ts/core";
import SdkConfig from "../../../SdkConfig";
import withValidation, { type IFieldState, type IValidationResult } from "../elements/Validation";
import { _t, _td, type TranslationKey } from "../../../languageHandler";
import { _t, _td } from "../../../languageHandler";
import Field, { type IInputProps } from "../elements/Field";
import { MatrixClientPeg } from "../../../MatrixClientPeg";

View file

@ -11,7 +11,7 @@ import React, { useEffect, useState } from "react";
import MediaDeviceHandler, { MediaDeviceKindEnum } from "../../../MediaDeviceHandler";
import IconizedContextMenu, { IconizedContextMenuOptionList, IconizedContextMenuRadio } from "./IconizedContextMenu";
import { type IProps as IContextMenuProps } from "../../structures/ContextMenu";
import { _t, _td, type TranslationKey } from "../../../languageHandler";
import { _t, _td } from "../../../languageHandler";
const SECTION_NAMES: Record<MediaDeviceKindEnum, TranslationKey> = {
[MediaDeviceKindEnum.AudioInput]: _td("voip|input_devices"),

View file

@ -14,7 +14,7 @@ import { sleep } from "matrix-js-sdk/src/utils";
import { logger } from "matrix-js-sdk/src/logger";
import { ErrorIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
import { _t, _td, type TranslationKey } from "../../../languageHandler";
import { _t, _td } from "../../../languageHandler";
import BaseDialog from "./BaseDialog";
import Dropdown from "../elements/Dropdown";
import SearchBox from "../../structures/SearchBox";

View file

@ -10,7 +10,7 @@ Please see LICENSE files in the repository root for full details.
import React, { type JSX, useState } from "react";
import { Form } from "@vector-im/compound-web";
import { _t, _td, type TranslationKey } from "../../../languageHandler";
import { _t, _td } from "../../../languageHandler";
import MatrixClientContext from "../../../contexts/MatrixClientContext";
import BaseDialog from "./BaseDialog";
import { TimelineEventEditor } from "./devtools/Event";

View file

@ -9,7 +9,7 @@ Please see LICENSE files in the repository root for full details.
import React, { type ChangeEvent, createRef } from "react";
import Field from "../elements/Field";
import { _t, _td, type TranslationKey } from "../../../languageHandler";
import { _t, _td } from "../../../languageHandler";
import { type IFieldState, type IValidationResult } from "../elements/Validation";
import BaseDialog from "./BaseDialog";
import DialogButtons from "../elements/DialogButtons";

View file

@ -14,7 +14,7 @@ import BaseTool, { DevtoolsContext, type IDevtoolsProps } from "./BaseTool";
import MatrixClientContext from "../../../../contexts/MatrixClientContext";
import { EventEditor, EventViewer, eventTypeField, type IEditorProps, stringify } from "./Event";
import FilteredList from "./FilteredList";
import { _td, type TranslationKey } from "../../../../languageHandler";
import { _td } from "../../../../languageHandler";
export const AccountDataEventEditor: React.FC<IEditorProps> = ({ mxEvent, onBack }) => {
const cli = useContext(MatrixClientContext);

View file

@ -11,7 +11,7 @@ import React, { createContext, type ReactNode, useState } from "react";
import { type Room } from "matrix-js-sdk/src/matrix";
import classNames from "classnames";
import { _t, type TranslationKey } from "../../../../languageHandler";
import { _t } from "../../../../languageHandler";
import { type XOR } from "../../../../@types/common";
import { type Tool } from "../DevtoolsDialog";

View file

@ -10,7 +10,7 @@ Please see LICENSE files in the repository root for full details.
import React, { type ChangeEvent, type ReactNode, useContext, useMemo, useRef, useState } from "react";
import { type IContent, type MatrixEvent, type TimelineEvents } from "matrix-js-sdk/src/matrix";
import { _t, _td, type TranslationKey } from "../../../../languageHandler";
import { _t, _td } from "../../../../languageHandler";
import Field from "../../elements/Field";
import BaseTool, { DevtoolsContext, type IDevtoolsProps } from "./BaseTool";
import MatrixClientContext from "../../../../contexts/MatrixClientContext";

View file

@ -9,7 +9,7 @@ Please see LICENSE files in the repository root for full details.
import React from "react";
import classNames from "classnames";
import { _t, _td, type TranslationKey } from "../../../languageHandler";
import { _t, _td } from "../../../languageHandler";
import BaseDialog from "..//dialogs/BaseDialog";
import DialogButtons from "./DialogButtons";
import AccessibleButton from "./AccessibleButton";

View file

@ -12,7 +12,7 @@ import classNames from "classnames";
import { Tooltip } from "@vector-im/compound-web";
import { ErrorSolidIcon, ShieldIcon, LockSolidIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
import { _t, _td, type TranslationKey } from "../../../languageHandler";
import { _t, _td } from "../../../languageHandler";
import AccessibleButton from "../elements/AccessibleButton";
import { E2EStatus } from "../../../utils/ShieldUtils";

View file

@ -26,7 +26,7 @@ import { type ActionPayload } from "../../../dispatcher/payloads.ts";
import { type ViewRoomDeltaPayload } from "../../../dispatcher/payloads/ViewRoomDeltaPayload.ts";
import { type ViewRoomPayload } from "../../../dispatcher/payloads/ViewRoomPayload.ts";
import { useEventEmitterState } from "../../../hooks/useEventEmitter.ts";
import { _t, _td, type TranslationKey } from "../../../languageHandler.tsx";
import { _t, _td } from "../../../languageHandler.tsx";
import { MatrixClientPeg } from "../../../MatrixClientPeg.ts";
import PosthogTrackers from "../../../PosthogTrackers.ts";
import SettingsStore from "../../../settings/SettingsStore.ts";

View file

@ -13,7 +13,7 @@ import { ErrorSolidIcon } from "@vector-im/compound-design-tokens/assets/web/ico
import MatrixClientContext from "../../../contexts/MatrixClientContext";
import DMRoomMap from "../../../utils/DMRoomMap";
import { _t, _td, type TranslationKey } from "../../../languageHandler";
import { _t, _td } from "../../../languageHandler";
import AccessibleButton, { type ButtonEvent } from "../elements/AccessibleButton";
import MiniAvatarUploader, { AVATAR_SIZE } from "../elements/MiniAvatarUploader";
import RoomAvatar from "../avatars/RoomAvatar";

View file

@ -10,7 +10,7 @@ import { type Room, ClientEvent } from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import { type IWidget } from "matrix-widget-api";
import { _t, _td, type TranslationKey } from "../../../languageHandler";
import { _t, _td } from "../../../languageHandler";
import AppTile from "../elements/AppTile";
import { MatrixClientPeg } from "../../../MatrixClientPeg";
import dis from "../../../dispatcher/dispatcher";

View file

@ -14,7 +14,7 @@ import { Icon as UnknownDeviceIcon } from "../../../../../res/img/element-icons/
import { Icon as DesktopIcon } from "../../../../../res/img/element-icons/settings/desktop.svg";
import { Icon as WebIcon } from "../../../../../res/img/element-icons/settings/web.svg";
import { Icon as MobileIcon } from "../../../../../res/img/element-icons/settings/mobile.svg";
import { _t, _td, type TranslationKey } from "../../../../languageHandler";
import { _t, _td } from "../../../../languageHandler";
import { type ExtendedDevice } from "./types";
import { DeviceType } from "../../../../utils/device/parseUserAgent";

View file

@ -12,7 +12,7 @@ import { logger } from "matrix-js-sdk/src/logger";
import { throttle, get, set } from "lodash";
import { KnownMembership, type RoomPowerLevelsEventContent } from "matrix-js-sdk/src/types";
import { _t, _td, type TranslationKey } from "../../../../../languageHandler";
import { _t, _td } from "../../../../../languageHandler";
import AccessibleButton from "../../../elements/AccessibleButton";
import Modal from "../../../../../Modal";
import ErrorDialog from "../../../dialogs/ErrorDialog";

View file

@ -7,8 +7,6 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Com
Please see LICENSE files in the repository root for full details.
*/
import { type TranslationKey } from "../languageHandler";
export type Effect<TOptions extends { [key: string]: any }> = {
/**
* one or more emojis that will trigger this effect

View file

@ -103,9 +103,7 @@
"ok": "OK",
"open": "Otevřít",
"open_menu": "Otevřít nabídku",
"pause": "Pozastavit",
"pin": "Připnout",
"play": "Přehrát",
"proceed": "Pokračovat",
"quote": "Citovat",
"react": "Reagovat",
@ -3374,24 +3372,10 @@
"no_rooms_with_unread_threads": "Zatím nemáte místnosti s nepřečtenými vlákny."
},
"time": {
"about_day_ago": "před jedním dnem",
"about_hour_ago": "asi před hodinou",
"about_minute_ago": "před minutou",
"date_at_time": "%(date)s v %(time)s",
"few_seconds_ago": "před pár vteřinami",
"hours_minutes_seconds_left": "zbývá %(hours)sh %(minutes)sm %(seconds)ss",
"in_about_day": "asi za den",
"in_about_hour": "asi za hodinu",
"in_about_minute": "asi za minutu",
"in_few_seconds": "za pár vteřin",
"in_n_days": "za %(num)s dní",
"in_n_hours": "za %(num)s hodin",
"in_n_minutes": "za %(num)s minut",
"left": "%(timeRemaining)s zbývá",
"minutes_seconds_left": "zbývá %(minutes)sm %(seconds)ss",
"n_days_ago": "před %(num)s dny",
"n_hours_ago": "před %(num)s hodinami",
"n_minutes_ago": "před %(num)s minutami",
"seconds_left": "Zbývá %(seconds)ss",
"short_days": "%(value)sd",
"short_days_hours_minutes_seconds": "%(days)sd %(hours)sh %(minutes)sm %(seconds)ss",
@ -3446,11 +3430,9 @@
"unable_to_find": "Pokusili jste se načíst bod na časové ose místnosti, ale nepodařilo se ho najít."
},
"m.audio": {
"audio_player": "Audio přehrávač",
"error_downloading_audio": "Chyba při stahování audia",
"error_processing_audio": "Došlo k chybě při zpracovávání hlasové zprávy",
"error_processing_voice_message": "Chyba při zpracování hlasové zprávy",
"unnamed_audio": "Nepojmenovaný audio soubor"
"error_processing_voice_message": "Chyba při zpracování hlasové zprávy"
},
"m.beacon_info": {
"view_live_location": "Zobrazit polohu živě"

View file

@ -3,29 +3,9 @@
"emoji_picker": "Dewisydd Emoji",
"jump_first_invite": "Symud i'r gwahoddiad cyntaf.",
"message_composer": "Neges cyfansoddwr",
"n_unread_messages": {
"%(count)s neges heb eu darllen": "other",
"1 neges heb ei darllen": "one"
},
"n_unread_messages_mentions": {
"%(count)s crybwylliadau heb eu darllen": "zero",
"1 crybwylliad heb ei ddarllen": "one",
"%(count)s grybwylliad heb eu darllen": "two",
"%(count)s crybwylliad heb eu darllen": "other"
},
"recent_rooms": "Ystafelloedd diweddar",
"room_messsage_not_sent": "Agor ystafell %(roomName)s gyda neges heb ei gosod.",
"room_n_unread_invite": "Agor gwahoddiad i ystafell %(roomName)s.",
"room_n_unread_messages": {
"Ystafell agored%(roomName)s gyda %(count)s negeseuon heb eu darllen.": "zero",
"Ystafell agored %(roomName)s gydag 1 neges heb ei darllen.": "one",
"Ystafell agored%(roomName)s gyda %(count)s neges heb eu darllen.": "other"
},
"room_n_unread_messages_mentions": {
"Ystafell agored %(roomName)s gyda %(count)s negeseuon heb eu darllen gan gynnwys crybwylliadau.": "zero",
"Ystafell agored %(roomName)s gydag 1 crybwylliad heb ei ddarllen.": "one",
"Ystafell agored %(roomName)s gyda %(count)s neges heb eu darllen gan gynnwys crybwylliadau.": "other"
},
"room_name": "Ystafell %(matere)s",
"room_status_bar": "Bar statws ystafell",
"seek_bar_label": "Bar chwilio sain",
@ -104,9 +84,7 @@
"ok": "Iawn",
"open": "Agor",
"open_menu": "Agor dewislen",
"pause": "Oedi",
"pin": "Pinio",
"play": "Chwarae",
"proceed": "Parhau",
"quote": "Dyfyniad",
"react": "Ymateb",
@ -474,11 +452,6 @@
"advanced": "Uwch",
"all_chats": "Pob Sgwrs",
"analytics": "Dadansoddi Gwe",
"and_n_others": {
"a dim arall...": "zero",
"ac un arall...": "one",
"a %(count)s arall...": "other"
},
"appearance": "Gwedd",
"application": "Rhaglen",
"are_you_sure": "Ydych chi'n siŵr?",
@ -533,14 +506,6 @@
"moderation_and_safety": "Cymedroli a diogelwch",
"modern": "Modern",
"mute": "Tewi",
"n_members": {
"%(count)s aelodau": "zero",
"%(count)s aelod": "other"
},
"n_rooms": {
"%(count)s ystafelloedd": "zero",
"%(count)s ystafell": "other"
},
"name": "Enw",
"no_results": "Dim canlyniadau",
"no_results_found": "Heb ganfod canlyniad",
@ -851,10 +816,6 @@
"room_notifications_total": "Cyfanswm: ",
"room_notifications_type": "Math: ",
"room_status": "Statws ystafell",
"room_unread_status_count": {
"Statws heb eu darllen yn yr ystafell:<strong>%(status)s</strong> , cyfrif:<strong>%(count)s</strong>": "other",
"Statws heb ei ddarllen yn yr ystafell:<strong>%(status)s</strong> , cyfrif:<strong>%(count)s</strong>": "one"
},
"save_setting_values": "Cadw gwerthoedd gosod",
"see_history": "Gweld hanes",
"send_custom_account_data_event": "Anfon digwyddiad data cyfrif personol",
@ -874,12 +835,6 @@
"settings_explorer": "Archwiliwr gosodiadau",
"show_empty_content_events": "Dangos digwyddiadau gyda chynnwys gwag",
"show_hidden_events": "Dangos digwyddiadau cudd yn y llinell amser",
"spaces": {
"<%(count) s gofodau>": "zero",
"<space>": "one",
"<%(count) s ofod>": "two",
"<%(count) s gofod>": "other"
},
"state_key": "Allwedd Cyflwr",
"thread_root_id": "ID Gwraidd Edefyn: %(threadRootId)s",
"threads_timeline": "Llinell amser edafedd",
@ -1187,28 +1142,7 @@
"error_fetching_file": "Gwall wrth nôl ffeil",
"export_info": "Dyma ddechrau allforio o<roomName/>. Wedi'i allforio gan<exporterDetails/> yn %(exportDate)s.",
"export_successful": "Allforio yn llwyddiannus!",
"exported_n_events_in_time": {
"Wedi nôl %(count)s digwyddiadau o fewn %(seconds)s e": "zero",
"Wedi allforio %(count)s digwyddiad o fewn %(seconds)s e": "one",
"Wedi nôl %(count)s ddigwyddiad o fewn %(seconds)s e": "two",
"Wedi nôl %(count)s digwyddiad o fewn %(seconds)s e": "other"
},
"exporting_your_data": "Allforio eich data",
"fetched_n_events": {
"Wedi nôl %(count)s digwyddiadau hyd yn hyn": "zero",
"Wedi nôl %(count)s digwyddiad hyd yn hyn": "other",
"Wedi nôl %(count)s ddigwyddiad hyd yn hyn": "two"
},
"fetched_n_events_in_time": {
"Wedi nôl %(count)s digwyddiadau o fewn %(seconds)s e": "zero",
"Wedi nôl %(count)s digwyddiad o fewn %(seconds)s e": "other",
"Wedi nôl %(count)s ddigwyddiad o fewn %(seconds)s e": "two"
},
"fetched_n_events_with_total": {
"Wedi nôl %(count)s digwyddiadau allan o %(total)s": "zero",
"Wedi nôl %(count)s digwyddiad allan o %(total)s": "other",
"Wedi nôl %(count)s ddigwyddiad allan o %(total)s": "two"
},
"fetching_events": "Wrthi'n nôl digwyddiadau…",
"file_attached": "Ffeil wedi'i Atodi",
"format": "Fformat",
@ -1297,11 +1231,6 @@
},
"in_space": "Yn %(spaceName)s.",
"in_space1_and_space2": "Mewn gofodau %(space1Name)s a %(space2Name)s.",
"in_space_and_n_other_spaces": {
"Yn %(spaceName)s a %(count)s gofodau eraill.": "zero",
"Yn %(spaceName)s ac un gofod arall": "one",
"Yn %(spaceName)s a %(count)s gofod arall.": "other"
},
"incompatible_browser": {
"continue": "Parhau beth bynnag",
"description": "Mae %(brand)s yn defnyddio rhai nodweddion porwr nad ydyn nhw ar gael yn eich porwr presennol. %(detail)s",
@ -1395,15 +1324,6 @@
"unban_first_title": "Nid oes modd gwahodd defnyddiwr nes ei fod heb ei ddad-wahardd"
},
"inviting_user1_and_user2": "Yn gwahodd %(user1)s a %(user2)s",
"inviting_user_and_n_others": {
"Yn gwahodd %(user)s ac un arall": "one",
"Yn gwahodd %(user)s a %(count)s arall": "other"
},
"items_and_n_others": {
"<Items/> a dim arall": "zero",
"<Items/> ac un arall": "one",
"<Items/> a %(count)s arall": "other"
},
"keyboard": {
"activate_button": "Agor y botwm hwn",
"alt": "Alt",
@ -1659,10 +1579,6 @@
"toggle_attribution": "Toglo priodoli"
},
"member_list": {
"count": {
"%(count)s Aelodau": "zero",
"%(count)s Aelod": "other"
},
"filter_placeholder": "Hidlo aelodau'r ystafell",
"invite_button_no_perms_tooltip": "Nid oes gennych ganiatâd i wahodd defnyddwyr",
"invited_label": "Gwahoddwyd",
@ -1753,13 +1669,6 @@
"topic_label": "Cwestiwn neu bwnc",
"topic_placeholder": "Ysgrifennu rhywbeth…",
"total_decryption_errors": "Oherwydd gwallau dadgryptio, efallai na fydd rhai pleidleisiau'n cael eu cyfrif",
"total_n_votes": {
"%(count)s pleidlais wedi'u bwrw. Pleidleisiwch i weld y canlyniadau.": "other",
"%(count)s pleidlais wedi'i bwrw. Pleidleisiwch i weld y canlyniadau.": "one"
},
"total_n_votes_voted": {
"Ar sail %(count)s pleidlais": "other"
},
"total_no_votes": "Dim pleidleisiau wedi'u bwrw",
"total_not_ended": "Bydd y canlyniadau i'w gweld pan ddaw'r bleidlais i ben",
"type_closed": "Arolwg wedi'i chau",
@ -1870,13 +1779,6 @@
"pinned_messages": {
"empty_description": "Dewiswch neges a dewiswch “%(pinAction)s” i'w chynnwys yma.",
"empty_title": "Pinio negeseuon pwysig fel y mae modd eu darganfod yn hawdd",
"header": {
"%(count)s Neges wedi'u pinio": "other",
"1 Neges wedi'i binio": "one"
},
"limits": {
"Dim ond hyd at %(count)s teclyn y gallwch eu pinio": "other"
},
"menu": "Agor dewislen",
"reply_thread": "Ymateb i a <link>neges edefyn</link>",
"unpin_all": {
@ -1891,26 +1793,8 @@
"active_heading": "Arolygon gweithredol",
"empty_active": "Nid oes unrhyw arolygon gweithredol yn yr ystafell hon",
"empty_active_load_more": "Nid oes unrhyw arolygon gweithredol. Llwythwch fwy o arolygon barn y misoedd blaenorol",
"empty_active_load_more_n_days": {
"Does dim polau gweithredol ar gyfer y dyddiau diwethaf. Llwythwch ragor o bolau i weld polau'r misoedd blaenorol": "zero",
"Does dim polau gweithredol ar gyfer y diwrnod diwethaf. Llwythwch ragor o bolau i weld polau'r misoedd blaenorol": "one",
"Does dim polau gweithredol ar gyfer y %(count)s ddiwrnod diwethaf. Llwythwch ragor o bolau i weld polau'r misoedd blaenorol": "two",
"Does dim polau gweithredol ar gyfer y %(count)s diwrnod diwethaf. Llwythwch ragor o bolau i weld polau'r misoedd blaenorol": "other"
},
"empty_past": "Nid oes arolygon o'r gorffennol yn yr ystafell hon",
"empty_past_load_more": "Nid oes unrhyw arolygon o'r gorffennol. Llwythwch fwy o arolygon barn ar gyfer y misoedd blaenorol",
"empty_past_load_more_n_days": {
"Does dim polau'r gorffennol ar gyfer y dyddiau diwethaf. Llwythwch ragor o bolau i weld polau'r misoedd blaenorol": "zero",
"Does dim polau'r gorffennol ar gyfer y diwrnod diwethaf. Llwythwch ragor o bolau i weld polau'r misoedd blaenorol": "one",
"Does dim polau'r gorffennol ar gyfer y %(count)s ddiwrnod diwethaf. Llwythwch ragor o bolau i weld polau'r misoedd blaenorol": "two",
"Does dim polau'r gorffennol ar gyfer y %(count)s diwrnod diwethaf. Llwythwch ragor o bolau i weld polau'r misoedd blaenorol": "other"
},
"final_result": {
"Canlyniadau terfynol yn seiliedig ar %(count)s pleidleisiau": "zero",
"Canlyniadau terfynol yn seiliedig ar %(count)s pleidlais": "other",
"Canlyniadau terfynol yn seiliedig ar %(count)s bleidlais": "two",
"Canlyniadau terfynol yn seiliedig ar %(count)s phleidlais": "many"
},
"load_more": "Llwytho mwy o arolygon barn",
"loading": "Wrthi'n llwytho arolygon",
"past_heading": "Arolygon y gorffennol",
@ -1975,15 +1859,6 @@
"error_jump_to_date_not_found": "Nid oeddem yn gallu dod o hyd i ddigwyddiad yn edrych ymlaen o %(dateString)s. Ceisiwch ddewis dyddiad cynharach.",
"error_jump_to_date_send_logs_prompt": "Cyflwynwch <debugLogsLink>logiau dadfygio</debugLogsLink> i'n helpu i ddod o hyd i'r broblem.",
"error_jump_to_date_title": "Methu dod o hyd i ddigwyddiad ar y dyddiad hwnnw",
"face_pile_summary": {
"Y %(count)s personau rydych chi'n ei adnabod sydd eisoes wedi ymuno": "zero",
"Yr %(count)s person rydych chi'n ei adnabod sydd eisoes wedi ymuno": "one",
"Y %(count)s person rydych chi'n ei adnabod sydd eisoes wedi ymuno": "other"
},
"face_pile_tooltip_label": {
"Gweld y cyfan o'r %(count)s aelod": "other",
"Gweld 1 aelod": "one"
},
"face_pile_tooltip_shortcut": "Gan gynnwys %(commaSeparatedMembers)s",
"face_pile_tooltip_shortcut_joined": "Gan eich cynnwys chi, %(commaSeparatedMembers)s",
"failed_determine_user": "Nid oes modd pennu pa ddefnyddiwr i'w anwybyddu gan fod y digwyddiad aelod wedi newid.",
@ -1991,11 +1866,6 @@
"forget_room": "Anghofiwch yr ystafell hon",
"forget_space": "Anghofiwch y gofod hwn",
"header": {
"n_people_asking_to_join": {
"%(count)s personau'n gofyn i ymuno": "zero",
"Yn gofyn i ymuno": "one",
"%(count)s person yn gofyn i ymuno": "other"
},
"room_is_public": "Mae'r ystafell hon yn gyhoeddus"
},
"header_avatar_open_settings_label": "Agor gosodiadau ystafell",
@ -2085,10 +1955,6 @@
"search": {
"all_rooms_button": "Chwiliwch bob ystafell",
"placeholder": "Chwilio negeseuon…",
"summary": {
"%(count)s canlyniad wedi'u canfod ar gyfer “<query/>\"": "other",
"1 canlyniad wedi'i ganfod ar gyfer “<query/>\"": "one"
},
"this_room_button": "Chwiliwch yr ystafell hon"
},
"status_bar": {
@ -2104,11 +1970,6 @@
"some_messages_not_sent": "Nid yw rhai o'ch negeseuon wedi'u hanfon"
},
"unknown_status_code_for_timeline_jump": "cod statws anhysbys",
"unread_notifications_predecessor": {
"Does gennych %(count)s hysbysiad heb eu darllen mewn fersiwn flaenorol o'r ystafell hon": "zero",
"Mae gennych %(count)s hysbysiad heb ei ddarllen mewn fersiwn flaenorol o'r ystafell hon.": "one",
"Mae gennych %(count)s hysbysiad heb eu darllen mewn fersiwn flaenorol o'r ystafell hon": "other"
},
"upgrade_error_description": "Gwiriwch ddwywaith bod eich gweinydd yn cefnogi'r fersiwn ystafell a ddewiswyd a rhowch gynnig arall arni.",
"upgrade_error_title": "Gwall wrth uwchraddio'r ystafell",
"upgrade_warning_bar": "Bydd uwchraddio'r ystafell hon yn cau enghraifft bresennol yr ystafell ac yn creu ystafell wedi'i huwchraddio gyda'r un enw.",
@ -2116,9 +1977,6 @@
"upgrade_warning_bar_unstable": "Mae'r ystafell hon yn fersiwn ystafell redeg<roomVersion /> , y mae'r gweinydd cartref hwn wedi'i nodi'n <i>ansefydlog</i>.",
"upgrade_warning_bar_upgraded": "Mae'r ystafell hon eisoes wedi'i huwchraddio.",
"upload": {
"uploading_multiple_file": {
"Wrthi'n llwytho i fyny %(filename)s a %(count)s arall": "other"
},
"uploading_single_file": "Wrthi'n llwytho %(filematere)s"
},
"video_room": "Mae'r ystafell hon yn ystafell fideo",
@ -2163,9 +2021,6 @@
},
"home_menu_label": "Dewisiadau cartref",
"join_public_room_label": "Ymuno â'r ystafell gyhoeddus",
"joining_rooms_status": {
"Yn ymuno â %(count)s ystafell ar hyn o bryd": "other"
},
"list_title": "Rhestr ystafelloedd",
"more_options": {
"copy_link": "Copïo dolen ystafell",
@ -2187,9 +2042,6 @@
},
"room_options": "Dewisiadau Ystafelloedd",
"show_less": "Dangos llai",
"show_n_more": {
"Dangos %(count)s yn rhagor": "other"
},
"show_previews": "Dangos rhagolwg o negeseuon",
"sort": "Trefnu",
"sort_by": "Trefnu yn ôl",
@ -2412,25 +2264,10 @@
"join_rule_restricted_dialog_heading_space": "Gofodau rydych yn eu hadnabod sy'n cynnwys y gofod hwn",
"join_rule_restricted_dialog_heading_unknown": "Mae'r rhain yn debygol o fod yn rhai y mae gweinyddwyr ystafell eraill yn rhan ohonyn nhw.",
"join_rule_restricted_dialog_title": "Dewiswch ofodau",
"join_rule_restricted_n_more": {
"a %(count)s yn rhagor": "other"
},
"join_rule_restricted_summary": {
"Ar hyn o bryd, mae gan %(count)s gofod fynediad": "other",
"Ar hyn o bryd, mae gan ofod fynediad": "one"
},
"join_rule_restricted_upgrade_description": "Bydd yr uwchraddiad hwn yn caniatáu i aelodau o ofodau penodol gael mynediad i'r ystafell hon heb wahoddiad.",
"join_rule_restricted_upgrade_warning": "Mae'r ystafell hon mewn rhai gofodau nad ydych chi'n weinyddwr iddynt. Yn y gofodau hynny, bydd yr hen ystafell yn dal i gael ei dangos, ond bydd pobl yn cael eu hannog i ymuno â'r un newydd.",
"join_rule_upgrade_awaiting_room": "Wrthi'n llwytho ystafell newydd",
"join_rule_upgrade_required": "Angen uwchraddio",
"join_rule_upgrade_sending_invites": {
"Yn anfon gwahoddiad... (%(progress)s o %(count)s)": "other",
"Yn anfon gwahoddiad...": "one"
},
"join_rule_upgrade_updating_spaces": {
"Yn diweddaru gofod... (%(progress)s o %(count)s)": "other",
"Yn diweddaru gofod...": "one"
},
"join_rule_upgrade_upgrading_room": "Ystafell uwchraddio",
"join_rule_world_readable_description": "Bydd newid pwy all ymuno â'r ystafell yn newid gwelededd negeseuon yn y dyfodol hefyd.",
"public_without_alias_warning": "I gysylltu â'r ystafell hon, ychwanegwch gyfeiriad.",
@ -2891,9 +2728,6 @@
"key_backup_algorithm": "Algorithm:",
"message_search_disable_warning": "Os yw wedi'i analluogi, ni fydd negeseuon o ystafelloedd wedi'u hamgryptio yn ymddangos yn y canlyniadau chwilio.",
"message_search_disabled": "Cadwch negeseuon wedi'u hamgryptio'n ddiogel yn lleol er mwyn iddyn nhw ymddangos yn y canlyniadau chwilio.",
"message_search_enabled": {
"Cadw negeseuon wedi'u hamgryptio yn ddiogel yn y storfa leol er mwyn iddyn nhw ymddangos mewn canlyniadau chwilio, gan ddefnyddio %(size)s i storio negeseuon o %(rooms)s ystafell.": "other"
},
"message_search_failed": "Methwyd cychwyn chwiliad neges",
"message_search_indexed_messages": "Negeseuon wedi'u mynegeio:",
"message_search_indexed_rooms": "Ystafelloedd wedi'u mynegeio:",
@ -2916,22 +2750,6 @@
"sessions": {
"best_security_note": "Er mwyn sicrhau'r diogelwch gorau, gwiriwch eich sesiynau ac allgofnodwch o unrhyw sesiwn nad ydych yn ei hadnabod nac yn ei defnyddio mwyach.",
"browser": "Porwr",
"confirm_sign_out": {
"Cadarnhau allgofnodi o'r ddyfeisiau hyn": "other",
"Cadarnhau allgofnodi o'r ddyfais hon": "one"
},
"confirm_sign_out_body": {
"Cliciwch y botwm isod i gadarnhau allgofnodi o'r dyfeisiau hyn.": "other",
"Cliciwch y botwm isod i gadarnhau allgofnodi o'r ddyfais hon.": "one"
},
"confirm_sign_out_continue": {
"Allgofnodi o ddyfeisiau": "other",
"Allgofnodi o ddyfais": "one"
},
"confirm_sign_out_sso": {
"Cadarnhau allgofnodi o'r ddyfeisiau hyn trwy ddefnyddio Mewngofnodi Sengl i brofi pwy ydych chi.": "other",
"Cadarnhau allgofnodi o'r ddyfais hon trwy ddefnyddio Mewngofnodi Sengl i brofi pwy ydych chi.": "one"
},
"current_session": "Y sesiwn gyfredol",
"desktop_session": "Sesiwn bwrdd gwaith",
"details_heading": "Manylion y sesiwn",
@ -2958,10 +2776,6 @@
"last_activity": "Gweithgaredd ddiwethaf",
"manage": "Rheoli'r sesiwn hon",
"mobile_session": "Sesiwn symudol",
"n_sessions_selected": {
"%(count)s sesiwn wedi'u dewis": "other",
"%(count)s sesiwn wedi'i ddewis": "one"
},
"no_inactive_sessions": "Heb ganfod unrhyw sesiynau anweithredol.",
"no_sessions": "Heb ganfod sesiynau.",
"no_unverified_sessions": "Heb ganfod unrhyw sesiynau heb eu gwirio.",
@ -2986,12 +2800,6 @@
"sign_in_with_qr_unsupported": "Nid yw'n cael ei gefnogi gan ddarparwr eich cyfrif",
"sign_out": "Allgofnodwch o'r sesiwn hon",
"sign_out_all_other_sessions": "Allgofnodi o bob sesiwn arall (%(otherSessionsCount)s)",
"sign_out_confirm_description": {
"Ydych chi'n siŵr eich bod chi eisiau allgofnodi o %(count)s sesiwn?": "other"
},
"sign_out_n_sessions": {
"Allgofnodi o %(count)s sesiwn": "other"
},
"title": "Sesiynau",
"unknown_session": "Math o sesiwn anhysbys",
"unverified_session": "Sesiwn heb ei wirio",
@ -3175,10 +2983,6 @@
"create_prompt": "Creu ystafell newydd",
"dm_heading": "Negeseuon Uniongyrchol",
"error_heading": "Ni ychwanegwyd pob un a ddewiswyd",
"progress_text": {
"Yn ychwanegu ystafell...(%(progress)s o %(count)s)": "other",
"Yn ychwanegu ystafell...": "one"
},
"space_dropdown_label": "Dewis gofod",
"space_dropdown_title": "Ychwanegu ystafelloedd presennol",
"subspace_moved_note": "Mae ychwanegu gofodau wedi symud."
@ -3261,9 +3065,6 @@
"cant_find_person_helpful_hint": "Os na allwch weld pwy rydych yn chwilio amdano, anfonwch eich dolen wahoddiad atynt.",
"cant_find_room_helpful_hint": "Os na allwch ddod o hyd i'r ystafell yr ydych yn chwilio amdani, gofynnwch am wahoddiad neu crëwch ystafell newydd.",
"copy_link_text": "Copïo dolen y gwahoddiad",
"count_of_members": {
"%(count)s Aelod": "other"
},
"create_new_room_button": "Creu ystafell newydd",
"failed_querying_public_rooms": "Wedi methu â holi ystafelloedd cyhoeddus",
"failed_querying_public_spaces": "Wedi methu cwestiynu gofodau cyhoeddus",
@ -3314,9 +3115,6 @@
"threads": {
"all_threads": "Pob edefyn",
"all_threads_description": "Yn dangos pob edefyn o'r ystafell gyfredol",
"count_of_reply": {
"%(count)s ateb": "other"
},
"empty_description": "Defnyddio “%(replyInThread)s” wrth hofran dros neges.",
"empty_title": "Mae edafedd yn helpu i gadw'ch sgyrsiau ar y pwnc ac yn hawdd eu holrhain.",
"error_start_thread_existing_relation": "Methu â chreu edefyn o ddigwyddiad gyda pherthynas sy'n bodoli eisoes",
@ -3332,24 +3130,10 @@
"no_rooms_with_unread_threads": "Nid oes gennych chi ystafelloedd ag edafedd heb eu darllen eto."
},
"time": {
"about_day_ago": "tua diwrnod yn ôl",
"about_hour_ago": "tua awr yn ol",
"about_minute_ago": "tua munud yn ôl",
"date_at_time": "%(date)s am %(time)s",
"few_seconds_ago": "ychydig eiliadau yn ôl",
"hours_minutes_seconds_left": "%(hours)sa %(minutes)sm %(seconds)s ar ôl",
"in_about_day": "tua diwrnod o nawr",
"in_about_hour": "tuag awr o hyn",
"in_about_minute": "tua munud o nawr",
"in_few_seconds": "ychydig eiliadau o nawr",
"in_n_days": "%(num)s diwrnod o nawr",
"in_n_hours": "%(num)s awr o nawr",
"in_n_minutes": "%(num)s munud o nawr",
"left": "%(timeRemaining)s ar ôl",
"minutes_seconds_left": "%(minutes)sm %(seconds)ss ar ôl",
"n_days_ago": "%(num)s diwrnod yn ôl",
"n_hours_ago": "%(num)s awr yn ôl",
"n_minutes_ago": "%(num)s munud yn ôl",
"seconds_left": "Mae %(seconds)s ar ôl",
"short_days": "%(value)sch",
"short_days_hours_minutes_seconds": "%(days)sd %(hours)sa %(minutes)sm %(seconds)ss",
@ -3404,11 +3188,9 @@
"unable_to_find": "Wedi ceisio llwytho pwynt penodol yn llinell amser yr ystafell hon, ond ni lwyddodd i ddod o hyd iddo."
},
"m.audio": {
"audio_player": "Chwaraewr sain",
"error_downloading_audio": "Gwall wrth llwytho i lawrsain",
"error_processing_audio": "Gwall wrth brosesu neges sain",
"error_processing_voice_message": "Gwall wrth brosesu neges llais",
"unnamed_audio": "Sain dienw"
"error_processing_voice_message": "Gwall wrth brosesu neges llais"
},
"m.beacon_info": {
"view_live_location": "Gweld lleoliad byw"
@ -3459,11 +3241,6 @@
"location": "Wedi rhannu lleoliad: ",
"self_location": "Wedi rhannu eu lleoliad: "
},
"m.poll": {
"count_of_votes": {
"%(count)s pleidlais": "other"
}
},
"m.poll.end": {
"sender_ended": "Mae %(senderName)s wedi dod ag arolwg i ben"
},
@ -3475,14 +3252,6 @@
"removed": "Mae %(senderDisplayName)s wedi tynnu afatar yr ystafell."
},
"m.room.canonical_alias": {
"alt_added": {
"Mae %(senderName)s wedi ychwanegu cyfeiriadau eraill %(addresses)s ar gyfer yr ystafell hon.": "other",
"Mae %(senderName)s wedi ychwanegu cyfeiriad arall %(addresses)s ar gyfer yr ystafell hon.": "one"
},
"alt_removed": {
"Mae %(senderName)s wedi tynnu cyfeiriadau eraill %(addresses)s ar gyfer yr ystafell hon.": "other",
"Mae %(senderName)s wedi tynnu cyfeiriad arall %(addresses)s ar gyfer yr ystafell hon.": "one"
},
"changed": "Newidiodd %(senderName)s y cyfeiriadau ar gyfer yr ystafell hon.",
"changed_alternative": "Mae %(senderName)s wedi newid y cyfeiriadau amgen ar gyfer yr ystafell hon.",
"changed_main_and_alternative": "Newidiodd %(senderName)s y prif gyfeiriadau a chyfeiriadau amgen ar gyfer yr ystafell hon.",
@ -3634,9 +3403,6 @@
"label": "Ymatebodd %(reactors)s gyda %(content)s",
"tooltip_caption": "wedi ymateb gyda %(shortName)s"
},
"read_receipt_title": {
"Wedi'i weld gan %(count)s person": "other"
},
"read_receipts_label": "Derbynebau darllen",
"redacted": {
"tooltip": "Neges wedi'i dileu ar %(date)s"
@ -3657,173 +3423,18 @@
"send_state_sending": "Wrthi'n anfon eich neges…",
"send_state_sent": "Anfonwyd eich neges",
"summary": {
"banned": {
"wedi'u gwahardd": "zero",
"wedi'i wahardd": "one",
"wedi&#39;u gwahardd %(count)s gwaith": "other"
},
"banned_multiple": {
"wedi&#39;u gwahardd": "zero",
"wedi'i wahardd": "one",
"wedi&#39;u gwahardd %(count)s gwaith": "other"
},
"changed_avatar": {
"Does %(count)s %(oneUser)s wedi newid eu llun proffil": "zero",
"Mae %(oneUser)s wedi newid eu llun proffil %(count)s gwaith": "other"
},
"changed_avatar_multiple": {
"Does %(count)s o %(severalUsers)s wedi newid eu llun proffil": "zero",
"Mae %(severalUsers)s wedi newid ei lun proffil": "one",
"Mae %(severalUsers)s wedi newid eu llun proffil %(count)s gwaith": "other"
},
"changed_name": {
"Mae %(oneUser)s wedi newid ei enw %(count)s gwaith": "other",
"Mae %(oneUser)s wedi newid ei enw": "one"
},
"changed_name_multiple": {
"Mae %(severalUsers)s wedi newid eu henwau %(count)s gwaith": "other",
"Mae %(severalUsers)s wedi newid ei enw": "one"
},
"format": "%(matereList)s %(transitionList)s",
"hidden_event": {
"Anfonodd %(oneUser)s %(count)s negeseuon cudd": "zero",
"Anfonodd %(oneUser)s neges gudd": "one",
"Anfonodd %(oneUser)s %(count)s neges gudd": "other"
},
"hidden_event_multiple": {
"Anfonodd %(severalUsers)s %(count)s negeseuon cudd ": "zero",
"Anfonodd %(severalUsers)s neges gudd": "one",
"Anfonodd %(severalUsers)s %(count)s neges gudd": "other"
},
"invite_withdrawn": {
"Mae %(oneUser)swedi cael eu gwahoddiadau wedi&#39;i dynnu&#39;n ôl": "zero",
"Mae %(oneUser)swedi cael ei gwahoddiad wedi&#39;i dynnu&#39;n ôl": "one",
"Mae %(oneUser)swedi cael eu gwahoddiad wedi&#39;i dynnu&#39;n ôl %(count)s gwaith": "other"
},
"invite_withdrawn_multiple": {
"Cafodd %(severalUsers)s eu gwahoddiadau eu dileu": "one",
"Cafodd %(severalUsers)s eu gwahoddiadau eu dileu %(count)s gwaith": "other"
},
"invited": {
"wedi'u gwahodd": "zero",
"wedi'i wahodd": "one",
"wedi'u gwahodd %(count)s gwaith": "other"
},
"invited_multiple": {
"wedi'u gwahodd": "zero",
"wedi'i wahodd": "one",
"wedi'u gwahodd %(count)s gwaith": "other"
},
"joined": {
"Ymunodd %(oneUser)s %(count)s gwaith": "other",
"Ymunodd %(oneUser)s": "one"
},
"joined_and_left": {
"Ymunodd a gadawodd %(oneUser)s %(count)s gwaith": "other"
},
"joined_and_left_multiple": {
"Ymunodd a gadawodd %(severalUsers)s": "one",
"Ymunodd a gadawodd %(severalUsers)s %(count)s gwaith": "other"
},
"joined_multiple": {
"Ymunodd %(severalUsers)s": "zero",
"Ymunodd %(severalUsers)s %(count)s gwaith": "other"
},
"kicked": {
"wedi'u tynnu %(count)s gwaith": "other",
"wedi'u tynnu": "one"
},
"kicked_multiple": {
"wedi'u tynnu %(count)s gwaith": "other",
"wedi'u tynnu": "one"
},
"left": {
"Gadawodd %(oneUser)s": "one",
"Gadawodd %(oneUser)s %(count)s gwaith": "other"
},
"left_multiple": {
"Gadawodd %(severalUsers)s": "one",
"Gadawodd %(severalUsers)s %(count)s gwaith": "other"
},
"no_change": {
"Dyw %(oneUser)s heb wneud unrhyw newidiadau %(count)s gwaith": "other",
"Dyw %(oneUser)s heb wneud unrhyw newidiadau": "one"
},
"no_change_multiple": {
"Dyw %(severalUsers)s heb wneud unrhyw newidiadau %(count)s gwaith": "other",
"Dyw %(severalUsers)s heb wneud unrhyw newidiadau": "one"
},
"pinned_events": {
"Newidiodd %(oneUser)s y <a>negeseuon wedi'u pinio</a> yr ystafell %(count)s gwaith": "other",
"Newidiodd %(oneUser)s y <a>negeseuon wedi'u pinio</a> yr ystafell": "one"
},
"pinned_events_multiple": {
"Newidiodd %(severalUsers)s y <a>negeseuon wedi'u pinio</a> yr ystafell %(count)s gwaith": "other",
"Newidiodd %(severalUsers)s y <a>negeseuon wedi'u pinio</a> yr ystafell": "one"
},
"redacted": {
"Tynnodd %(oneUser)s %(count)s neges": "other",
"Tynnodd %(oneUser)s neges": "one"
},
"redacted_multiple": {
"Tynnodd %(severalUsers)s %(count)s neges": "other",
"Tynnodd %(severalUsers)s neges": "one"
},
"rejected_invite": {
"Gwrthododd %(severalUsers)s eu gwahoddiadau": "zero",
"Gwrthododd %(oneUser)s ei wahoddiad": "one",
"Gwrthododd %(oneUser)s eu gwahoddiadau %(count)s gwaith": "other"
},
"rejected_invite_multiple": {
"Gwrthododd %(severalUsers)s eu gwahoddiadau": "one",
"Gwrthododd %(severalUsers)s eu gwahoddiadau %(count)s gwaith": "other"
},
"rejoined": {
"Ymunodd a gadawodd %(oneUser)s": "one",
"Ymunodd a gadawodd %(oneUser)s %(count)s gwaith": "other"
},
"rejoined_multiple": {
"Ymunodd a gadawodd %(severalUsers)s": "one",
"Ymunodd a gadawodd %(severalUsers)s %(count)s gwaith": "other"
},
"server_acls": {
"Mae %(oneUser)s wedi newid ACLs y gweinydd %(count)s gwaith": "other",
"Mae %(oneUser)s wedi newid ACLs y gweinydd": "one"
},
"server_acls_multiple": {
"Mae %(severalUsers)s wedi newid ACLs y gweinydd %(count)s gwaith": "other",
"Mae %(severalUsers)s wedi newid ACLs y gweinydd": "one"
},
"unbanned": {
"wedi'u dadwahardd %(count)s gwaith": "other",
"wedi'u dadwahardd": "one"
},
"unbanned_multiple": {
"wedi'u dadwahardd %(count)s gwaith\n ": "zero",
"wedi'i ddadwahardd": "one",
"wedi'u dadwahardd %(count)s gwaith": "other"
}
"format": "%(matereList)s %(transitionList)s"
},
"thread_info_basic": "O edefyn",
"typing_indicator": {
"more_users": {
"Mae %(names)s ac mae %(count)s eraill yn teipio...": "other",
"Mae %(names)s ac mae un arall yn teipio...": "one"
},
"one_user": "Mae %(displayName)s yn teipio…",
"two_users": "Mae %(materes)s a %(lastPerson)s yn teipio…"
},
"undecryptable_tooltip": "Nid oedd modd dadgryptio'r neges hon",
"url_preview": {
"close": "Cau rhagolwg",
"show_n_more": {
"Dangos %(count)s rhagolwg arall": "other"
}
"close": "Cau rhagolwg"
}
},
"truncated_list_n_more": {
"A %(count)s yn rhagor...": "other"
},
"unsupported_browser": {
"description": "Os byddwch yn parhau, efallai na fydd rhai nodweddion yn gweithio ac mae risg y gallech golli data yn y dyfodol. Diweddarwch eich porwr i barhau i ddefnyddio %(brand)s.",
"title": "Nid yw %(brand)s yn cefnogi'r porwr hwn"
@ -3864,10 +3475,7 @@
"not_image": "Nid yw'r ffeil rydych chi wedi'i dewis yn ffeil delwedd ddilys.",
"title": "Llwytho ffeiliau",
"title_progress": "Llwytho ffeiliau (%(current)s o %(total)s)",
"upload_all_button": "Llwytho'r cyfan",
"upload_n_others_button": {
"Llwytho %(count)s ffeil arall": "other"
}
"upload_all_button": "Llwytho'r cyfan"
},
"user_info": {
"admin_tools_section": "Offer Gweinyddol",
@ -3905,13 +3513,6 @@
"kick_space_warning": "Byddan nhw'n dal i allu cael mynediad at beth bynnag nad ydych yn weinyddwr iddo.",
"promote_warning": "Fyddwch chi ddim yn gallu dadwneud y newid hwn gan eich bod yn hyrwyddo'r defnyddiwr i gael yr un lefel pŵer â chi'ch hun.",
"redact": {
"confirm_button": {
"Tynnu %(count)s neges": "other",
"Tynnu 1 neges": "one"
},
"confirm_description_1": {
"Rydych chi ar fin tynnu %(count)s neges gan %(user)s. Bydd hyn yn eu tynnu'n barhaol i bawb yn y sgwrs. Ydych chi am barhau?": "other"
},
"confirm_description_2": "Ar gyfer llawer iawn o negeseuon, gallai hyn gymryd peth amser. Peidiwch ag adnewyddu eich cleient yn y cyfamser.",
"confirm_keep_state_explainer": "Dad-diciwch a ydych hefyd am ddileu negeseuon system ar y defnyddiwr hwn (e.e. newid aelodaeth, newid proffil…)",
"confirm_keep_state_label": "Cadw negeseuon system",
@ -4002,10 +3603,6 @@
"msisdn_lookup_failed": "Methu chwilio am y rhif ffôn",
"msisdn_lookup_failed_description": "Bu gwall wrth chwilio am y rhif ffôn",
"msisdn_transfer_failed": "Methu trosglwyddo galwad",
"n_people_joined": {
"Does %(count)s person wedi ymuno": "zero",
"Mae %(count)s person wedi ymuno": "other"
},
"no_audio_input_description": "Heb ddod o hyd i feicroffon ar eich dyfais. Gwiriwch eich gosodiadau a cheisiwch eto.",
"no_audio_input_title": "Heb ganfod meicroffon",
"no_media_perms_description": "Mae'n bosibl y bydd angen i chi ganiatáu i %(brand)s gael mynediad i'ch meicroffon/gwegamera â llaw",

View file

@ -92,9 +92,7 @@
"ok": "OK",
"open": "Åbn",
"open_menu": "Åbn menu",
"pause": "Pausér",
"pin": "Fastgør",
"play": "Afspil",
"proceed": "Fortsæt",
"quote": "Citat",
"react": "Reager",
@ -1639,7 +1637,6 @@
"files_button": "Filer",
"pinned_messages": {
"limits": {
"one": "",
"other": "Du kan kun fastgøre op til %(count)s widgets"
}
},
@ -2886,24 +2883,10 @@
"show_thread_filter": "Vis:"
},
"time": {
"about_day_ago": "omkring en dag siden",
"about_hour_ago": "for omkring en time siden",
"about_minute_ago": "for omkring et minut siden",
"date_at_time": "%(date)s om %(time)s",
"few_seconds_ago": "for et par sekunder siden",
"hours_minutes_seconds_left": "%(hours)st %(minutes)sm %(seconds)ss tilbage",
"in_about_day": "om cirka en dag fra nu",
"in_about_hour": "omkring en time fra nu",
"in_about_minute": "omkring et minut fra nu",
"in_few_seconds": "et par sekunder fra nu",
"in_n_days": "%(num)s dage fra nu",
"in_n_hours": "%(num)s timer fra nu",
"in_n_minutes": "%(num)s minutter fra nu",
"left": "%(timeRemaining)s tilbage",
"minutes_seconds_left": "%(minutes)sm %(seconds)ss tilbage",
"n_days_ago": "%(num)s dage siden",
"n_hours_ago": "%(num)s timer siden",
"n_minutes_ago": "%(num)s minutter siden",
"seconds_left": "%(seconds)ss tilbage",
"short_days": "%(value)sd",
"short_days_hours_minutes_seconds": "%(days)sd %(hours)st %(minutes)sm %(seconds)ss",
@ -2951,8 +2934,7 @@
"m.audio": {
"error_downloading_audio": "Fejl ved download af lyd",
"error_processing_audio": "Fejl ved behandling af lydbesked",
"error_processing_voice_message": "Fejl ved behandling af talebesked",
"unnamed_audio": "Unavngiven lyd"
"error_processing_voice_message": "Fejl ved behandling af talebesked"
},
"m.beacon_info": {
"view_live_location": "Se live lokation"
@ -3351,7 +3333,6 @@
}
},
"truncated_list_n_more": {
"one": "",
"other": "Og %(count)s mere..."
},
"unsupported_server_description": "Denne server bruger en ældre version af Matrix. Opgrader til Matrix %(version)s for at kunne bruge %(brand)s uden fejl.",

View file

@ -100,9 +100,7 @@
"ok": "Ok",
"open": "Öffnen",
"open_menu": "Menu öffnen",
"pause": "Pausieren",
"pin": "Anheften",
"play": "Abspielen",
"proceed": "Fortfahren",
"quote": "Zitieren",
"react": "Reagieren",
@ -3364,24 +3362,10 @@
"no_rooms_with_unread_threads": "Es gibt keine Chats mit ungelesenen Threads."
},
"time": {
"about_day_ago": "vor etwa einem Tag",
"about_hour_ago": "vor etwa einer Stunde",
"about_minute_ago": "vor etwa einer Minute",
"date_at_time": "%(date)s um %(time)s",
"few_seconds_ago": "vor ein paar Sekunden",
"hours_minutes_seconds_left": "%(hours)s h %(minutes)s m %(seconds)s s verbleibend",
"in_about_day": "in etwa einem Tag",
"in_about_hour": "in etwa einer Stunde",
"in_about_minute": "in etwa einer Minute",
"in_few_seconds": "in ein paar Sekunden",
"in_n_days": "in %(num)s Tagen",
"in_n_hours": "in %(num)s Stunden",
"in_n_minutes": "In etwa %(num)s Minuten",
"left": "%(timeRemaining)s übrig",
"minutes_seconds_left": "%(minutes)s m %(seconds)s s verbleibend",
"n_days_ago": "vor %(num)s Tagen",
"n_hours_ago": "vor %(num)s Stunden",
"n_minutes_ago": "vor %(num)s Minuten",
"seconds_left": "%(seconds)s verbleibend",
"short_days": "%(value)sd",
"short_days_hours_minutes_seconds": "%(days)s d %(hours)s h %(minutes)s m %(seconds)s s",
@ -3436,11 +3420,9 @@
"unable_to_find": "Der Sprung an eine bestimmte Stelle im Nachrichtenverlauf dieses Chats ist gescheitert. Die Stelle konnte nicht gefunden werden."
},
"m.audio": {
"audio_player": "Audio-Player",
"error_downloading_audio": "Fehler beim Herunterladen der Audiodatei",
"error_processing_audio": "Fehler beim Verarbeiten der Audionachricht",
"error_processing_voice_message": "Fehler beim Verarbeiten der Sprachnachricht",
"unnamed_audio": "Unbenannte Audiodatei"
"error_processing_voice_message": "Fehler beim Verarbeiten der Sprachnachricht"
},
"m.beacon_info": {
"view_live_location": "Echtzeit-Standort anzeigen"

View file

@ -82,9 +82,7 @@
"no": "Όχι",
"ok": "Εντάξει",
"open": "Άνοιγμα",
"pause": "Παύση",
"pin": "Καρφίτσα",
"play": "Αναπαραγωγή",
"proceed": "Συνέχεια",
"quote": "Παράθεση",
"react": "Αντίδραση",
@ -2618,24 +2616,10 @@
"show_thread_filter": "Εμφάνισε:"
},
"time": {
"about_day_ago": "σχεδόν μία μέρα πριν",
"about_hour_ago": "σχεδόν μία ώρα πριν",
"about_minute_ago": "σχεδόν ένα λεπτό πριν",
"date_at_time": "%(date)s στις %(time)s",
"few_seconds_ago": "λίγα δευτερόλεπτα πριν",
"hours_minutes_seconds_left": "απομένουν %(hours)sώ %(minutes)sλ %(seconds)sδλ",
"in_about_day": "περίπου μια μέρα από τώρα",
"in_about_hour": "περίπου μία ώρα από τώρα",
"in_about_minute": "περίπου ένα λεπτό από τώρα",
"in_few_seconds": "λίγα δευτερόλεπτα από τώρα",
"in_n_days": "%(num)s μέρες από τώρα",
"in_n_hours": "%(num)s ώρες από τώρα",
"in_n_minutes": "%(num)s λεπτά από τώρα",
"left": "%(timeRemaining)s απομένουν",
"minutes_seconds_left": "απομένουν %(minutes)sλ %(seconds)sδλ",
"n_days_ago": "%(num)s μέρες πριν",
"n_hours_ago": "%(num)s ώρες πριν",
"n_minutes_ago": "%(num)s λεπτά πριν",
"seconds_left": "%(seconds)ss απομένουν",
"short_days": "%(value)sμέρες",
"short_days_hours_minutes_seconds": "%(days)sη %(hours)sώ %(minutes)sλ %(seconds)sδλ",
@ -2676,8 +2660,7 @@
"m.audio": {
"error_downloading_audio": "Σφάλμα λήψης ήχου",
"error_processing_audio": "Σφάλμα επεξεργασίας του ηχητικού μηνύματος",
"error_processing_voice_message": "Σφάλμα επεξεργασίας του φωνητικού μηνύματος",
"unnamed_audio": "Ήχος χωρίς όνομα"
"error_processing_voice_message": "Σφάλμα επεξεργασίας του φωνητικού μηνύματος"
},
"m.call": {
"video_call_started": "Ξεκίνησε βιντεοκλήση στο %(roomName)s",

View file

@ -101,9 +101,7 @@
"ok": "OK",
"open": "Open",
"open_menu": "Open menu",
"pause": "Pause",
"pin": "Pin",
"play": "Play",
"proceed": "Proceed",
"quote": "Quote",
"react": "React",
@ -2133,7 +2131,6 @@
"status_bar": {
"delete_all": "Delete all",
"exceeded_resource_limit": "Your message wasn't sent because this homeserver has exceeded a resource limit. Please <a>contact your service administrator</a> to continue using the service.",
"history_visible": "This room has been configured so that new members can read history. <a>Learn More</a>",
"homeserver_blocked": "Your message wasn't sent because this homeserver has been blocked by its administrator. Please <a>contact your service administrator</a> to continue using the service.",
"monthly_user_limit_reached": "Your message wasn't sent because this homeserver has hit its Monthly Active User Limit. Please <a>contact your service administrator</a> to continue using the service.",
"requires_consent_agreement": "You can't send any messages until you review and agree to <consentLink>our terms and conditions</consentLink>.",
@ -3393,24 +3390,10 @@
"no_rooms_with_unread_threads": "You don't have rooms with unread threads yet."
},
"time": {
"about_day_ago": "about a day ago",
"about_hour_ago": "about an hour ago",
"about_minute_ago": "about a minute ago",
"date_at_time": "%(date)s at %(time)s",
"few_seconds_ago": "a few seconds ago",
"hours_minutes_seconds_left": "%(hours)sh %(minutes)sm %(seconds)ss left",
"in_about_day": "about a day from now",
"in_about_hour": "about an hour from now",
"in_about_minute": "about a minute from now",
"in_few_seconds": "a few seconds from now",
"in_n_days": "%(num)s days from now",
"in_n_hours": "%(num)s hours from now",
"in_n_minutes": "%(num)s minutes from now",
"left": "%(timeRemaining)s left",
"minutes_seconds_left": "%(minutes)sm %(seconds)ss left",
"n_days_ago": "%(num)s days ago",
"n_hours_ago": "%(num)s hours ago",
"n_minutes_ago": "%(num)s minutes ago",
"seconds_left": "%(seconds)ss left",
"short_days": "%(value)sd",
"short_days_hours_minutes_seconds": "%(days)sd %(hours)sh %(minutes)sm %(seconds)ss",
@ -3465,11 +3448,9 @@
"unable_to_find": "Tried to load a specific point in this room's timeline, but was unable to find it."
},
"m.audio": {
"audio_player": "Audio player",
"error_downloading_audio": "Error downloading audio",
"error_processing_audio": "Error processing audio message",
"error_processing_voice_message": "Error processing voice message",
"unnamed_audio": "Unnamed audio"
"error_processing_voice_message": "Error processing voice message"
},
"m.beacon_info": {
"view_live_location": "View live location"

View file

@ -68,9 +68,7 @@
"no": "Ne",
"ok": "Bone",
"open": "Malfermi",
"pause": "Paŭzigi",
"pin": "Pinglo",
"play": "Ludi",
"quote": "Citaĵo",
"react": "Reagi",
"refresh": "Aktualigi",
@ -2035,23 +2033,9 @@
"light_high_contrast": "Malpeza alta kontrasto"
},
"time": {
"about_day_ago": "antaŭ ĉirkaŭ tago",
"about_hour_ago": "antaŭ ĉirkaŭ horo",
"about_minute_ago": "antaŭ ĉirkaŭ minuto",
"date_at_time": "%(date)s je %(time)s",
"few_seconds_ago": "antaŭ kelkaj sekundoj",
"hours_minutes_seconds_left": "%(hours)sh. %(minutes)sm. %(seconds)ss. restas",
"in_about_day": "ĉirkaŭ tagon de nun",
"in_about_hour": "ĉirkaŭ horon de nun",
"in_about_minute": "ĉirkaŭ minuton de nun",
"in_few_seconds": "kelkajn sekundojn de nun",
"in_n_days": "%(num)s tagojn de nun",
"in_n_hours": "%(num)s horojn de nun",
"in_n_minutes": "%(num)s minutojn de nun",
"minutes_seconds_left": "%(minutes)sm. %(seconds)ss. restas",
"n_days_ago": "antaŭ %(num)s tagoj",
"n_hours_ago": "antaŭ %(num)s horoj",
"n_minutes_ago": "antaŭ %(num)s minutoj",
"seconds_left": "%(seconds)s sekundoj restas",
"short_days": "%(value)st.",
"short_days_hours_minutes_seconds": "%(days)st. %(hours)sh. %(minutes)sm. %(seconds)ss.",
@ -2089,8 +2073,7 @@
"m.audio": {
"error_downloading_audio": "Eraris elŝuto de sondosiero",
"error_processing_audio": "Eraris traktado de sonmesaĝo",
"error_processing_voice_message": "Eraris traktado de voĉmesaĝo",
"unnamed_audio": "Sennoma sondosiero"
"error_processing_voice_message": "Eraris traktado de voĉmesaĝo"
},
"m.call": {
"video_call_started": "Videovoko komenciĝis en %(roomName)s.",

View file

@ -92,9 +92,7 @@
"ok": "Vale",
"open": "Abrir",
"open_menu": "Abrir menú",
"pause": "Pausar",
"pin": "Fijar",
"play": "Reproducir",
"proceed": "Continuar",
"quote": "Citar",
"react": "Reaccionar",
@ -2700,24 +2698,10 @@
"show_thread_filter": "Mostrar:"
},
"time": {
"about_day_ago": "hace aprox. un día",
"about_hour_ago": "hace aprox. una hora",
"about_minute_ago": "hace aproximadamente un minuto",
"date_at_time": "%(date)s a la(s) %(time)s",
"few_seconds_ago": "hace unos segundos",
"hours_minutes_seconds_left": "queda(n) %(hours)sh %(minutes)sm %(seconds)ss",
"in_about_day": "dentro de un día",
"in_about_hour": "dentro de una hora",
"in_about_minute": "dentro de un minuto",
"in_few_seconds": "dentro de unos segundos",
"in_n_days": "dentro de %(num)s días",
"in_n_hours": "dentro de %(num)s horas",
"in_n_minutes": "dentro de %(num)s minutos",
"left": "Queda %(timeRemaining)s",
"minutes_seconds_left": "queda(n) %(minutes)sm %(seconds)ss",
"n_days_ago": "hace %(num)s días",
"n_hours_ago": "hace %(num)s horas",
"n_minutes_ago": "hace %(num)s minutos",
"seconds_left": "%(seconds)ss restantes",
"short_days": "%(value)s d",
"short_days_hours_minutes_seconds": "%(days)sd %(hours)sh %(minutes)sm %(seconds)ss",
@ -2758,11 +2742,9 @@
"unable_to_find": "Se ha intentado cargar cierto punto en la cronología de esta sala, pero no se ha podido encontrarlo."
},
"m.audio": {
"audio_player": "Reproductor de audio",
"error_downloading_audio": "Error al descargar el audio",
"error_processing_audio": "Error al procesar el mensaje de audio",
"error_processing_voice_message": "Ha ocurrido un error al procesar el mensaje de voz",
"unnamed_audio": "Audio sin título"
"error_processing_voice_message": "Ha ocurrido un error al procesar el mensaje de voz"
},
"m.beacon_info": {
"view_live_location": "Ver ubicación en tiempo real"

View file

@ -101,9 +101,7 @@
"ok": "Sobib",
"open": "Ava",
"open_menu": "Ava menüü",
"pause": "Peata",
"pin": "Tõsta esile",
"play": "Esita",
"proceed": "Jätka",
"quote": "Tsiteeri",
"react": "Reageeri",
@ -1914,7 +1912,6 @@
"other": "%(count)s esiletõstetud sõnumit"
},
"limits": {
"one": "",
"other": "Sa saad esile tõsta kuni %(count)s vidinat"
},
"menu": "Ava menüü",
@ -2126,7 +2123,6 @@
"status_bar": {
"delete_all": "Kustuta kõik",
"exceeded_resource_limit": "Sinu sõnumit ei saadetud, kuna see koduserver on ületanud on ületanud ressursipiirangu. Teenuse kasutamiseks palun <a>võta ühendust serveri haldajaga</a>.",
"history_visible": "See jututuba on seadistatud sel viisil, et uued liikmed saavad lugeda varasemat ajalugu.<a> Lisateave</a>",
"homeserver_blocked": "Sinu sõnumit ei saadetud, kuna see koduserver blokeeritud serveri haldaja poolt. Teenuse kasutamiseks palun <a>võta ühendust serveri haldajaga</a>.",
"monthly_user_limit_reached": "Sinu sõnumit ei saadetud, kuna see koduserver on saavutanud igakuise aktiivsete kasutajate piiri. Teenuse kasutamiseks palun <a>võta ühendust serveri haldajaga</a>.",
"requires_consent_agreement": "Sa ei saa saata ühtego sõnumit enne, kui oled läbi lugenud ja nõustunud <consentLink>meie kasutustingimustega</consentLink>.",
@ -3387,24 +3383,10 @@
"no_rooms_with_unread_threads": "Pole veel ühtegi lugemata jutulõngaga jututuba."
},
"time": {
"about_day_ago": "umbes päev tagasi",
"about_hour_ago": "umbes tund aega tagasi",
"about_minute_ago": "umbes minut tagasi",
"date_at_time": "%(date)s %(time)s",
"few_seconds_ago": "mõni sekund tagasi",
"hours_minutes_seconds_left": "jäänud on %(hours)st %(minutes)sm %(seconds)ss",
"in_about_day": "umbes päeva pärast",
"in_about_hour": "umbes tunni pärast",
"in_about_minute": "umbes minuti pärast",
"in_few_seconds": "mõne sekundi pärast",
"in_n_days": "%(num)s päeva pärast",
"in_n_hours": "%(num)s tunni pärast",
"in_n_minutes": "%(num)s minuti pärast",
"left": "jäänud %(timeRemaining)s",
"minutes_seconds_left": "jäänud on %(minutes)sm %(seconds)ss",
"n_days_ago": "%(num)s päeva tagasi",
"n_hours_ago": "%(num)s tundi tagasi",
"n_minutes_ago": "%(num)s minutit tagasi",
"seconds_left": "jäänud %(seconds)s sekundit",
"short_days": "%(value)s p",
"short_days_hours_minutes_seconds": "%(days)s pv %(hours)s t %(minutes)s m %(seconds)s s",
@ -3459,11 +3441,9 @@
"unable_to_find": "Üritasin laadida teatud hetke selle jututoa ajajoonelt, kuid ei suutnud seda leida."
},
"m.audio": {
"audio_player": "Meediaesitaja",
"error_downloading_audio": "Helifaili allalaadimine ei õnnestunud",
"error_processing_audio": "Viga häälsõnumi töötlemisel",
"error_processing_voice_message": "Viga häälsõnumi töötlemisel",
"unnamed_audio": "Nimetu helifail"
"error_processing_voice_message": "Viga häälsõnumi töötlemisel"
},
"m.beacon_info": {
"view_live_location": "Vaata asukohta reaalajas"

View file

@ -66,9 +66,7 @@
"no": "خیر",
"ok": "باشه",
"open": "باز",
"pause": "متوقف‌کردن",
"pin": "سنجاق",
"play": "اجرا کردن",
"quote": "نقل قول",
"react": "واکنش",
"refresh": "رفرش",
@ -1776,21 +1774,7 @@
},
"thread_view_back_action_label": "بازگشت به موضوع",
"time": {
"about_day_ago": "حدود یک روز قبل",
"about_hour_ago": "حدود یک ساعت قبل",
"about_minute_ago": "حدود یک دقیقه قبل",
"date_at_time": "%(date)s ساعت %(time)s",
"few_seconds_ago": "چند ثانیه قبل",
"in_about_day": "حدود یک روز دیگر",
"in_about_hour": "حدود یک ساعت دیگر",
"in_about_minute": "حدود یک دقیقه دیگر",
"in_few_seconds": "چند ثانیه دیگر",
"in_n_days": "%(num)s روز دیگر",
"in_n_hours": "%(num)s ساعت دیگر",
"in_n_minutes": "%(num)s دقیقه دیگر",
"n_days_ago": "%(num)s روز قبل",
"n_hours_ago": "%(num)s ساعت قبل",
"n_minutes_ago": "%(num)s دقیقه قبل",
"seconds_left": "%(seconds)s ثانیه باقی‌مانده",
"short_minutes": "%(value)sم",
"short_seconds": "%(value)sس"

View file

@ -89,9 +89,7 @@
"ok": "OK",
"open": "Avaa",
"open_menu": "Avaa valikko",
"pause": "Keskeytä",
"pin": "Kiinnitä",
"play": "Toista",
"proceed": "Jatka",
"quote": "Lainaa",
"react": "Reagoi",
@ -2816,24 +2814,10 @@
"show_thread_filter": "Näytä:"
},
"time": {
"about_day_ago": "noin päivä sitten",
"about_hour_ago": "noin tunti sitten",
"about_minute_ago": "noin minuutti sitten",
"date_at_time": "%(date)s klo %(time)s",
"few_seconds_ago": "muutama sekunti sitten",
"hours_minutes_seconds_left": "%(hours)s h %(minutes)s m %(seconds)s s jäljellä",
"in_about_day": "noin päivä sitten",
"in_about_hour": "noin tunti sitten",
"in_about_minute": "noin minuutti sitten",
"in_few_seconds": "muutama sekunti sitten",
"in_n_days": "%(num)s päivää sitten",
"in_n_hours": "%(num)s tuntia sitten",
"in_n_minutes": "%(num)s minuuttia sitten",
"left": "%(timeRemaining)s jäljellä",
"minutes_seconds_left": "%(minutes)s min %(seconds)s s jäljellä",
"n_days_ago": "%(num)s päivää sitten",
"n_hours_ago": "%(num)s tuntia sitten",
"n_minutes_ago": "%(num)s minuuttia sitten",
"seconds_left": "%(seconds)s s jäljellä",
"short_days": "%(value)s vrk",
"short_days_hours_minutes_seconds": "%(days)s pv %(hours)s t %(minutes)s min %(seconds)s s",
@ -2882,8 +2866,7 @@
"m.audio": {
"error_downloading_audio": "Virhe ääntä ladattaessa",
"error_processing_audio": "Virhe ääniviestiä käsiteltäessä",
"error_processing_voice_message": "Virhe ääniviestin käsittelyssä",
"unnamed_audio": "Nimetön ääni"
"error_processing_voice_message": "Virhe ääniviestin käsittelyssä"
},
"m.call": {
"video_call_ended": "Videopuhelu päättyi",

View file

@ -101,9 +101,7 @@
"ok": "OK",
"open": "Ouvrir",
"open_menu": "Ouvrir le menu",
"pause": "Pause",
"pin": "Épingler",
"play": "Lecture",
"proceed": "Appliquer",
"quote": "Citer",
"react": "Réagir",
@ -2122,7 +2120,6 @@
"status_bar": {
"delete_all": "Tout supprimer",
"exceeded_resource_limit": "Votre message na pas été envoyé car ce serveur daccueil a dépassé une de ses limites de ressources. Veuillez <a>contacter ladministrateur de votre service</a> pour continuer à lutiliser.",
"history_visible": "Ce salon a été configuré afin que les nouveaux membres puissent lire l'historique.<a> En savori plus</a>",
"homeserver_blocked": "Votre message na pas été envoyé car ce serveur daccueil a été bloqué par son administrateur. Veuillez <a>contacter ladministrateur de votre service</a> pour continuer à lutiliser.",
"monthly_user_limit_reached": "Votre message na pas été envoyé car le serveur daccueil a atteint sa limite mensuelle dutilisateurs. Veuillez <a>contacter ladministrateur de votre service</a> pour continuer à lutiliser.",
"requires_consent_agreement": "Vous ne pouvez voir aucun message tant que vous ne lisez et nacceptez pas nos <consentLink>conditions générales</consentLink>.",
@ -3383,24 +3380,10 @@
"no_rooms_with_unread_threads": "Vous n'avez pas encore de salons contenant des fils de discussion non lus."
},
"time": {
"about_day_ago": "il y a environ un jour",
"about_hour_ago": "il y a environ une heure",
"about_minute_ago": "il y a environ une minute",
"date_at_time": "%(date)s à %(time)s",
"few_seconds_ago": "il y a quelques secondes",
"hours_minutes_seconds_left": "%(hours)sh %(minutes)sm %(seconds)ss restantes",
"in_about_day": "dans un jour environ",
"in_about_hour": "dans une heure environ",
"in_about_minute": "dans une minute environ",
"in_few_seconds": "dans quelques secondes",
"in_n_days": "dans %(num)s jours",
"in_n_hours": "dans %(num)s heures",
"in_n_minutes": "dans %(num)s minutes",
"left": "%(timeRemaining)s restant",
"minutes_seconds_left": "%(minutes)sm %(seconds)ss restantes",
"n_days_ago": "il y a %(num)s jours",
"n_hours_ago": "il y a %(num)s heures",
"n_minutes_ago": "il y a %(num)s minutes",
"seconds_left": "%(seconds)s secondes restantes",
"short_days": "%(value)sj",
"short_days_hours_minutes_seconds": "%(days)sj %(hours)sh %(minutes)sm %(seconds)ss",
@ -3455,11 +3438,9 @@
"unable_to_find": "Un instant donné du fil de discussion na pu être chargé car il na pas pu être trouvé."
},
"m.audio": {
"audio_player": "Lecteur audio",
"error_downloading_audio": "Erreur lors du téléchargement de laudio",
"error_processing_audio": "Erreur lors du traitement du message audio",
"error_processing_voice_message": "Erreur lors du traitement du message vocal",
"unnamed_audio": "Audio sans nom"
"error_processing_voice_message": "Erreur lors du traitement du message vocal"
},
"m.beacon_info": {
"view_live_location": "Voir la position en direct"

View file

@ -77,8 +77,6 @@
"next": "Seguinte",
"no": "Non",
"open": "Abrir",
"pause": "Deter",
"play": "Reproducir",
"quote": "Cita",
"react": "Reacciona",
"refresh": "Actualizar",
@ -2376,24 +2374,10 @@
"show_thread_filter": "Mostrar:"
},
"time": {
"about_day_ago": "onte",
"about_hour_ago": "fai unha hora",
"about_minute_ago": "fai un minuto",
"date_at_time": "%(date)s ás %(time)s",
"few_seconds_ago": "fai uns segundos",
"hours_minutes_seconds_left": "%(hours)sh %(minutes)sm %(seconds)ss restantes",
"in_about_day": "foi onte",
"in_about_hour": "fará unha hora",
"in_about_minute": "haberá un minuto",
"in_few_seconds": "hai só uns segundos",
"in_n_days": "fará %(num)s días",
"in_n_hours": "fará %(num)s horas",
"in_n_minutes": "fará %(num)s minutos",
"left": "%(timeRemaining)s restante",
"minutes_seconds_left": "%(minutes)sm %(seconds)ss restantes",
"n_days_ago": "fai %(num)s días",
"n_hours_ago": "fai %(num)s horas",
"n_minutes_ago": "fai %(num)s minutos",
"seconds_left": "%(seconds)ss restantes"
},
"timeline": {
@ -2428,8 +2412,7 @@
"m.audio": {
"error_downloading_audio": "Erro ao descargar o audio",
"error_processing_audio": "Erro ao procesar a mensaxe de audio",
"error_processing_voice_message": "Erro ao procesar a mensaxe de voz",
"unnamed_audio": "Audio sen nome"
"error_processing_voice_message": "Erro ao procesar a mensaxe de voz"
},
"m.beacon_info": {
"view_live_location": "Ver localización en directo"

View file

@ -1938,23 +1938,9 @@
"show_thread_filter": "הצג:"
},
"time": {
"about_day_ago": "בערך לפני יום",
"about_hour_ago": "בערך לפני כשעה",
"about_minute_ago": "לפני בערך דקה",
"date_at_time": "%(date)s בשעה %(time)s",
"few_seconds_ago": "לפני מספר שניות",
"hours_minutes_seconds_left": "נשארו %(hours)s שעות, %(minutes)s דקות ו-%(seconds)s שניות",
"in_about_day": "בערך בעוד יום מעכשיו",
"in_about_hour": "בערך בעוד כשעה",
"in_about_minute": "בערך עוד דקה אחת",
"in_few_seconds": "בעוד מספר שניות מעכשיו",
"in_n_days": "בעוד %(num)s ימים מעכשיו",
"in_n_hours": "בעוד %(num)s שעות",
"in_n_minutes": "בעוד %(num)s דקות",
"minutes_seconds_left": "נשארו %(minutes)s דקות ו-%(seconds)s שניות",
"n_days_ago": "לפני %(num)s ימים",
"n_hours_ago": "לפני %(num)s שעות",
"n_minutes_ago": "לפני %(num)s דקות",
"seconds_left": "נשארו %(seconds)s שניות",
"short_days": "%(value)s ימים",
"short_hours": "%(value)s שעות",

View file

@ -3,25 +3,9 @@
"emoji_picker": "Emodzsiválasztó",
"jump_first_invite": "Ugrás az első meghívóhoz.",
"message_composer": "Üzenetszerkesztő",
"n_unread_messages": {
"%(count)s olvasatlan üzenet.": "other",
"1 olvasatlan üzenet.": "one"
},
"n_unread_messages_mentions": {
"%(count)s olvasatlan üzenet megemlítéssel.": "other",
"1 olvasatlan megemlítés.": "one"
},
"recent_rooms": "Legutóbbi szobák",
"room_messsage_not_sent": "A(z) %(roomName)s szoba megnyitása nem beállított üzenettel.",
"room_n_unread_invite": "A(z) %(roomName)s szoba meghívásának megnyitása.",
"room_n_unread_messages": {
"A(z) %(roomName)s szoba megnyitása 1 olvasatlan üzenettel.": "one",
"A(z) %(roomName)s szoba megnyitása %(count)s olvasatlan üzenettel.": "other"
},
"room_n_unread_messages_mentions": {
"A(z) %(roomName)s szoba megnyitása 1 olvasatlan megemlítéssel.": "one",
"A(z) %(roomName)s szoba megnyitása %(count)s olvasatlan megemlítéssel.": "other"
},
"room_name": "Szoba: %(name)s",
"room_status_bar": "Szoba állapotsora",
"seek_bar_label": "Hang keresősávja",
@ -101,9 +85,7 @@
"ok": "Rendben",
"open": "Megnyitás",
"open_menu": "Menü megnyitása",
"pause": "Szünet",
"pin": "Kitűzés",
"play": "Lejátszás",
"proceed": "Folytatás",
"quote": "Idézés",
"react": "Reakció",
@ -471,10 +453,6 @@
"advanced": "Speciális",
"all_chats": "Összes csevegés",
"analytics": "Analitika",
"and_n_others": {
"és még: %(count)s ...": "other",
"és még egy...": "one"
},
"appearance": "Megjelenítés",
"application": "Alkalmazás",
"are_you_sure": "Biztos?",
@ -529,12 +507,6 @@
"moderation_and_safety": "Moderálás és biztonság",
"modern": "Modern",
"mute": "Némítás",
"n_members": {
"%(count)s tag": "other"
},
"n_rooms": {
"%(count)s szoba": "other"
},
"name": "Név",
"no_results": "Nincs találat",
"no_results_found": "Nincs találat",
@ -855,9 +827,6 @@
"room_notifications_total": "Összesen: ",
"room_notifications_type": "Típus: ",
"room_status": "Szoba állapota",
"room_unread_status_count": {
"Szoba állapota: <strong>%(status)s</strong>, darabszám: <strong>%(count)s</strong>": "other"
},
"save_setting_values": "Beállított értékek mentése",
"see_history": "Előzmények megtekintése",
"send_custom_account_data_event": "Egyéni fiókadat-esemény küldése",
@ -877,10 +846,6 @@
"settings_explorer": "Beállításböngésző",
"show_empty_content_events": "Üres tartalmú események megjelenítése",
"show_hidden_events": "Rejtett események megjelenítése az idővonalon",
"spaces": {
"<%(count)s szóköz>": "other",
"<szóköz>": "one"
},
"state_key": "Állapotkulcs",
"thread_root_id": "Üzenetszál gyökérazonosítója: %(threadRootId)s",
"threads_timeline": "Üzenetszálak idővonala",
@ -1215,19 +1180,7 @@
"error_fetching_file": "Fájlletöltési hiba",
"export_info": "Ez a(z) <roomName/> szoba exportálásának kezdete. Exportálta: <exporterDetails/>, időpont: %(exportDate)s.",
"export_successful": "Sikeres exportálás!",
"exported_n_events_in_time": {
"%(count)s esemény exportálva %(seconds)s másodperc alatt": "other"
},
"exporting_your_data": "Adatai exportálása",
"fetched_n_events": {
"Eddig %(count)s esemény lett lekérve": "other"
},
"fetched_n_events_in_time": {
"%(count)s esemény lekérve %(seconds)s másodperc alatt": "other"
},
"fetched_n_events_with_total": {
"%(count)s / %(total)s esemény lekérve": "other"
},
"fetching_events": "Események lekérése…",
"file_attached": "Fájl mellékelve",
"format": "Formátum",
@ -1316,9 +1269,6 @@
},
"in_space": "Ebben a térben: %(spaceName)s.",
"in_space1_and_space2": "Ezekben a terekben: %(space1Name)s és %(space2Name)s.",
"in_space_and_n_other_spaces": {
"Itt: %(spaceName)s és %(count)s másik térben.": "other"
},
"incompatible_browser": {
"continue": "Folytatás mégis",
"description": "%(brand)s olyan böngészőfunkciókat használ, amelyek nem érhetők el az aktuális böngészőben. %(detail)s",
@ -1412,14 +1362,6 @@
"unban_first_title": "A felhasználó addig nem hívható meg, amíg fel nem oldják a kitiltását"
},
"inviting_user1_and_user2": "%(user1)s és %(user2)s meghívása",
"inviting_user_and_n_others": {
"%(user)s és 1 további meghívása": "one",
"%(user)s és %(count)s további meghívása": "other"
},
"items_and_n_others": {
"<Items/> és még %(count)s másik": "other",
"<Items/> és még egy másik": "one"
},
"keyboard": {
"activate_button": "Kiválasztott gomb aktiválása",
"alt": "Alt",
@ -1675,9 +1617,6 @@
"toggle_attribution": "Forrásmegjelölés be/ki"
},
"member_list": {
"count": {
"%(count)s tag": "other"
},
"filter_placeholder": "Szoba tagság szűrése",
"invite_button_no_perms_tooltip": "Nincs jogosultsága felhasználók meghívására",
"invited_label": "Meghívott",
@ -1768,12 +1707,6 @@
"topic_label": "Kérdés vagy téma",
"topic_placeholder": "Írjon valamit…",
"total_decryption_errors": "Visszafejtési hibák miatt néhány szavazat nem kerül beszámításra",
"total_n_votes": {
"%(count)s leadott szavazat. Szavazzon az eredmény megtekintéséhez": "other"
},
"total_n_votes_voted": {
"%(count)s szavazat alapján": "other"
},
"total_no_votes": "Nem adtak le szavazatot",
"total_not_ended": "Az eredmény a szavazás végeztével válik láthatóvá",
"type_closed": "Zárt szavazás",
@ -1889,7 +1822,6 @@
"other": "%(count)s kitűzött üzenet"
},
"limits": {
"one": "",
"other": "Legfeljebb %(count)s kisalkalmazást tűzhet ki"
},
"menu": "Menü megnyitása",
@ -1906,19 +1838,8 @@
"active_heading": "Aktív szavazások",
"empty_active": "Nincsenek aktív szavazások ebben a szobában",
"empty_active_load_more": "Nincs aktív szavazás. További szavazások betöltése az előző havi szavazások megjelenítéséhez",
"empty_active_load_more_n_days": {
"%(count)s napja nincs aktív szavazás. További szavazások betöltése az előző havi szavazások megjelenítéséhez": "other",
"Nincs aktív szavazás az elmúlt napokból. További szavazások betöltése az előző havi szavazások megjelenítéséhez": "one"
},
"empty_past": "Nincsenek régebbi szavazások ebben a szobában",
"empty_past_load_more": "Nincs régebbi szavazás. További szavazások betöltése az előző havi szavazások megjelenítéséhez",
"empty_past_load_more_n_days": {
"Nincs aktív szavazás az elmúlt napokból. További szavazások betöltése az előző havi szavazások megjelenítéséhez": "one",
"%(count)s napja nincs aktív szavazás. További szavazások betöltése az előző havi szavazások megjelenítéséhez": "other"
},
"final_result": {
"Végeredmény %(count)s szavazat alapján": "other"
},
"load_more": "Még több szavazás betöltése",
"loading": "Szavazások betöltése",
"past_heading": "Régi szavazások",
@ -1983,13 +1904,6 @@
"error_jump_to_date_not_found": "Nem sikerült megtalálni az eseményt %(dateString)s után keresve. Próbáljon egy korábbi dátumot kiválasztani.",
"error_jump_to_date_send_logs_prompt": "Küldjön be <debugLogsLink>hibakeresési naplókat</debugLogsLink>, hogy segítsen nekünk a hiba megtalálásában.",
"error_jump_to_date_title": "Nem található esemény az adott dátumkor",
"face_pile_summary": {
"%(count)s ismerős már csatlakozott": "other"
},
"face_pile_tooltip_label": {
"1 résztvevő megmutatása": "one",
"Az összes %(count)s résztvevő megmutatása": "other"
},
"face_pile_tooltip_shortcut": "Beleértve: %(commaSeparatedMembers)s",
"face_pile_tooltip_shortcut_joined": "Önt is beleértve, %(commaSeparatedMembers)s",
"failed_determine_user": "Nem lehet meghatározni, hogy melyik felhasználót kell figyelmen kívül hagyni, mivel az esemény megváltozott.",
@ -1997,10 +1911,6 @@
"forget_room": "Szoba elfelejtése",
"forget_space": "Ennek a térnek az elfelejtése",
"header": {
"n_people_asking_to_join": {
"Csatlakozást kér": "one",
"%(count)s csatlakozást kérő ember": "other"
},
"room_is_public": "Ez egy nyilvános szoba"
},
"header_avatar_open_settings_label": "Szobabeállítások megnyitása",
@ -2090,10 +2000,6 @@
"search": {
"all_rooms_button": "Keresés az összes szobában",
"placeholder": "Üzenetek keresése...",
"summary": {
"1 találat ehhez: „<query/>”": "one",
"%(count)s találat ehhez: „<query/>”": "other"
},
"this_room_button": "Keresés ebben a szobában"
},
"status_bar": {
@ -2109,9 +2015,6 @@
"some_messages_not_sent": "Néhány üzenete nem lett elküldve"
},
"unknown_status_code_for_timeline_jump": "ismeretlen állapotkód",
"unread_notifications_predecessor": {
"%(count)s olvasatlan értesítésed van a régi verziójú szobában.": "one"
},
"upgrade_error_description": "Ellenőrizze még egyszer, hogy a kiszolgálója támogatja-e kiválasztott szobaverziót, és próbálja újra.",
"upgrade_error_title": "Hiba a szoba verziófrissítésekor",
"upgrade_warning_bar": "A szoba fejlesztése bezárja ezt a szobát és új, frissített verzióval ugyanezen a néven létrehoz egy újat.",
@ -2119,9 +2022,6 @@
"upgrade_warning_bar_unstable": "A szoba verziója: <roomVersion />, amelyet a Matrix-kiszolgáló <i>instabilnak</i> tekint.",
"upgrade_warning_bar_upgraded": "Ez a szoba már fejlesztve van.",
"upload": {
"uploading_multiple_file": {
"%(filename)s és még %(count)s db másik feltöltése": "other"
},
"uploading_single_file": "%(filename)s feltöltése"
},
"video_room": "Ez a szoba egy videószoba",
@ -2166,9 +2066,6 @@
},
"home_menu_label": "Kezdőlap beállítások",
"join_public_room_label": "Belépés nyilvános szobába",
"joining_rooms_status": {
"%(count)s szobába lép be": "other"
},
"list_title": "Szobalista",
"more_options": {
"copy_link": "Szoba hivatkozásának másolása",
@ -2190,9 +2087,6 @@
},
"room_options": "Szobabeállítások",
"show_less": "Kevesebb megjelenítése",
"show_n_more": {
"Még %(count)s megjelenítése": "one"
},
"show_previews": "Üzenet-előnézet megjelenítése",
"sort": "Rendezés",
"sort_by": "Rendezés",
@ -2415,25 +2309,10 @@
"join_rule_restricted_dialog_heading_space": "Terek melyről tudja, hogy ezt a teret tartalmazzák",
"join_rule_restricted_dialog_heading_unknown": "Ezek valószínűleg olyanok, amelyeknek más szobaadminisztrátorok is tagjai.",
"join_rule_restricted_dialog_title": "Terek kiválasztása",
"join_rule_restricted_n_more": {
"és még %(count)s": "one"
},
"join_rule_restricted_summary": {
"Jelenleg %(count)s tér rendelkezik hozzáféréssel": "other",
"Jelenleg egy tér rendelkezik hozzáféréssel": "one"
},
"join_rule_restricted_upgrade_description": "Ez a fejlesztés lehetővé teszi, hogy a kiválasztott terek tagjai meghívó nélkül is elérjék ezt a szobát.",
"join_rule_restricted_upgrade_warning": "Ez a szoba olyan terekben is benne van, amelynek nem Ön az adminisztrátora. Ezekben a terekben továbbra is a régi szoba jelenik meg, de az emberek jelzést kapnak, hogy lépjenek be az újba.",
"join_rule_upgrade_awaiting_room": "Új szoba betöltése",
"join_rule_upgrade_required": "Fejlesztés szükséges",
"join_rule_upgrade_sending_invites": {
"Meghívók küldése…": "one",
"Meghívók küldése… (%(progress)s / %(count)s)": "other"
},
"join_rule_upgrade_updating_spaces": {
"Terek frissítése…": "one",
"Terek frissítése… (%(progress)s / %(count)s)": "other"
},
"join_rule_upgrade_upgrading_room": "Szoba fejlesztése",
"join_rule_world_readable_description": "A szobába való belépés jogosultságának módosítása a jövőbeli üzenetek láthatóságát is megváltoztatja.",
"public_without_alias_warning": "Hogy hivatkozhasson erre a szobára, adjon hozzá egy címet.",
@ -2896,9 +2775,6 @@
"key_backup_algorithm": "Algoritmus:",
"message_search_disable_warning": "Ha nincs engedélyezve akkor a titkosított szobák üzenetei nem jelennek meg a keresések között.",
"message_search_disabled": "A titkosított üzenetek biztonságos helyi gyorsítótárazása, hogy megjelenhessenek a keresési találatok között.",
"message_search_enabled": {
"A titkosított üzenetek biztonságos helyi gyorsítótárazása, hogy megjelenhessenek a keresési találatok között, ehhez %(size)s helyet használ %(rooms)s szoba üzeneteihez.": "other"
},
"message_search_failed": "Az üzenetkeresés előkészítése sikertelen",
"message_search_indexed_messages": "Indexált üzenetek:",
"message_search_indexed_rooms": "Indexált szobák:",
@ -2921,22 +2797,6 @@
"sessions": {
"best_security_note": "A legjobb biztonság érdekében ellenőrizze munkameneteit, és jelentkezzen ki minden olyan munkamenetből, amelyet már nem ismer fel vagy használ.",
"browser": "Böngésző",
"confirm_sign_out": {
"Megerősítés ebből az eszközből való kijelentkezéshez": "one",
"Megerősítés ezekből az eszközökből való kijelentkezéshez": "other"
},
"confirm_sign_out_body": {
"Ezeknek a eszközöknek törlésének a megerősítéséhez kattintson a gombra lent.": "other",
"Az eszközből való kilépés megerősítéséhez kattintson a lenti gombra.": "one"
},
"confirm_sign_out_continue": {
"Eszközből való kijelentkezés": "one",
"Eszközökből való kijelentkezés": "other"
},
"confirm_sign_out_sso": {
"Az eszközből való kijelentkezéshez erősítse meg a személyazonosságát az egyszeri bejelentkezés használatával.": "one",
"Az eszközökből való kijelentkezéshez erősítse meg a személyazonosságát az egyszeri bejelentkezés használatával.": "other"
},
"current_session": "Jelenlegi munkamenet",
"desktop_session": "Asztali munkamenet",
"details_heading": "Munkamenet-információk",
@ -2963,9 +2823,6 @@
"last_activity": "Utolsó tevékenység",
"manage": "Munkamenet kezelése",
"mobile_session": "Mobil munkamenet",
"n_sessions_selected": {
"%(count)s munkamenet kiválasztva": "other"
},
"no_inactive_sessions": "Nincs inaktív munkamenet.",
"no_sessions": "Nincs munkamenet.",
"no_unverified_sessions": "Nincs ellenőrizetlen munkamenet.",
@ -2990,12 +2847,6 @@
"sign_in_with_qr_unsupported": "A fiókszolgáltató nem támogatja",
"sign_out": "Kijelentkezés ebből a munkamenetből",
"sign_out_all_other_sessions": "Kijelentkezés minden munkamenetből (%(otherSessionsCount)s)",
"sign_out_confirm_description": {
"Biztos, hogy ki szeretne lépni %(count)s munkamenetből?": "other"
},
"sign_out_n_sessions": {
"Kijelentkezés %(count)s munkamenetből": "other"
},
"title": "Munkamenetek",
"unknown_session": "Ismeretlen munkamenettípus",
"unverified_session": "Ellenőrizetlen munkamenet",
@ -3185,10 +3036,6 @@
"create_prompt": "Új szoba készítése",
"dm_heading": "Közvetlen Beszélgetések",
"error_heading": "Nem az összes kijelölt lett hozzáadva",
"progress_text": {
"Szobák hozzáadása…": "one",
"Szobák hozzáadása… (%(progress)s ennyiből: %(count)s)": "other"
},
"space_dropdown_label": "Tér kiválasztása",
"space_dropdown_title": "Létező szobák hozzáadása",
"subspace_moved_note": "Terek hozzáadása elköltözött."
@ -3271,9 +3118,6 @@
"cant_find_person_helpful_hint": "Ha nem találja, akit keres, küldje el neki a meghívási hivatkozást.",
"cant_find_room_helpful_hint": "Ha nem található az szoba, amelyet keresett, kérjen egy meghívót, vagy készítsen egy új szobát.",
"copy_link_text": "Meghívó hivatkozás másolása",
"count_of_members": {
"%(count)s tag": "other"
},
"create_new_room_button": "Új szoba létrehozása",
"failed_querying_public_rooms": "Nem sikerült lekérdezni nyilvános szobákat",
"failed_querying_public_spaces": "Nem sikerült lekérdezni a nyilvános tereket",
@ -3324,9 +3168,6 @@
"threads": {
"all_threads": "Minden üzenetszál",
"all_threads_description": "A szobában lévő összes üzenetszál megjelenítése",
"count_of_reply": {
"%(count)s válasz": "other"
},
"empty_description": "Amikor az egérmutatót egy üzenet fölé viszi használja ezt: „%(replyInThread)s ”.",
"empty_title": "Az üzenetszálak segítenek a különböző témájú beszélgetések figyelemmel kísérésében.",
"error_start_thread_existing_relation": "Nem lehet üzenetszálat indítani olyan eseményről ami már rendelkezik kapcsolattal",
@ -3342,24 +3183,10 @@
"no_rooms_with_unread_threads": "Nincsenek még olvasatlan üzenetszálakkal rendelkező szobái."
},
"time": {
"about_day_ago": "egy napja",
"about_hour_ago": "egy órája",
"about_minute_ago": "egy perce",
"date_at_time": "%(date)s %(time)s",
"few_seconds_ago": "néhány másodperce",
"hours_minutes_seconds_left": "%(hours)s ó %(minutes)s p %(seconds)s mp van hátra",
"in_about_day": "egy nap múlva",
"in_about_hour": "egy óra múlva",
"in_about_minute": "egy perc múlva",
"in_few_seconds": "másodpercek múlva",
"in_n_days": "%(num)s nap múlva",
"in_n_hours": "%(num)s óra múlva",
"in_n_minutes": "%(num)s perc múlva",
"left": "Maradék idő: %(timeRemaining)s",
"minutes_seconds_left": "%(minutes)s p %(seconds)s mp van hátra",
"n_days_ago": "%(num)s nappal ezelőtt",
"n_hours_ago": "%(num)s órával ezelőtt",
"n_minutes_ago": "%(num)s perccel ezelőtt",
"seconds_left": "%(seconds)s mp van hátra",
"short_days": "%(value)s n",
"short_days_hours_minutes_seconds": "%(days)s n %(hours)s ó %(minutes)s p %(seconds)s mp",
@ -3414,11 +3241,9 @@
"unable_to_find": "Megpróbálta betölteni a szoba megadott időpontjának megfelelő adatait, de az nem található."
},
"m.audio": {
"audio_player": "Hanglejátszó",
"error_downloading_audio": "Hiba a hang letöltésekor",
"error_processing_audio": "Hiba a hangüzenet feldolgozásánál",
"error_processing_voice_message": "Hiba a hangüzenet feldolgozásánál",
"unnamed_audio": "Névtelen hang"
"error_processing_voice_message": "Hiba a hangüzenet feldolgozásánál"
},
"m.beacon_info": {
"view_live_location": "Élő földrajzi helyzet megtekintése"
@ -3469,11 +3294,6 @@
"location": "Megosztott egy földrajzi helyzetet: ",
"self_location": "Megosztották a földrajzi helyzetüket: "
},
"m.poll": {
"count_of_votes": {
"%(count)s szavazat": "other"
}
},
"m.poll.end": {
"sender_ended": "%(senderName)s lezárta a szavazást"
},
@ -3485,14 +3305,6 @@
"removed": "%(senderDisplayName)s törölte a szoba profilképét."
},
"m.room.canonical_alias": {
"alt_added": {
"%(senderName)s hozzáadta a szoba alternatív címeit: %(addresses)s.": "other",
"%(senderName)s alternatív címeket adott hozzá a szobához: %(addresses)s.": "one"
},
"alt_removed": {
"%(senderName)s eltávolította az alternatív címeket a szobáról: %(addresses)s.": "other",
"%(senderName)s eltávolította az alternatív címet a szobáról: %(addresses)s.": "one"
},
"changed": "%(senderName)s megváltoztatta a szoba címeit.",
"changed_alternative": "%(senderName)s megváltoztatta a szoba alternatív címeit.",
"changed_main_and_alternative": "%(senderName)s megváltoztatta a szoba elsődleges és alternatív címeit.",
@ -3644,9 +3456,6 @@
"label": "%(reactors)s reagált: %(content)s",
"tooltip_caption": "ezzel reagált: %(shortName)s"
},
"read_receipt_title": {
"%(count)s ember látta": "other"
},
"read_receipts_label": "Olvasási visszajelzés",
"redacted": {
"tooltip": "Az üzenetet ekkor törölték: %(date)s"
@ -3667,95 +3476,7 @@
"send_state_sending": "Üzenet küldése…",
"send_state_sent": "Üzenet elküldve",
"summary": {
"banned": {
"%(count)s alkalommal lett kitiltva": "other",
"ki lett tiltva": "one"
},
"banned_multiple": {
"%(count)s alkalommal lett kitiltva": "other",
"lett kitiltva": "one"
},
"changed_avatar": {
"%(oneUser)s megváltoztatta a profilképét": "one",
"%(oneUser)s %(count)s alkalommal megváltoztatta a profilképét": "other"
},
"changed_avatar_multiple": {
"%(severalUsers)s megváltoztatta a profilképét": "one",
"%(severalUsers)s %(count)s alkalommal megváltoztatta a profilképét": "other"
},
"changed_name": {
"%(oneUser)s %(count)s alkalommal megváltoztatta a nevét": "other",
"%(oneUser)s megváltoztatta a nevét": "one"
},
"changed_name_multiple": {
"%(severalUsers)s %(count)s alkalommal megváltoztatta a nevét": "other",
"%(severalUsers)s megváltoztatta a nevét": "one"
},
"format": "%(nameList)s %(transitionList)s",
"hidden_event": {
"%(oneUser)s rejtett üzenetet küldött": "one",
"%(oneUser)s %(count)s rejtett üzenetet küldött": "other"
},
"hidden_event_multiple": {
"%(severalUsers)s rejtett üzenetet küldött": "one",
"%(severalUsers)s %(count)s rejtett üzenetet küldött": "other"
},
"invite_withdrawn": {
"%(oneUser)s meghívóit %(count)s alkalommal vonták vissza": "other",
"%(oneUser)s meghívóit visszavonták": "one"
},
"invite_withdrawn_multiple": {
"%(severalUsers)s meghívóit %(count)s alkalommal visszavonták": "other",
"%(severalUsers)s visszavonták a meghívásukat": "one"
},
"invited": {
"%(count)s alkalommal lett meghívva": "other",
"meg lett hívva": "one"
},
"invited_multiple": {
"%(count)s alkalommal lett meghívva": "other",
"meg lett hívva": "one"
},
"joined": {
"%(oneUser)s %(count)s alkalommal csatlakozott": "other",
"%(oneUser)s csatlakozott": "one"
},
"joined_and_left": {
"%(oneUser)s %(count)s alkalommal csatlakozott és távozott": "other",
"%(oneUser)s csatlakozott és távozott": "one"
},
"joined_and_left_multiple": {
"%(severalUsers)s %(count)s alkalommal csatlakozott és távozott": "other",
"%(severalUsers)s csatlakozott és távozott": "one"
},
"joined_multiple": {
"%(severalUsers)s %(count)s alkalommal csatlakozott": "other",
"%(severalUsers)s csatlakozott": "one"
},
"kicked": {
"eltávolítva": "one",
"%(count)s alkalommal lett eltávolítva": "other"
},
"kicked_multiple": {
"eltávolítva": "one",
"%(count)s alkalommal lett eltávolítva": "other"
},
"left": {
"%(oneUser)s %(count)s alkalommal távozott": "other",
"%(oneUser)s távozott": "one"
},
"left_multiple": {
"%(severalUsers)s %(count)s alkalommal távozott": "other",
"%(severalUsers)s távozott": "one"
},
"no_change": {
"%(oneUser)s %(count)s alkalommal nem változtatott semmit": "other",
"%(oneUser)snem változtatott semmit": "one"
},
"no_change_multiple": {
"%(severalUsers)s %(count)s alkalommal nem változtattak semmit": "other",
"%(severalUsers)s nem változtattak semmit": "one"
},
"pinned_events": {
"one": "%(oneUser)s megváltoztatta a szoba <a>kitűzött üzeneteit</a>",
"other": "%(oneUser)s %(count)s alkalommal megváltoztatta a szoba <a>kitűzött üzeneteit</a>"
@ -3763,46 +3484,6 @@
"pinned_events_multiple": {
"one": "%(severalUsers)s megváltoztatta a szoba <a>kitűzött üzeneteit</a>",
"other": "%(severalUsers)s %(count)s alkalommal megváltoztatta a szoba <a>kitűzött üzeneteit</a>"
},
"redacted": {
"%(oneUser)s üzenetet törölt": "one",
"%(oneUser)s %(count)s üzenetet törölt": "other"
},
"redacted_multiple": {
"%(severalUsers)s üzenetet törölt": "one",
"%(severalUsers)s %(count)s üzenetet törölt": "other"
},
"rejected_invite": {
"%(oneUser)s %(count)s alkalommal elutasította a meghívóit": "other",
"%(oneUser)s elutasította a meghívóit": "one"
},
"rejected_invite_multiple": {
"%(severalUsers)s %(count)s alkalommal elutasította a meghívóit": "other",
"%(severalUsers)s elutasította a meghívóit": "one"
},
"rejoined": {
"%(oneUser)s %(count)s alkalommal távozott és újra csatlakozott": "other",
"%(oneUser)s távozott és újra csatlakozott": "one"
},
"rejoined_multiple": {
"%(severalUsers)s %(count)s alkalommal távozott és újra csatlakozott": "other",
"%(severalUsers)s távozott és újra csatlakozott": "one"
},
"server_acls": {
"%(oneUser)s megváltoztatta a kiszolgáló ACL-jeit": "one",
"%(oneUser)s %(count)s alkalommal megváltoztatta a kiszolgáló ACL-jeit": "other"
},
"server_acls_multiple": {
"%(severalUsers)s megváltoztatta a kiszolgáló ACL-jeit": "one",
"%(severalUsers)s %(count)s alkalommal megváltoztatta a kiszolgáló ACL-jeit": "other"
},
"unbanned": {
"%(count)s alkalommal lett visszaengedve": "other",
"vissza lett engedve": "one"
},
"unbanned_multiple": {
"%(count)s alkalommal lett visszaengedve": "other",
"vissza lett engedve": "one"
}
},
"thread_info_basic": "Az üzenetszálból",
@ -3816,15 +3497,9 @@
},
"undecryptable_tooltip": "Ezt az üzenetet nem lehet visszafejteni",
"url_preview": {
"close": "Előnézet bezárása",
"show_n_more": {
"%(count)s további előnézet megjelenítése": "other"
}
"close": "Előnézet bezárása"
}
},
"truncated_list_n_more": {
"És még %(count)s...": "other"
},
"unsupported_browser": {
"description": "Ha folytatja, előfordulhat, hogy egyes funkciók nem működnek, és fennáll annak a kockázata, hogy a jövőben elveszítheti adatait. Frissítse böngészőjét ennek a használatához: %(brand)s.",
"title": "%(brand)s nem támogatja ezt a böngészőt"
@ -3865,11 +3540,7 @@
"not_image": "A kiválasztott fájl nem érvényes képfájl.",
"title": "Fájlok feltöltése",
"title_progress": "Fájlok feltöltése (%(current)s / %(total)s)",
"upload_all_button": "Összes feltöltése",
"upload_n_others_button": {
"%(count)s másik fájlt feltöltése": "other",
"%(count)s másik fájl feltöltése": "one"
}
"upload_all_button": "Összes feltöltése"
},
"user_info": {
"admin_tools_section": "Adminisztrációs eszközök",
@ -3907,13 +3578,6 @@
"kick_space_warning": "Továbbra is hozzáférhetnek olyan helyekhez, ahol Ön nem adminisztrátor.",
"promote_warning": "Nem fogja tudni visszavonni ezt a változtatást, mert a felhasználót a sajátjával azonos szintre emeli.",
"redact": {
"confirm_button": {
"%(count)s db üzenet törlése": "other",
"1 üzenet törlése": "one"
},
"confirm_description_1": {
"%(count)s üzenetet készül törölni az alábbi felhasználótól: %(user)s. A művelet mindenki számára visszavonhatatlanul eltávolítja ezeket a beszélgetésekből. Biztos, hogy folytatja?": "other"
},
"confirm_description_2": "Ez sok üzenet esetén eltarthat egy darabig. Közben ne frissítse a klienst.",
"confirm_keep_state_explainer": "Törölje a kijelölést ha a rendszerüzeneteket is törölni szeretné ettől a felhasználótól (például tagságváltozás, profilváltozás…)",
"confirm_keep_state_label": "Rendszerüzenetek megtartása",
@ -4004,9 +3668,6 @@
"msisdn_lookup_failed": "A telefonszámot nem sikerült megtalálni",
"msisdn_lookup_failed_description": "Hiba történt a telefonszám megkeresése során",
"msisdn_transfer_failed": "A hívás átadása nem lehetséges",
"n_people_joined": {
"%(count)s személy belépett": "other"
},
"no_audio_input_description": "Nem található mikrofon. Ellenőrizze a beállításokat és próbálja újra.",
"no_audio_input_title": "Nem található mikrofon",
"no_media_perms_description": "Lehet, hogy kézileg kell engedélyeznie a(z) %(brand)s számára, hogy hozzáférjen a mikrofonjához és webkamerájához",

View file

@ -100,9 +100,7 @@
"ok": "Լավ",
"open": "Բաց(ել)",
"open_menu": "Բացել ընտրացանկը",
"pause": "Դադար",
"pin": "Քորոց",
"play": "Միացնել",
"proceed": "Շարունակել",
"quote": "Մեջբերում",
"react": "Արձագանքել",
@ -1850,7 +1848,6 @@
"other": "%(count)s ամրացված հաղորդագրություններ"
},
"limits": {
"one": "",
"other": "Դուք կարող եք ամրացնել միայն մինչև%(count)s վիջեթներ"
},
"menu": "Բացել մենյուն",
@ -3299,24 +3296,10 @@
"no_rooms_with_unread_threads": "Դուք դեռ չունեք սենյակներ, որտեղ կան չկարդացած թեմաներ։"
},
"time": {
"about_day_ago": "մոտ մեկ օր առաջ",
"about_hour_ago": "մոտ մեկ ժամ առաջ",
"about_minute_ago": "մոտ մեկ րոպե առաջ",
"date_at_time": "%(date)s ժամը %(time)s",
"few_seconds_ago": "մի քանի վայրկյան առաջ",
"hours_minutes_seconds_left": "Մնաց %(hours)sժ %(minutes)sր %(seconds)sվ",
"in_about_day": "մոտ մեկ օր անց",
"in_about_hour": "մոտ մեկ ժամ անց",
"in_about_minute": "մոտ մեկ րոպե անց",
"in_few_seconds": "մի քանի վայրկյան անց",
"in_n_days": "%(num)s օր անց",
"in_n_hours": "%(num)s ժամ անց",
"in_n_minutes": "%(num)s րոպեներ անց",
"left": "%(timeRemaining)s մնաց",
"minutes_seconds_left": "Մնաց %(minutes)sր %(seconds)sվ",
"n_days_ago": "%(num)s օր առաջ",
"n_hours_ago": "%(num)s ժամ առաջ",
"n_minutes_ago": "%(num)s րոպե առաջ",
"seconds_left": "Մնաց %(seconds)sվ",
"short_days": "%(value)sօր",
"short_days_hours_minutes_seconds": "%(days)sօր %(hours)sժ %(minutes)sր %(seconds)sվ",
@ -3371,11 +3354,9 @@
"unable_to_find": "Փորձեցինք բեռնել այս սենյակի ժամանակագրության որոշակի կետ, բայց չկարողացանք գտնել այն։"
},
"m.audio": {
"audio_player": "Աուդիո նվագարկիչ",
"error_downloading_audio": "Աուդիո ներբեռնման սխալ",
"error_processing_audio": "Ձայնային հաղորդագրության մշակման սխալ",
"error_processing_voice_message": "Ձայնային հաղորդագրության մշակման սխալ",
"unnamed_audio": "Անանուն աուդիո"
"error_processing_voice_message": "Ձայնային հաղորդագրության մշակման սխալ"
},
"m.beacon_info": {
"view_live_location": "Դիտել կենդանի գտնվելու վայրը"
@ -3783,7 +3764,6 @@
}
},
"truncated_list_n_more": {
"one": "",
"other": "Եվ ևս %(հաշվարկ)s..."
},
"unsupported_browser": {

View file

@ -99,9 +99,7 @@
"ok": "Oke",
"open": "Buka",
"open_menu": "Buka menu",
"pause": "Jeda",
"pin": "Sematkan",
"play": "Mainkan",
"proceed": "Lanjut",
"quote": "Kutip",
"react": "Bereaksi",
@ -3359,24 +3357,10 @@
"no_rooms_with_unread_threads": "Anda belum memiliki ruangan dengan utas yang belum dibaca."
},
"time": {
"about_day_ago": "1 hari yang lalu",
"about_hour_ago": "1 jam yang lalu",
"about_minute_ago": "1 menit yang lalu",
"date_at_time": "%(date)s pada %(time)s",
"few_seconds_ago": "beberapa detik yang lalu",
"hours_minutes_seconds_left": "Sisa %(hours)sj %(minutes)sm %(seconds)sd",
"in_about_day": "1 hari dari sekarang",
"in_about_hour": "1 jam dari sekarang",
"in_about_minute": "1 menit dari sekarang",
"in_few_seconds": "beberapa detik dari sekarang",
"in_n_days": "%(num)s hari dari sekarang",
"in_n_hours": "%(num)s jam dari sekarang",
"in_n_minutes": "%(num)s dari sekarang",
"left": "%(timeRemaining)sd lagi",
"minutes_seconds_left": "Sisa %(minutes)sm %(seconds)sd",
"n_days_ago": "%(num)s hari yang lalu",
"n_hours_ago": "%(num)s jam yang lalu",
"n_minutes_ago": "%(num)s menit yang lalu",
"seconds_left": "%(seconds)sd lagi",
"short_days": "%(value)sh",
"short_days_hours_minutes_seconds": "%(days)sh %(hours)sj %(minutes)sm %(seconds)sd",
@ -3431,11 +3415,9 @@
"unable_to_find": "Mencoba memuat titik spesifik di lini masa ruangan ini, tetapi tidak dapat menemukannya."
},
"m.audio": {
"audio_player": "Pemutar audio",
"error_downloading_audio": "Terjadi kesalahan mengunduh audio",
"error_processing_audio": "Terjadi kesalahan mengolah pesan suara",
"error_processing_voice_message": "Terjadi kesalahan mengolah pesan suara",
"unnamed_audio": "Audio tidak dinamai"
"error_processing_voice_message": "Terjadi kesalahan mengolah pesan suara"
},
"m.beacon_info": {
"view_live_location": "Tampilkan lokasi langsung"

View file

@ -79,9 +79,7 @@
"no": "Nei",
"ok": "Í lagi",
"open": "Opna",
"pause": "Bið",
"pin": "Pinni",
"play": "Spila",
"quote": "Tilvitnun",
"react": "Bregðast við",
"refresh": "Endurlesa",
@ -2301,24 +2299,10 @@
"show_thread_filter": "Sýna:"
},
"time": {
"about_day_ago": "fyrir um degi síðan",
"about_hour_ago": "fyrir um klukkustund síðan",
"about_minute_ago": "fyrir um það bil mínútu síðan",
"date_at_time": "%(date)s kl. %(time)s",
"few_seconds_ago": "fyrir örfáum sekúndum síðan",
"hours_minutes_seconds_left": "%(hours)sk %(minutes)sm %(seconds)ss eftir",
"in_about_day": "eftir um það bil einn dag",
"in_about_hour": "eftir um það bil klukkustund",
"in_about_minute": "eftir um það bil mínútu",
"in_few_seconds": "eftir nokkrar sekúndur",
"in_n_days": "eftir %(num)s daga",
"in_n_hours": "eftir %(num)s klukkustundir",
"in_n_minutes": "eftir %(num)s mínútur",
"left": "%(timeRemaining)s eftir",
"minutes_seconds_left": "%(minutes)sm %(seconds)ss eftir",
"n_days_ago": "fyrir %(num)s dögum síðan",
"n_hours_ago": "fyrir %(num)s klukkustundum síðan",
"n_minutes_ago": "fyrir %(num)s mínútum síðan",
"seconds_left": "%(seconds)ssek eftir",
"short_days_hours_minutes_seconds": "%(days)sd %(hours)sk %(minutes)sm %(seconds)ss",
"short_hours": "%(value)sklst",
@ -2357,8 +2341,7 @@
"m.audio": {
"error_downloading_audio": "Villa við að sækja hljóð",
"error_processing_audio": "Villa við meðhöndlun hljóðskilaboða",
"error_processing_voice_message": "Villa við meðhöndlun talskilaboða",
"unnamed_audio": "Nafnlaust hljóð"
"error_processing_voice_message": "Villa við meðhöndlun talskilaboða"
},
"m.beacon_info": {
"view_live_location": "Skoða staðsetningu í rauntíma"

View file

@ -86,9 +86,7 @@
"no": "No",
"ok": "OK",
"open": "Apri",
"pause": "Pausa",
"pin": "Spillo",
"play": "Riproduci",
"proceed": "Procedi",
"quote": "Cita",
"react": "Reagisci",
@ -2837,24 +2835,10 @@
"header": "Attività delle conversazioni"
},
"time": {
"about_day_ago": "circa un giorno fa",
"about_hour_ago": "circa un'ora fa",
"about_minute_ago": "circa un minuto fa",
"date_at_time": "%(date)s alle %(time)s",
"few_seconds_ago": "pochi secondi fa",
"hours_minutes_seconds_left": "%(hours)so %(minutes)sm %(seconds)ss rimasti",
"in_about_day": "circa un giorno da adesso",
"in_about_hour": "circa un'ora da adesso",
"in_about_minute": "circa un minuto da adesso",
"in_few_seconds": "pochi secondi da adesso",
"in_n_days": "%(num)s giorni da adesso",
"in_n_hours": "%(num)s ore da adesso",
"in_n_minutes": "%(num)s minuti da adesso",
"left": "%(timeRemaining)s rimasti",
"minutes_seconds_left": "%(minutes)sm %(seconds)ss rimasti",
"n_days_ago": "%(num)s giorni fa",
"n_hours_ago": "%(num)s ore fa",
"n_minutes_ago": "%(num)s minuti fa",
"seconds_left": "%(seconds)ss rimanenti",
"short_days": "%(value)sg",
"short_days_hours_minutes_seconds": "%(days)sg %(hours)so %(minutes)sm %(seconds)ss",
@ -2899,8 +2883,7 @@
"m.audio": {
"error_downloading_audio": "Errore di scaricamento dell'audio",
"error_processing_audio": "Errore elaborazione messaggio audio",
"error_processing_voice_message": "Errore di elaborazione del vocale",
"unnamed_audio": "Audio senza nome"
"error_processing_voice_message": "Errore di elaborazione del vocale"
},
"m.beacon_info": {
"view_live_location": "Vedi posizione in tempo reale"

View file

@ -78,9 +78,7 @@
"next": "次へ",
"no": "いいえ",
"open": "開く",
"pause": "一時停止",
"pin": "ピン",
"play": "再生",
"quote": "引用",
"react": "リアクション",
"refresh": "再読み込み",
@ -2582,24 +2580,10 @@
"show_thread_filter": "表示:"
},
"time": {
"about_day_ago": "約1日前",
"about_hour_ago": "約1時間前",
"about_minute_ago": "約1分前",
"date_at_time": "%(date)s %(time)s",
"few_seconds_ago": "数秒前",
"hours_minutes_seconds_left": "残り%(hours)s時間%(minutes)s分%(seconds)s秒",
"in_about_day": "今から約1日前",
"in_about_hour": "今から約1時間前",
"in_about_minute": "今から約1分前",
"in_few_seconds": "今から数秒前",
"in_n_days": "今から%(num)s日前",
"in_n_hours": "今から%(num)s時間前",
"in_n_minutes": "今から%(num)s分前",
"left": "残り%(timeRemaining)s",
"minutes_seconds_left": "残り%(minutes)s分%(seconds)s秒",
"n_days_ago": "%(num)s日前",
"n_hours_ago": "%(num)s時間前",
"n_minutes_ago": "%(num)s分前",
"seconds_left": "残り%(seconds)s秒",
"short_days": "%(value)s日",
"short_days_hours_minutes_seconds": "%(days)s日%(hours)s時%(minutes)s分%(seconds)s秒",
@ -2643,8 +2627,7 @@
"m.audio": {
"error_downloading_audio": "音声をダウンロードする際にエラーが発生しました",
"error_processing_audio": "音声メッセージを処理する際にエラーが発生しました",
"error_processing_voice_message": "音声メッセージを処理する際にエラーが発生しました",
"unnamed_audio": "名前のない音声"
"error_processing_voice_message": "音声メッセージを処理する際にエラーが発生しました"
},
"m.beacon_info": {
"view_live_location": "位置情報(ライブ)を表示"

View file

@ -67,9 +67,7 @@
"next": "შემდეგი",
"no": "არა",
"ok": "OK",
"pause": "პაუზა",
"pin": "$",
"play": "დაკვრა",
"proceed": "განაგრძეთ",
"quote": "ციტირება",
"react": "რეაგირება",
@ -2194,24 +2192,10 @@
},
"thread_view_back_action_label": "თემაში დაბრუნება",
"time": {
"about_day_ago": "დაახლოებით ერთი დღის წინ",
"about_hour_ago": "დაახლოებით ერთი საათის წინ",
"about_minute_ago": "დაახლოებით ერთი წუთის წინ",
"date_at_time": "%(date)s ზე %(time)s",
"few_seconds_ago": "რამდენიმე წამის წინ",
"hours_minutes_seconds_left": "%(hours)sს %(minutes)sწთ %(seconds)sწმ დარჩა",
"in_about_day": "დაახლოებით ერთი დღის შემდეგ",
"in_about_hour": "დაახლოებით ერთი საათის შემდეგ",
"in_about_minute": "დაახლოებით ერთი წუთის შემდეგ",
"in_few_seconds": "რამდენიმე წამის შემდეგ",
"in_n_days": "%(num)sდღეებიდან",
"in_n_hours": "%(num)sსაათის შემდეგ",
"in_n_minutes": "%(num)sწუთის შემდეგ",
"left": "%(timeRemaining)sდატოვა",
"minutes_seconds_left": "%(minutes)sწთ %(seconds)sწმ დარჩა",
"n_days_ago": "%(num)sდღის წინ",
"n_hours_ago": "%(num)sსაათის წინ",
"n_minutes_ago": "%(num)sწუთის წინ",
"seconds_left": "%(seconds)sწმ დარჩა",
"short_days": "%(value)sდ",
"short_days_hours_minutes_seconds": "%(days)sდ%(hours)s თ%(minutes)s მ%(seconds)s ს",
@ -2255,8 +2239,7 @@
"m.audio": {
"error_downloading_audio": "შეცდომა აუდიოს ჩამოტვირთვისას",
"error_processing_audio": "შეცდომა აუდიო შეტყობინების დამუშავებისას",
"error_processing_voice_message": "შეცდომა ხმოვანი შეტყობინების დამუშავებისას",
"unnamed_audio": "უსახელო აუდიო"
"error_processing_voice_message": "შეცდომა ხმოვანი შეტყობინების დამუშავებისას"
},
"m.beacon_info": {
"view_live_location": ""

View file

@ -3,14 +3,6 @@
"emoji_picker": "이모지 선택",
"jump_first_invite": "첫 초대로 건너뜁니다.",
"message_composer": "메세지 작성자",
"n_unread_messages": {
"%(count)s개의 읽지 않은 메시지.": "other",
"1개의 읽지 않은 메시지.": "one"
},
"n_unread_messages_mentions": {
"언급을 포함한 %(count)s개의 읽지 않은 메시지.": "other",
"1개의 읽지 않은 언급.": "one"
},
"recent_rooms": "최근 방",
"room_messsage_not_sent": "%(roomName)s에 미발송 메시지가 있는 방을 엽니다.",
"room_n_unread_invite": "공개 방 %(roomName)s에 초대 되었습니다.",
@ -98,9 +90,7 @@
"ok": "네",
"open": "열기",
"open_menu": "메뉴 열기",
"pause": "일시중지",
"pin": "핀",
"play": "재생",
"proceed": "진행",
"quote": "인용",
"react": "리액션",
@ -468,10 +458,6 @@
"advanced": "고급",
"all_chats": "모든 채팅",
"analytics": "정보 분석",
"and_n_others": {
"외 한 명...": "one",
"외 %(count)s명...": "other"
},
"appearance": "모습",
"application": "애플리케이션",
"are_you_sure": "확신합니까?",
@ -1417,10 +1403,6 @@
"inviting_user_and_n_others": {
"other": "%(user)s 및 다른 %(count)s명 초대 중"
},
"items_and_n_others": {
"<Items/>님 외 한 명": "one",
"<Items/>님 외 %(count)s명": "other"
},
"keyboard": {
"activate_button": "선택한 버튼 활성화",
"alt": "Alt",
@ -2105,9 +2087,6 @@
"some_messages_not_sent": "일부 메시지가 전송되지 않았습니다"
},
"unknown_status_code_for_timeline_jump": "알 수 없는 상태 코드",
"unread_notifications_predecessor": {
"이 방의 이전 버전에서 읽지 않은 %(count)s개의 알림이 있습니다.": "one"
},
"upgrade_error_description": "서버가 선택한 방 버전을 지원하는지 확인한 뒤에 다시 시도해주세요.",
"upgrade_error_title": "방 업그레이드 오류",
"upgrade_warning_bar": "이 방을 업그레이드하면 현재 방의 인스턴스는 문을 닫고 같은 이름의 업그레이드된 방을 만듭니다.",
@ -2115,9 +2094,6 @@
"upgrade_warning_bar_unstable": "이 방은 방 버전 <roomVersion />에서 실행 중이고, 이 홈서버가 <i>불안정</i>으로 표시됩니다.",
"upgrade_warning_bar_upgraded": "이 방은 이미 업그레이드됬습니다.",
"upload": {
"uploading_multiple_file": {
"%(filename)s 외 %(count)s개를 올리는 중": "other"
},
"uploading_single_file": "%(filename)s을(를) 올리는 중"
},
"video_room": "이 채팅방은 영상채팅방입니다",
@ -2186,9 +2162,6 @@
},
"room_options": "채팅방 옵션",
"show_less": "간단히 표시",
"show_n_more": {
"%(count)s개 더 보기": "other"
},
"show_previews": "메시지 미리 보기 표시",
"sort": "정렬",
"sort_by": "정렬 기준",
@ -3330,24 +3303,10 @@
"no_rooms_with_unread_threads": "아직 읽지 않은 스레드가 있는 방이 없습니다."
},
"time": {
"about_day_ago": "약 1일 전",
"about_hour_ago": "약 1 시간 전",
"about_minute_ago": "약 1분 전",
"date_at_time": "%(date)s, %(time)s",
"few_seconds_ago": "몇 초 전",
"hours_minutes_seconds_left": "남은 시간: %(hours)s시간 %(minutes)s분 %(seconds)s초",
"in_about_day": "하루 정도 후",
"in_about_hour": "지금부터 한 시간 정도 후에",
"in_about_minute": "지금부터 약 1분 후",
"in_few_seconds": "몇 초 후",
"in_n_days": "지금부터 %(num)s 일 후에",
"in_n_hours": "지금부터 %(num)s 시간 후",
"in_n_minutes": "지금부터 %(num)s분 후",
"left": "%(timeRemaining)s 남음",
"minutes_seconds_left": "남은 시간: %(minutes)s분 %(seconds)s초",
"n_days_ago": "%(num)s일 전",
"n_hours_ago": "%(num)s 시간 전",
"n_minutes_ago": "%(num)s분 전",
"seconds_left": "남은 시간: %(seconds)s초",
"short_days": "%(value)s일",
"short_days_hours_minutes_seconds": "%(days)s일 %(hours)s시간 %(minutes)s분 %(seconds)s초",
@ -3402,11 +3361,9 @@
"unable_to_find": "이 방의 타임라인에서 특정 시점을 불러오려고 했지만, 찾을 수 없었습니다."
},
"m.audio": {
"audio_player": "오디오 플레이어",
"error_downloading_audio": "오디오 다운로드 중 오류 발생",
"error_processing_audio": "오디오 메시지 처리 중 오류 발생",
"error_processing_voice_message": "음성 메시지 처리 중 오류 발생",
"unnamed_audio": "이름 없는 오디오"
"error_processing_voice_message": "음성 메시지 처리 중 오류 발생"
},
"m.beacon_info": {
"view_live_location": "실시간 위치 보기"
@ -3654,28 +3611,12 @@
"send_state_sending": "메시지를 보내는 중…",
"send_state_sent": "귀하의 메시지가 전송되었습니다",
"summary": {
"banned": {
"님이 %(count)s번 출입 금지 당했습니다": "other",
"님이 출입 금지 당했습니다": "one"
},
"banned_multiple": {
"이 %(count)s번 출입 금지 당했습니다": "other",
"이 출입 금지 당했습니다": "one"
},
"changed_avatar": {
"other": "%(oneUser)s님이 프로필 사진을 %(count)s회 변경했습니다"
},
"changed_avatar_multiple": {
"other": "%(severalUsers)s님이 프로필 사진을 %(count)s회 변경했습니다"
},
"changed_name": {
"%(oneUser)s님이 이름을 %(count)s번 바꿨습니다": "other",
"%(oneUser)s님이 이름을 바꿨습니다": "one"
},
"changed_name_multiple": {
"%(severalUsers)s이 이름을 %(count)s번 바꿨습니다": "other",
"%(severalUsers)s이 이름을 바꿨습니다": "one"
},
"format": "%(nameList)s %(transitionList)s",
"hidden_event": {
"other": "%(oneUser)s님이 숨겨진 메시지 %(count)s개를 보냈습니다"
@ -3683,60 +3624,12 @@
"hidden_event_multiple": {
"other": "%(severalUsers)s님이 숨겨진 메시지 %(count)s개를 보냈습니다"
},
"invite_withdrawn": {
"%(oneUser)s님이 초대를 %(count)s번 취소했습니다": "other",
"%(oneUser)s님이 초대를 취소했습니다": "one"
},
"invite_withdrawn_multiple": {
"%(severalUsers)s이 초대를 %(count)s번 취소했습니다": "other",
"%(severalUsers)s이 초대를 취소했습니다": "one"
},
"invited": {
"님이 초대받았습니다": "one",
"님이 %(count)s번 초대받았습니다": "other"
},
"invited_multiple": {
"%(count)s번 초대했습니다": "other",
"초대했습니다": "one"
},
"joined": {
"%(oneUser)s님이 %(count)s번 참여했습니다": "other",
"%(oneUser)s님이 참여했습니다": "one"
},
"joined_and_left": {
"%(oneUser)s님이 %(count)s번 참여하고 떠났습니다": "other",
"%(oneUser)s님이 참여하고 떠났습니다": "one"
},
"joined_and_left_multiple": {
"%(severalUsers)s님이 %(count)s번 참여하고 떠났습니다": "other",
"%(severalUsers)s님이 참여하고 떠났습니다": "one"
},
"joined_multiple": {
"%(severalUsers)s님이 참여했습니다": "one",
"%(severalUsers)s이 %(count)s번 참여했습니다": "other"
},
"kicked": {
"other": "%(count)s회 제거됨"
},
"kicked_multiple": {
"other": "%(count)s회 제거됨"
},
"left": {
"%(oneUser)s님이 %(count)s번 떠났습니다": "other",
"%(oneUser)s님이 떠났습니다": "one"
},
"left_multiple": {
"%(severalUsers)s이 %(count)s번 떠났습니다": "other",
"%(severalUsers)s이 떠났습니다": "one"
},
"no_change": {
"%(oneUser)s님이 %(count)s번 변경 사항을 되돌렸습니다": "other",
"%(oneUser)s님이 변경 사항을 되돌렸습니다": "one"
},
"no_change_multiple": {
"%(severalUsers)s이 %(count)s번 변경 사항을 되돌렸습니다": "other",
"%(severalUsers)s이 변경 사항을 되돌렸습니다": "one"
},
"pinned_events": {
"other": "%(oneUser)s님이 이 채팅방의 <a>고정된 메시지</a>를 %(count)s회 변경했습니다"
},
@ -3749,22 +3642,6 @@
"redacted_multiple": {
"other": "%(severalUsers)s님이 메시지 %(count)s개를 삭제했습니다"
},
"rejected_invite": {
"%(oneUser)s님이 초대를 %(count)s번 거절했습니다": "other",
"%(oneUser)s님이 초대를 거절했습니다": "one"
},
"rejected_invite_multiple": {
"%(severalUsers)s이 초대를 거절했습니다": "one",
"%(severalUsers)s이 초대를 %(count)s번 거절했습니다": "other"
},
"rejoined": {
"%(oneUser)s님이 %(count)s번 떠나고 다시 참여했습니다": "other",
"%(oneUser)s님이 떠나고 다시 참여했습니다": "one"
},
"rejoined_multiple": {
"%(severalUsers)s님이 떠나고 다시 참여했습니다": "one",
"%(severalUsers)s님이 %(count)s번 떠나고 다시 참여했습니다": "other"
},
"server_acls": {
"other": "%(oneUser)s님이 서버 ACL을 %(count)s회 변경했습니다."
},
@ -3780,10 +3657,6 @@
},
"thread_info_basic": "한 스레드에서",
"typing_indicator": {
"more_users": {
"%(names)s 외 %(count)s명이 적고 있습니다 …": "other",
"%(names)s 외 한 명이 적고 있습니다 …": "one"
},
"one_user": "%(displayName)s님이 적고 있습니다 …",
"two_users": "%(names)s님과 %(lastPerson)s님이 적고 있습니다 …"
},
@ -3795,9 +3668,6 @@
}
}
},
"truncated_list_n_more": {
"%(count)s개 더...": "other"
},
"unsupported_browser": {
"description": "계속 진행할 경우 일부 기능이 작동하지 않을 수 있으며, 향후 데이터 손실 위험이 있습니다. %(brand)s 을 계속 사용하려면 브라우저를 업데이트하십시오.",
"title": "%(brand)s 이 브라우저를 지원하지 않습니다"
@ -3838,10 +3708,7 @@
"not_image": "선택하신 파일은 유효한 이미지 파일이 아닙니다.",
"title": "파일 업로드",
"title_progress": "파일 업로드 (총 %(total)s개 중 %(current)s개)",
"upload_all_button": "전부 업로드",
"upload_n_others_button": {
"%(count)s개의 다른 파일 업로드": "one"
}
"upload_all_button": "전부 업로드"
},
"user_info": {
"admin_tools_section": "관리자 도구",
@ -3879,10 +3746,6 @@
"kick_space_warning": "관리자가 아닌 항목에는 여전히 접근할 수 있습니다.",
"promote_warning": "사용자를 자신과 같은 권한 등급으로 올리는 것은 취소할 수 없습니다.",
"redact": {
"confirm_button": {
"%(count)s개의 메시지 삭제": "other",
"1개의 메시지 삭제": "one"
},
"confirm_description_1": {
"other": "%(user)s님이 작성한 %(count)s개의 메시지를 삭제하려고 합니다. 이 작업은 되돌릴 수 없으며, 대화에 참여한 모든 사용자에게서 해당 메시지가 영구적으로 삭제됩니다. 계속하시겠습니까?"
},

Some files were not shown because too many files have changed in this diff Show more