From 770ff42496beb30edeeecf0bc141583ce53e113a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Jan 2026 15:07:03 +0000 Subject: [PATCH 01/13] Update eslint-plugins (#31661) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/shared-components/yarn.lock | 119 ++++++++++++----------- yarn.lock | 136 +++++++++++++++------------ 2 files changed, 137 insertions(+), 118 deletions(-) diff --git a/packages/shared-components/yarn.lock b/packages/shared-components/yarn.lock index ef3e8702d3..a54ab17639 100644 --- a/packages/shared-components/yarn.lock +++ b/packages/shared-components/yarn.lock @@ -613,13 +613,20 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz#9e585ab6086bef994c6e8a5b3a0481219ada862b" integrity sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ== -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.7.0": +"@eslint-community/eslint-utils@^4.2.0": version "4.9.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3" integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g== dependencies: eslint-visitor-keys "^3.4.3" +"@eslint-community/eslint-utils@^4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595" + integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ== + dependencies: + eslint-visitor-keys "^3.4.3" + "@eslint-community/regexpp@^4.6.1": version "4.12.1" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" @@ -1869,64 +1876,64 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/project-service@8.49.0": - version "8.49.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.49.0.tgz#ce220525c88cb2d23792b391c07e14cb9697651a" - integrity sha512-/wJN0/DKkmRUMXjZUXYZpD1NEQzQAAn9QWfGwo+Ai8gnzqH7tvqS7oNVdTjKqOcPyVIdZdyCMoqN66Ia789e7g== +"@typescript-eslint/project-service@8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.52.0.tgz#5fb4c16af4eda6d74c70cbc62f5d3f77b96e4cbe" + integrity sha512-xD0MfdSdEmeFa3OmVqonHi+Cciab96ls1UhIF/qX/O/gPu5KXD0bY9lu33jj04fjzrXHcuvjBcBC+D3SNSadaw== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.49.0" - "@typescript-eslint/types" "^8.49.0" - debug "^4.3.4" + "@typescript-eslint/tsconfig-utils" "^8.52.0" + "@typescript-eslint/types" "^8.52.0" + debug "^4.4.3" -"@typescript-eslint/scope-manager@8.49.0": - version "8.49.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.49.0.tgz#a3496765b57fb48035d671174552e462e5bffa63" - integrity sha512-npgS3zi+/30KSOkXNs0LQXtsg9ekZ8OISAOLGWA/ZOEn0ZH74Ginfl7foziV8DT+D98WfQ5Kopwqb/PZOaIJGg== +"@typescript-eslint/scope-manager@8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.52.0.tgz#9884ff690fad30380ccabfb08af1ac200af6b4e5" + integrity sha512-ixxqmmCcc1Nf8S0mS0TkJ/3LKcC8mruYJPOU6Ia2F/zUUR4pApW7LzrpU3JmtePbRUTes9bEqRc1Gg4iyRnDzA== dependencies: - "@typescript-eslint/types" "8.49.0" - "@typescript-eslint/visitor-keys" "8.49.0" + "@typescript-eslint/types" "8.52.0" + "@typescript-eslint/visitor-keys" "8.52.0" -"@typescript-eslint/tsconfig-utils@8.49.0", "@typescript-eslint/tsconfig-utils@^8.49.0": - version "8.49.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.49.0.tgz#857777c8e35dd1e564505833d8043f544442fbf4" - integrity sha512-8prixNi1/6nawsRYxet4YOhnbW+W9FK/bQPxsGB1D3ZrDzbJ5FXw5XmzxZv82X3B+ZccuSxo/X8q9nQ+mFecWA== +"@typescript-eslint/tsconfig-utils@8.52.0", "@typescript-eslint/tsconfig-utils@^8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.52.0.tgz#0296751c22ed05c83787a6eaec65ae221bd8b8ed" + integrity sha512-jl+8fzr/SdzdxWJznq5nvoI7qn2tNYV/ZBAEcaFMVXf+K6jmXvAFrgo/+5rxgnL152f//pDEAYAhhBAZGrVfwg== -"@typescript-eslint/types@8.49.0", "@typescript-eslint/types@^8.49.0": - version "8.49.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.49.0.tgz#c1bd3ebf956d9e5216396349ca23c58d74f06aee" - integrity sha512-e9k/fneezorUo6WShlQpMxXh8/8wfyc+biu6tnAqA81oWrEic0k21RHzP9uqqpyBBeBKu4T+Bsjy9/b8u7obXQ== +"@typescript-eslint/types@8.52.0", "@typescript-eslint/types@^8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.52.0.tgz#1eb0a16b324824bc23b89d109a267c38c9213c4a" + integrity sha512-LWQV1V4q9V4cT4H5JCIx3481iIFxH1UkVk+ZkGGAV1ZGcjGI9IoFOfg3O6ywz8QqCDEp7Inlg6kovMofsNRaGg== -"@typescript-eslint/typescript-estree@8.49.0": - version "8.49.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.49.0.tgz#99c5a53275197ccb4e849786dad68344e9924135" - integrity sha512-jrLdRuAbPfPIdYNppHJ/D0wN+wwNfJ32YTAm10eJVsFmrVpXQnDWBn8niCSMlWjvml8jsce5E/O+86IQtTbJWA== +"@typescript-eslint/typescript-estree@8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.52.0.tgz#2ad7721c671be2127951286cb7f44c4ce55b0591" + integrity sha512-XP3LClsCc0FsTK5/frGjolyADTh3QmsLp6nKd476xNI9CsSsLnmn4f0jrzNoAulmxlmNIpeXuHYeEQv61Q6qeQ== dependencies: - "@typescript-eslint/project-service" "8.49.0" - "@typescript-eslint/tsconfig-utils" "8.49.0" - "@typescript-eslint/types" "8.49.0" - "@typescript-eslint/visitor-keys" "8.49.0" - debug "^4.3.4" - minimatch "^9.0.4" - semver "^7.6.0" + "@typescript-eslint/project-service" "8.52.0" + "@typescript-eslint/tsconfig-utils" "8.52.0" + "@typescript-eslint/types" "8.52.0" + "@typescript-eslint/visitor-keys" "8.52.0" + debug "^4.4.3" + minimatch "^9.0.5" + semver "^7.7.3" tinyglobby "^0.2.15" - ts-api-utils "^2.1.0" + ts-api-utils "^2.4.0" "@typescript-eslint/utils@^8.8.1": - version "8.49.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.49.0.tgz#43b3b91d30afd6f6114532cf0b228f1790f43aff" - integrity sha512-N3W7rJw7Rw+z1tRsHZbK395TWSYvufBXumYtEGzypgMUthlg0/hmCImeA8hgO2d2G4pd7ftpxxul2J8OdtdaFA== + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.52.0.tgz#b249be8264899b80d996fa353b4b84da4662f962" + integrity sha512-wYndVMWkweqHpEpwPhwqE2lnD2DxC6WVLupU/DOt/0/v+/+iQbbzO3jOHjmBMnhu0DgLULvOaU4h4pwHYi2oRQ== dependencies: - "@eslint-community/eslint-utils" "^4.7.0" - "@typescript-eslint/scope-manager" "8.49.0" - "@typescript-eslint/types" "8.49.0" - "@typescript-eslint/typescript-estree" "8.49.0" + "@eslint-community/eslint-utils" "^4.9.1" + "@typescript-eslint/scope-manager" "8.52.0" + "@typescript-eslint/types" "8.52.0" + "@typescript-eslint/typescript-estree" "8.52.0" -"@typescript-eslint/visitor-keys@8.49.0": - version "8.49.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.49.0.tgz#8e450cc502c0d285cad9e84d400cf349a85ced6c" - integrity sha512-LlKaciDe3GmZFphXIc79THF/YYBugZ7FS1pO581E/edlVVNbZKDy93evqmrfQ9/Y4uN0vVhX4iuchq26mK/iiA== +"@typescript-eslint/visitor-keys@8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.52.0.tgz#50361c48a6302676230fe498f80f6decce4bf673" + integrity sha512-ink3/Zofus34nmBsPjow63FP5M7IGff0RKAgqR6+CFpdk22M7aLwC9gOcLGYqr7MczLPzZVERW9hRog3O4n1sQ== dependencies: - "@typescript-eslint/types" "8.49.0" + "@typescript-eslint/types" "8.52.0" eslint-visitor-keys "^4.2.1" "@ungap/structured-clone@^1.2.0", "@ungap/structured-clone@^1.3.0": @@ -3144,7 +3151,7 @@ de-indent@^1.0.2: resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== -debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0, debug@^4.4.3: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.4.0, debug@^4.4.3: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== @@ -3551,9 +3558,9 @@ eslint-plugin-matrix-org@^3.0.0: integrity sha512-xOPMeyLxOgoB2SsPhJmIc+drorZmXozSBo3X9whk/62DvbVpJcnththOCGx8ljYScADLb+baNOeN+wKZqwkldw== eslint-plugin-storybook@^10.0.7: - version "10.1.10" - resolved "https://registry.yarnpkg.com/eslint-plugin-storybook/-/eslint-plugin-storybook-10.1.10.tgz#030a55e58a5e96a513cbf873434a840abdaf6a7d" - integrity sha512-ITr6Aq3buR/DuDATkq1BafUVJLybyo676fY+tj9Zjd1Ak+UXBAMQcQ++tiBVVHm1RqADwM3b1o6bnWHK2fPPKw== + version "10.1.11" + resolved "https://registry.yarnpkg.com/eslint-plugin-storybook/-/eslint-plugin-storybook-10.1.11.tgz#80ea073c30ff6948fe34f728ff1c05333eb8579f" + integrity sha512-mbq2r2kK5+AcLl0XDJ3to91JOgzCbHOqj+J3n+FRw6drk+M1boRqMShSoMMm0HdzXPLmlr7iur+qJ5ZuhH6ayQ== dependencies: "@typescript-eslint/utils" "^8.8.1" @@ -5379,7 +5386,7 @@ minimatch@^5.1.0: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.3, minimatch@^9.0.4: +minimatch@^9.0.3, minimatch@^9.0.4, minimatch@^9.0.5: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== @@ -6348,7 +6355,7 @@ semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.2, semver@^7.7.2: +semver@^7.5.3, semver@^7.5.4, semver@^7.6.2, semver@^7.7.2, semver@^7.7.3: version "7.7.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== @@ -6912,10 +6919,10 @@ tree-kill@1.2.2, tree-kill@^1.2.2: resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== -ts-api-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" - integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== +ts-api-utils@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.4.0.tgz#2690579f96d2790253bdcf1ca35d569ad78f9ad8" + integrity sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA== ts-dedent@^2.0.0: version "2.2.0" diff --git a/yarn.lock b/yarn.lock index 91e8427be2..cd21aa82a1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1763,13 +1763,20 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/eslint-utils@^4.4.0", "@eslint-community/eslint-utils@^4.7.0", "@eslint-community/eslint-utils@^4.9.0": +"@eslint-community/eslint-utils@^4.4.0", "@eslint-community/eslint-utils@^4.9.0": version "4.9.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3" integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g== dependencies: eslint-visitor-keys "^3.4.3" +"@eslint-community/eslint-utils@^4.7.0", "@eslint-community/eslint-utils@^4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595" + integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ== + dependencies: + eslint-visitor-keys "^3.4.3" + "@eslint-community/regexpp@^4.10.0": version "4.12.2" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" @@ -3958,15 +3965,6 @@ "@typescript-eslint/visitor-keys" "8.49.0" debug "^4.3.4" -"@typescript-eslint/project-service@8.48.0": - version "8.48.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.48.0.tgz#c21f6f897fbc4e61c7b1e20906ea1d59594ccc2d" - integrity sha512-Ne4CTZyRh1BecBf84siv42wv5vQvVmgtk8AuiEffKTUo3DrBaGYZueJSxxBZ8fjk/N3DrgChH4TOdIOwOwiqqw== - dependencies: - "@typescript-eslint/tsconfig-utils" "^8.48.0" - "@typescript-eslint/types" "^8.48.0" - debug "^4.3.4" - "@typescript-eslint/project-service@8.49.0": version "8.49.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.49.0.tgz#ce220525c88cb2d23792b391c07e14cb9697651a" @@ -3976,13 +3974,14 @@ "@typescript-eslint/types" "^8.49.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.48.0": - version "8.48.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.48.0.tgz#8306afdf409364d4e434813f0df9a8557ddff751" - integrity sha512-uGSSsbrtJrLduti0Q1Q9+BF1/iFKaxGoQwjWOIVNJv0o6omrdyR8ct37m4xIl5Zzpkp69Kkmvom7QFTtue89YQ== +"@typescript-eslint/project-service@8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.52.0.tgz#5fb4c16af4eda6d74c70cbc62f5d3f77b96e4cbe" + integrity sha512-xD0MfdSdEmeFa3OmVqonHi+Cciab96ls1UhIF/qX/O/gPu5KXD0bY9lu33jj04fjzrXHcuvjBcBC+D3SNSadaw== dependencies: - "@typescript-eslint/types" "8.48.0" - "@typescript-eslint/visitor-keys" "8.48.0" + "@typescript-eslint/tsconfig-utils" "^8.52.0" + "@typescript-eslint/types" "^8.52.0" + debug "^4.4.3" "@typescript-eslint/scope-manager@8.49.0": version "8.49.0" @@ -3992,16 +3991,24 @@ "@typescript-eslint/types" "8.49.0" "@typescript-eslint/visitor-keys" "8.49.0" -"@typescript-eslint/tsconfig-utils@8.48.0", "@typescript-eslint/tsconfig-utils@^8.48.0": - version "8.48.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.48.0.tgz#05cf091cd9f24a8e047783ff979136df6cf1be04" - integrity sha512-WNebjBdFdyu10sR1M4OXTt2OkMd5KWIL+LLfeH9KhgP+jzfDV/LI3eXzwJ1s9+Yc0Kzo2fQCdY/OpdusCMmh6w== +"@typescript-eslint/scope-manager@8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.52.0.tgz#9884ff690fad30380ccabfb08af1ac200af6b4e5" + integrity sha512-ixxqmmCcc1Nf8S0mS0TkJ/3LKcC8mruYJPOU6Ia2F/zUUR4pApW7LzrpU3JmtePbRUTes9bEqRc1Gg4iyRnDzA== + dependencies: + "@typescript-eslint/types" "8.52.0" + "@typescript-eslint/visitor-keys" "8.52.0" "@typescript-eslint/tsconfig-utils@8.49.0", "@typescript-eslint/tsconfig-utils@^8.49.0": version "8.49.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.49.0.tgz#857777c8e35dd1e564505833d8043f544442fbf4" integrity sha512-8prixNi1/6nawsRYxet4YOhnbW+W9FK/bQPxsGB1D3ZrDzbJ5FXw5XmzxZv82X3B+ZccuSxo/X8q9nQ+mFecWA== +"@typescript-eslint/tsconfig-utils@8.52.0", "@typescript-eslint/tsconfig-utils@^8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.52.0.tgz#0296751c22ed05c83787a6eaec65ae221bd8b8ed" + integrity sha512-jl+8fzr/SdzdxWJznq5nvoI7qn2tNYV/ZBAEcaFMVXf+K6jmXvAFrgo/+5rxgnL152f//pDEAYAhhBAZGrVfwg== + "@typescript-eslint/type-utils@8.49.0": version "8.49.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.49.0.tgz#d8118a0c1896a78a22f01d3c176e9945409b085b" @@ -4013,30 +4020,20 @@ debug "^4.3.4" ts-api-utils "^2.1.0" -"@typescript-eslint/types@8.48.0", "@typescript-eslint/types@^8.47.0", "@typescript-eslint/types@^8.48.0": - version "8.48.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.48.0.tgz#f0dc5cf27217346e9b0d90556911e01d90d0f2a5" - integrity sha512-cQMcGQQH7kwKoVswD1xdOytxQR60MWKM1di26xSUtxehaDs/32Zpqsu5WJlXTtTTqyAVK8R7hvsUnIXRS+bjvA== - "@typescript-eslint/types@8.49.0", "@typescript-eslint/types@^8.49.0": version "8.49.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.49.0.tgz#c1bd3ebf956d9e5216396349ca23c58d74f06aee" integrity sha512-e9k/fneezorUo6WShlQpMxXh8/8wfyc+biu6tnAqA81oWrEic0k21RHzP9uqqpyBBeBKu4T+Bsjy9/b8u7obXQ== -"@typescript-eslint/typescript-estree@8.48.0": +"@typescript-eslint/types@8.52.0", "@typescript-eslint/types@^8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.52.0.tgz#1eb0a16b324824bc23b89d109a267c38c9213c4a" + integrity sha512-LWQV1V4q9V4cT4H5JCIx3481iIFxH1UkVk+ZkGGAV1ZGcjGI9IoFOfg3O6ywz8QqCDEp7Inlg6kovMofsNRaGg== + +"@typescript-eslint/types@^8.47.0": version "8.48.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.48.0.tgz#38b340524ce34ce0e46ca541a86cf6cad8872e5b" - integrity sha512-ljHab1CSO4rGrQIAyizUS6UGHHCiAYhbfcIZ1zVJr5nMryxlXMVWS3duFPSKvSUbFPwkXMFk1k0EMIjub4sRRQ== - dependencies: - "@typescript-eslint/project-service" "8.48.0" - "@typescript-eslint/tsconfig-utils" "8.48.0" - "@typescript-eslint/types" "8.48.0" - "@typescript-eslint/visitor-keys" "8.48.0" - debug "^4.3.4" - minimatch "^9.0.4" - semver "^7.6.0" - tinyglobby "^0.2.15" - ts-api-utils "^2.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.48.0.tgz#f0dc5cf27217346e9b0d90556911e01d90d0f2a5" + integrity sha512-cQMcGQQH7kwKoVswD1xdOytxQR60MWKM1di26xSUtxehaDs/32Zpqsu5WJlXTtTTqyAVK8R7hvsUnIXRS+bjvA== "@typescript-eslint/typescript-estree@8.49.0": version "8.49.0" @@ -4053,6 +4050,21 @@ tinyglobby "^0.2.15" ts-api-utils "^2.1.0" +"@typescript-eslint/typescript-estree@8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.52.0.tgz#2ad7721c671be2127951286cb7f44c4ce55b0591" + integrity sha512-XP3LClsCc0FsTK5/frGjolyADTh3QmsLp6nKd476xNI9CsSsLnmn4f0jrzNoAulmxlmNIpeXuHYeEQv61Q6qeQ== + dependencies: + "@typescript-eslint/project-service" "8.52.0" + "@typescript-eslint/tsconfig-utils" "8.52.0" + "@typescript-eslint/types" "8.52.0" + "@typescript-eslint/visitor-keys" "8.52.0" + debug "^4.4.3" + minimatch "^9.0.5" + semver "^7.7.3" + tinyglobby "^0.2.15" + ts-api-utils "^2.4.0" + "@typescript-eslint/utils@8.49.0": version "8.49.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.49.0.tgz#43b3b91d30afd6f6114532cf0b228f1790f43aff" @@ -4064,22 +4076,14 @@ "@typescript-eslint/typescript-estree" "8.49.0" "@typescript-eslint/utils@^8.0.0": - version "8.48.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.48.0.tgz#c1196befb664f50be10692c781c7fc7624c1a5f9" - integrity sha512-yTJO1XuGxCsSfIVt1+1UrLHtue8xz16V8apzPYI06W0HbEbEWHxHXgZaAgavIkoh+GeV6hKKd5jm0sS6OYxWXQ== + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.52.0.tgz#b249be8264899b80d996fa353b4b84da4662f962" + integrity sha512-wYndVMWkweqHpEpwPhwqE2lnD2DxC6WVLupU/DOt/0/v+/+iQbbzO3jOHjmBMnhu0DgLULvOaU4h4pwHYi2oRQ== dependencies: - "@eslint-community/eslint-utils" "^4.7.0" - "@typescript-eslint/scope-manager" "8.48.0" - "@typescript-eslint/types" "8.48.0" - "@typescript-eslint/typescript-estree" "8.48.0" - -"@typescript-eslint/visitor-keys@8.48.0": - version "8.48.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.48.0.tgz#6b07ef5661a85d08b01fbe4b8310a7311a6471af" - integrity sha512-T0XJMaRPOH3+LBbAfzR2jalckP1MSG/L9eUtY0DEzUyVaXJ/t6zN0nR7co5kz0Jko/nkSYCBRkz1djvjajVTTg== - dependencies: - "@typescript-eslint/types" "8.48.0" - eslint-visitor-keys "^4.2.1" + "@eslint-community/eslint-utils" "^4.9.1" + "@typescript-eslint/scope-manager" "8.52.0" + "@typescript-eslint/types" "8.52.0" + "@typescript-eslint/typescript-estree" "8.52.0" "@typescript-eslint/visitor-keys@8.49.0": version "8.49.0" @@ -4089,6 +4093,14 @@ "@typescript-eslint/types" "8.49.0" eslint-visitor-keys "^4.2.1" +"@typescript-eslint/visitor-keys@8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.52.0.tgz#50361c48a6302676230fe498f80f6decce4bf673" + integrity sha512-ink3/Zofus34nmBsPjow63FP5M7IGff0RKAgqR6+CFpdk22M7aLwC9gOcLGYqr7MczLPzZVERW9hRog3O4n1sQ== + dependencies: + "@typescript-eslint/types" "8.52.0" + eslint-visitor-keys "^4.2.1" + "@ungap/structured-clone@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" @@ -6792,9 +6804,9 @@ eslint-plugin-import@^2.25.4: tsconfig-paths "^3.15.0" eslint-plugin-jest@^29.0.0: - version "29.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-29.2.1.tgz#e56c5f79b6475dafa551ce8e762ac25d4bd21ea4" - integrity sha512-0WLIezrIxitUGbjMIGwznVzSIp0uFJV0PZ2fiSvpyVcxe+QMXKUt7MRhUpzdbctnnLwiOTOFkACplgB0wAglFw== + version "29.12.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-29.12.1.tgz#a0f78812f589796b09148a53a786866244185638" + integrity sha512-Rxo7r4jSANMBkXLICJKS0gjacgyopfNAsoS0e3R9AHnjoKuQOaaPfmsDJPi8UWwygI099OV/K/JhpYRVkxD4AA== dependencies: "@typescript-eslint/utils" "^8.0.0" @@ -9872,7 +9884,7 @@ minimatch@^5.0.1, minimatch@^5.1.0: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.4: +minimatch@^9.0.4, minimatch@^9.0.5: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== @@ -12108,7 +12120,7 @@ semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.2, semver@^7.6.3, semver@^7.7.2: +semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.2, semver@^7.6.3, semver@^7.7.2, semver@^7.7.3: version "7.7.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== @@ -13218,10 +13230,10 @@ truncate-utf8-bytes@^1.0.0: dependencies: utf8-byte-length "^1.0.1" -ts-api-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" - integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== +ts-api-utils@^2.1.0, ts-api-utils@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.4.0.tgz#2690579f96d2790253bdcf1ca35d569ad78f9ad8" + integrity sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA== ts-dedent@^2.0.0: version "2.2.0" From aa6509e01ce445453bfaee53c8b23c005d181583 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Jan 2026 15:08:29 +0000 Subject: [PATCH 02/13] Update storybook (#31658) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/shared-components/yarn.lock | 129 +++++++++++++-------------- yarn.lock | 89 +++++++++--------- 2 files changed, 108 insertions(+), 110 deletions(-) diff --git a/packages/shared-components/yarn.lock b/packages/shared-components/yarn.lock index a54ab17639..84305fa752 100644 --- a/packages/shared-components/yarn.lock +++ b/packages/shared-components/yarn.lock @@ -991,13 +991,12 @@ "@types/yargs" "^17.0.33" chalk "^4.1.2" -"@joshwooding/vite-plugin-react-docgen-typescript@0.6.1": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.6.1.tgz#f630b93ed13d5d07483c0ead42db793053b364a9" - integrity sha512-J4BaTocTOYFkMHIra1JDWrMWpNmBl4EkplIwHEsV8aeUOtdWjwSnln9U7twjMFTAEB7mptNtSKyVi1Y2W9sDJw== +"@joshwooding/vite-plugin-react-docgen-typescript@^0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.6.3.tgz#cc371b00b0c4f5a74e20da5c125a3529d379983b" + integrity sha512-9TGZuAX+liGkNKkwuo3FYJu7gHWT0vkBcf7GkOe7s7fmC19XwH/4u5u7sDIFrMooe558ORcmuBvBz7Ur5PlbHw== dependencies: - glob "^10.0.0" - magic-string "^0.30.0" + glob "^11.1.0" react-docgen-typescript "^2.2.2" "@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": @@ -1412,46 +1411,46 @@ "@sinonjs/commons" "^3.0.1" "@storybook/addon-a11y@^10.0.7": - version "10.1.5" - resolved "https://registry.yarnpkg.com/@storybook/addon-a11y/-/addon-a11y-10.1.5.tgz#9fc95df597243d0617a4d6f36d4534f949474988" - integrity sha512-dMUrkuQyvDfD6SdvV7F7cbjRrhHN0kqCNhRfg1i1IJuLuck6kiALpx8176KhWBcAkN/0J/1V75n7+F9YU/JlPA== + version "10.1.11" + resolved "https://registry.yarnpkg.com/@storybook/addon-a11y/-/addon-a11y-10.1.11.tgz#841c80aa9c9d913e07ffd8fd9622dc25757153ba" + integrity sha512-3sr6HmcDgW1+TQAV9QtWBE3HlGyfFXVZY3RECTNLNH6fRC+rYQCItisvQIVxQpyftLSQ8EAMN9JQzs495MjWNg== dependencies: "@storybook/global" "^5.0.0" axe-core "^4.2.0" "@storybook/addon-designs@^11.0.1": - version "11.1.0" - resolved "https://registry.yarnpkg.com/@storybook/addon-designs/-/addon-designs-11.1.0.tgz#c5d363d43b386a4fd6d9c1745b13e95a89a08761" - integrity sha512-i9lnUJ9x+UwThUpIjgg7QWvadhwmQ1ZuqcrTFe12giqyyYJKM6hdrUEuxGgSOrz3pkmDV/Bypq3G5ehwIDdKiw== + version "11.1.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-designs/-/addon-designs-11.1.1.tgz#54ab51526959f7f8c4cb832ee6e5fa8e418dedce" + integrity sha512-1KAmTzoW/qw4RfR8uft3pBgsdWHoQiMp9rt+nzhFLEBPd1Ru3YiTnVL/JBEiJkGXsQfQxMnAYRRwYgf+HTr4yw== dependencies: "@figspec/react" "^2.0.0" "@storybook/addon-docs@^10.0.7": - version "10.1.5" - resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-10.1.5.tgz#52bce4eed90240fc2b133caec1131962697c865a" - integrity sha512-2FfqFrfEeaKv8OerZCWt1b+dm7N/nizv1G2CnTZfWJ0TKxbPDH6kffAqC9lMnT3xAZjDWiBLdnVx2oouKdmSvw== + version "10.1.11" + resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-10.1.11.tgz#8b8bb3e53a10577e1029a84e69034b79da426479" + integrity sha512-Jwm291Fhim2eVcZIVlkG1B2skb0ZI9oru6nqMbJxceQZlvZmcIa4oxvS1oaMTKw2DJnCv97gLm57P/YvRZ8eUg== dependencies: "@mdx-js/react" "^3.0.0" - "@storybook/csf-plugin" "10.1.5" + "@storybook/csf-plugin" "10.1.11" "@storybook/icons" "^2.0.0" - "@storybook/react-dom-shim" "10.1.5" + "@storybook/react-dom-shim" "10.1.11" react "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" react-dom "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" ts-dedent "^2.0.0" -"@storybook/builder-vite@10.1.5": - version "10.1.5" - resolved "https://registry.yarnpkg.com/@storybook/builder-vite/-/builder-vite-10.1.5.tgz#27b11a0fb583e342cd041ea1eded7d012a0c278a" - integrity sha512-5alpNa+TQXK1zp9MeovUK/yIUkZqpIFUScUer6cYgidI96Boovn7OXt5oXQ8CqqpzuEtgCvz44TzCmgZoGv41g== +"@storybook/builder-vite@10.1.11": + version "10.1.11" + resolved "https://registry.yarnpkg.com/@storybook/builder-vite/-/builder-vite-10.1.11.tgz#877746967f9465e91ecf794f2bcec913321215e6" + integrity sha512-MMD09Ap7FyzDfWG961pkIMv/w684XXe1bBEi+wCEpHxvrgAd3j3A9w/Rqp9Am2uRDPCEdi1QgSzS3SGW3aGThQ== dependencies: - "@storybook/csf-plugin" "10.1.5" + "@storybook/csf-plugin" "10.1.11" "@vitest/mocker" "3.2.4" ts-dedent "^2.0.0" -"@storybook/csf-plugin@10.1.5": - version "10.1.5" - resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-10.1.5.tgz#8d147fa82c19e348991bbad88c1af8ef56a9d2a3" - integrity sha512-v+D7PVRkNUHznfoQg8yqpLWZIIbPddqHDSi1oBGdegF0Kv/lVsGqTZGRLroApsMu7BLwLhpcMID6ofxlfftWKg== +"@storybook/csf-plugin@10.1.11": + version "10.1.11" + resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-10.1.11.tgz#27f3166f3fe1bb708b61ece4141ce400dc11ad1d" + integrity sha512-Ant0NhgqHKzQsseeVTSetZCuDHHs0W2HRkHt51Kg/sUl0T/sDtfVA+fWZT8nGzGZqYSFkxqYPWjauPmIhPtaRw== dependencies: unplugin "^2.3.5" @@ -1465,33 +1464,33 @@ resolved "https://registry.yarnpkg.com/@storybook/icons/-/icons-2.0.1.tgz#1bd351db1d33bfccbbafa7b64fb413168f1a6616" integrity sha512-/smVjw88yK3CKsiuR71vNgWQ9+NuY2L+e8X7IMrFjexjm6ZR8ULrV2DRkTA61aV6ryefslzHEGDInGpnNeIocg== -"@storybook/react-dom-shim@10.1.5": - version "10.1.5" - resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-10.1.5.tgz#e39c169b093594de88dcb0c59b797ec23028ef0c" - integrity sha512-CsXcq26wINUgYP8KnfSuS60B10/Ag34YdcnWIEl9hM5UtTQ65WYJ9fVFqpzfnQrkpgRMd7iQjtmUhCe+4umnHg== +"@storybook/react-dom-shim@10.1.11": + version "10.1.11" + resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-10.1.11.tgz#8921d4fe0f579bd1f451d54ae4a9a9d71d1d5a3c" + integrity sha512-o8WPhRlZbORUWG9lAgDgJP0pi905VHJUFJr1Kp8980gHqtlemtnzjPxKy5vFwj6glNhAlK8SS8OOYzWP7hloTQ== "@storybook/react-vite@^10.0.7": - version "10.1.5" - resolved "https://registry.yarnpkg.com/@storybook/react-vite/-/react-vite-10.1.5.tgz#9da7bbb0b860526da51fa3d50993934b593588b3" - integrity sha512-27RiCVw5QZ/f9fXS8sGaPHuWkbHSoS66ifeakxHgbkbIXjVI4M6pWB7NUj49MwU1YUMOpB0T8KasvyMZzv/UPA== + version "10.1.11" + resolved "https://registry.yarnpkg.com/@storybook/react-vite/-/react-vite-10.1.11.tgz#aff3728ca284f4ed3ae0fd2891b5da7897edb3a3" + integrity sha512-qh1BCD25nIoiDfqwha+qBkl7pcG4WuzM+c8tsE63YEm8AFIbNKg5K8lVUoclF+4CpFz7IwBpWe61YUTDfp+91w== dependencies: - "@joshwooding/vite-plugin-react-docgen-typescript" "0.6.1" + "@joshwooding/vite-plugin-react-docgen-typescript" "^0.6.3" "@rollup/pluginutils" "^5.0.2" - "@storybook/builder-vite" "10.1.5" - "@storybook/react" "10.1.5" + "@storybook/builder-vite" "10.1.11" + "@storybook/react" "10.1.11" empathic "^2.0.0" magic-string "^0.30.0" react-docgen "^8.0.0" resolve "^1.22.8" tsconfig-paths "^4.2.0" -"@storybook/react@10.1.5": - version "10.1.5" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-10.1.5.tgz#0f6a1ec5c4338d3604d6e957d0f53f7ddf9a2e6a" - integrity sha512-M8fR7WVs79fPJHwRZxkz4XzIfzs/bN0heWdZX0D4iRjeIcY4nLM/tyalCcQDrGgrSJbgAAf4xd7KXaZzaZSAqA== +"@storybook/react@10.1.11": + version "10.1.11" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-10.1.11.tgz#365662c8db7822508dec5ae17b848dd8c9b1ab9c" + integrity sha512-rmMGmEwBaM2YpB8oDk2moM0MNjNMqtwyoPPZxjyruY9WVhYca8EDPGKEdRzUlb4qZJsTgLi7VU4eqg6LD/mL3Q== dependencies: "@storybook/global" "^5.0.0" - "@storybook/react-dom-shim" "10.1.5" + "@storybook/react-dom-shim" "10.1.11" react-docgen "^8.0.2" "@storybook/test-runner@^0.24.1": @@ -2551,9 +2550,9 @@ base64-js@^1.3.1: integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== baseline-browser-mapping@^2.9.0: - version "2.9.5" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.5.tgz#47f9549e0be1a84cd16651ac4c3b7d87a71408e6" - integrity sha512-D5vIoztZOq1XM54LUdttJVc96ggEsIfju2JBvht06pSzpckp3C7HReun67Bghzrtdsq9XdMGbSSB3v3GhMNmAA== + version "2.9.11" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz#53724708c8db5f97206517ecfe362dbe5181deea" + integrity sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ== bcrypt-pbkdf@^1.0.2: version "1.0.2" @@ -2800,9 +2799,9 @@ camelcase@^6.3.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001759: - version "1.0.30001760" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz#bdd1960fafedf8d5f04ff16e81460506ff9b798f" - integrity sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw== + version "1.0.30001762" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz#e4dbfeda63d33258cdde93e53af2023a13ba27d4" + integrity sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw== chai@^5.2.0: version "5.3.3" @@ -2843,9 +2842,9 @@ char-regex@^1.0.2: integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== check-error@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" - integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== + version "2.1.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.3.tgz#2427361117b70cca8dc89680ead32b157019caf5" + integrity sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA== chownr@^1.1.1: version "1.1.4" @@ -6096,9 +6095,9 @@ react-docgen@^8.0.0, react-docgen@^8.0.2: strip-indent "^4.0.0" "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0": - version "19.2.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.2.1.tgz#ce3527560bda4f997e47d10dab754825b3061f59" - integrity sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg== + version "19.2.3" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.2.3.tgz#f0b61d7e5c4a86773889fcc1853af3ed5f215b17" + integrity sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg== dependencies: scheduler "^0.27.0" @@ -6118,9 +6117,9 @@ react-merge-refs@^3.0.2: integrity sha512-MSZAfwFfdbEvwkKWP5EI5chuLYnNUxNS7vyS0i1Jp+wtd8J4Ga2ddzhaE68aMol2Z4vCnRM/oGOo1a3V75UPlw== "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0": - version "19.2.1" - resolved "https://registry.yarnpkg.com/react/-/react-19.2.1.tgz#8600fa205e58e2e807f6ef431c9f6492591a2700" - integrity sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw== + version "19.2.3" + resolved "https://registry.yarnpkg.com/react/-/react-19.2.3.tgz#d83e5e8e7a258cf6b4fe28640515f99b87cd19b8" + integrity sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA== readable-stream@^2.0.5, readable-stream@^2.3.8: version "2.3.8" @@ -6572,9 +6571,9 @@ stack-utils@^2.0.6: escape-string-regexp "^2.0.0" storybook@^10.0.7: - version "10.1.10" - resolved "https://registry.yarnpkg.com/storybook/-/storybook-10.1.10.tgz#9023e063f97cb2c38b4520e03d49336bcbf6661f" - integrity sha512-oK0t0jEogiKKfv5Z1ao4Of99+xWw1TMUGuGRYDQS4kp2yyBsJQEgu7NI7OLYsCDI6gzt5p3RPtl1lqdeVLUi8A== + version "10.1.11" + resolved "https://registry.yarnpkg.com/storybook/-/storybook-10.1.11.tgz#cdd75835eebad45edc93129f9468a32eb6c1f4bd" + integrity sha512-pKP5jXJYM4OjvNklGuHKO53wOCAwfx79KvZyOWHoi9zXUH5WVMFUe/ZfWyxXG/GTcj0maRgHGUjq/0I43r0dDQ== dependencies: "@storybook/global" "^5.0.0" "@storybook/icons" "^2.0.0" @@ -7069,9 +7068,9 @@ unrs-resolver@^1.7.11: "@unrs/resolver-binding-win32-x64-msvc" "1.11.1" update-browserslist-db@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz#cfb4358afa08b3d5731a2ecd95eebf4ddef8033e" - integrity sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA== + version "1.2.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" + integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w== dependencies: escalade "^3.2.0" picocolors "^1.1.1" @@ -7314,9 +7313,9 @@ write-file-atomic@^5.0.1: signal-exit "^4.0.1" ws@^8.18.0: - version "8.18.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" - integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== + version "8.19.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.19.0.tgz#ddc2bdfa5b9ad860204f5a72a4863a8895fd8c8b" + integrity sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg== wsl-utils@^0.1.0: version "0.1.0" diff --git a/yarn.lock b/yarn.lock index cd21aa82a1..6d5ebea7a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2206,13 +2206,12 @@ "@types/yargs" "^17.0.33" chalk "^4.1.2" -"@joshwooding/vite-plugin-react-docgen-typescript@0.6.1": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.6.1.tgz#f630b93ed13d5d07483c0ead42db793053b364a9" - integrity sha512-J4BaTocTOYFkMHIra1JDWrMWpNmBl4EkplIwHEsV8aeUOtdWjwSnln9U7twjMFTAEB7mptNtSKyVi1Y2W9sDJw== +"@joshwooding/vite-plugin-react-docgen-typescript@^0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.6.3.tgz#cc371b00b0c4f5a74e20da5c125a3529d379983b" + integrity sha512-9TGZuAX+liGkNKkwuo3FYJu7gHWT0vkBcf7GkOe7s7fmC19XwH/4u5u7sDIFrMooe558ORcmuBvBz7Ur5PlbHw== dependencies: - glob "^10.0.0" - magic-string "^0.30.0" + glob "^11.1.0" react-docgen-typescript "^2.2.2" "@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": @@ -3126,19 +3125,19 @@ dependencies: "@sinonjs/commons" "^3.0.1" -"@storybook/builder-vite@10.1.5": - version "10.1.5" - resolved "https://registry.yarnpkg.com/@storybook/builder-vite/-/builder-vite-10.1.5.tgz#27b11a0fb583e342cd041ea1eded7d012a0c278a" - integrity sha512-5alpNa+TQXK1zp9MeovUK/yIUkZqpIFUScUer6cYgidI96Boovn7OXt5oXQ8CqqpzuEtgCvz44TzCmgZoGv41g== +"@storybook/builder-vite@10.1.11": + version "10.1.11" + resolved "https://registry.yarnpkg.com/@storybook/builder-vite/-/builder-vite-10.1.11.tgz#877746967f9465e91ecf794f2bcec913321215e6" + integrity sha512-MMD09Ap7FyzDfWG961pkIMv/w684XXe1bBEi+wCEpHxvrgAd3j3A9w/Rqp9Am2uRDPCEdi1QgSzS3SGW3aGThQ== dependencies: - "@storybook/csf-plugin" "10.1.5" + "@storybook/csf-plugin" "10.1.11" "@vitest/mocker" "3.2.4" ts-dedent "^2.0.0" -"@storybook/csf-plugin@10.1.5": - version "10.1.5" - resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-10.1.5.tgz#8d147fa82c19e348991bbad88c1af8ef56a9d2a3" - integrity sha512-v+D7PVRkNUHznfoQg8yqpLWZIIbPddqHDSi1oBGdegF0Kv/lVsGqTZGRLroApsMu7BLwLhpcMID6ofxlfftWKg== +"@storybook/csf-plugin@10.1.11": + version "10.1.11" + resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-10.1.11.tgz#27f3166f3fe1bb708b61ece4141ce400dc11ad1d" + integrity sha512-Ant0NhgqHKzQsseeVTSetZCuDHHs0W2HRkHt51Kg/sUl0T/sDtfVA+fWZT8nGzGZqYSFkxqYPWjauPmIhPtaRw== dependencies: unplugin "^2.3.5" @@ -3152,33 +3151,33 @@ resolved "https://registry.yarnpkg.com/@storybook/icons/-/icons-2.0.1.tgz#1bd351db1d33bfccbbafa7b64fb413168f1a6616" integrity sha512-/smVjw88yK3CKsiuR71vNgWQ9+NuY2L+e8X7IMrFjexjm6ZR8ULrV2DRkTA61aV6ryefslzHEGDInGpnNeIocg== -"@storybook/react-dom-shim@10.1.5": - version "10.1.5" - resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-10.1.5.tgz#e39c169b093594de88dcb0c59b797ec23028ef0c" - integrity sha512-CsXcq26wINUgYP8KnfSuS60B10/Ag34YdcnWIEl9hM5UtTQ65WYJ9fVFqpzfnQrkpgRMd7iQjtmUhCe+4umnHg== +"@storybook/react-dom-shim@10.1.11": + version "10.1.11" + resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-10.1.11.tgz#8921d4fe0f579bd1f451d54ae4a9a9d71d1d5a3c" + integrity sha512-o8WPhRlZbORUWG9lAgDgJP0pi905VHJUFJr1Kp8980gHqtlemtnzjPxKy5vFwj6glNhAlK8SS8OOYzWP7hloTQ== "@storybook/react-vite@^10.0.7": - version "10.1.5" - resolved "https://registry.yarnpkg.com/@storybook/react-vite/-/react-vite-10.1.5.tgz#9da7bbb0b860526da51fa3d50993934b593588b3" - integrity sha512-27RiCVw5QZ/f9fXS8sGaPHuWkbHSoS66ifeakxHgbkbIXjVI4M6pWB7NUj49MwU1YUMOpB0T8KasvyMZzv/UPA== + version "10.1.11" + resolved "https://registry.yarnpkg.com/@storybook/react-vite/-/react-vite-10.1.11.tgz#aff3728ca284f4ed3ae0fd2891b5da7897edb3a3" + integrity sha512-qh1BCD25nIoiDfqwha+qBkl7pcG4WuzM+c8tsE63YEm8AFIbNKg5K8lVUoclF+4CpFz7IwBpWe61YUTDfp+91w== dependencies: - "@joshwooding/vite-plugin-react-docgen-typescript" "0.6.1" + "@joshwooding/vite-plugin-react-docgen-typescript" "^0.6.3" "@rollup/pluginutils" "^5.0.2" - "@storybook/builder-vite" "10.1.5" - "@storybook/react" "10.1.5" + "@storybook/builder-vite" "10.1.11" + "@storybook/react" "10.1.11" empathic "^2.0.0" magic-string "^0.30.0" react-docgen "^8.0.0" resolve "^1.22.8" tsconfig-paths "^4.2.0" -"@storybook/react@10.1.5": - version "10.1.5" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-10.1.5.tgz#0f6a1ec5c4338d3604d6e957d0f53f7ddf9a2e6a" - integrity sha512-M8fR7WVs79fPJHwRZxkz4XzIfzs/bN0heWdZX0D4iRjeIcY4nLM/tyalCcQDrGgrSJbgAAf4xd7KXaZzaZSAqA== +"@storybook/react@10.1.11": + version "10.1.11" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-10.1.11.tgz#365662c8db7822508dec5ae17b848dd8c9b1ab9c" + integrity sha512-rmMGmEwBaM2YpB8oDk2moM0MNjNMqtwyoPPZxjyruY9WVhYca8EDPGKEdRzUlb4qZJsTgLi7VU4eqg6LD/mL3Q== dependencies: "@storybook/global" "^5.0.0" - "@storybook/react-dom-shim" "10.1.5" + "@storybook/react-dom-shim" "10.1.11" react-docgen "^8.0.2" "@stylistic/eslint-plugin@^5.0.0": @@ -5052,9 +5051,9 @@ base64-js@^1.3.1: integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== baseline-browser-mapping@^2.9.0: - version "2.9.6" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.6.tgz#82de0f7ee5860df86d60daf0d9524ae7227eeee7" - integrity sha512-v9BVVpOTLB59C9E7aSnmIF8h7qRsFpx+A2nugVMTszEOMcfjlZMsXRm4LF23I3Z9AJxc8ANpIvzbzONoX9VJlg== + version "2.9.11" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz#53724708c8db5f97206517ecfe362dbe5181deea" + integrity sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ== batch@0.6.1: version "0.6.1" @@ -5367,9 +5366,9 @@ char-regex@^1.0.2: integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== check-error@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" - integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== + version "2.1.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.3.tgz#2427361117b70cca8dc89680ead32b157019caf5" + integrity sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA== chokidar@^3.5.3, chokidar@^3.6.0: version "3.6.0" @@ -12532,9 +12531,9 @@ stop-iteration-iterator@^1.1.0: internal-slot "^1.1.0" storybook@^10.0.7: - version "10.1.10" - resolved "https://registry.yarnpkg.com/storybook/-/storybook-10.1.10.tgz#9023e063f97cb2c38b4520e03d49336bcbf6661f" - integrity sha512-oK0t0jEogiKKfv5Z1ao4Of99+xWw1TMUGuGRYDQS4kp2yyBsJQEgu7NI7OLYsCDI6gzt5p3RPtl1lqdeVLUi8A== + version "10.1.11" + resolved "https://registry.yarnpkg.com/storybook/-/storybook-10.1.11.tgz#cdd75835eebad45edc93129f9468a32eb6c1f4bd" + integrity sha512-pKP5jXJYM4OjvNklGuHKO53wOCAwfx79KvZyOWHoi9zXUH5WVMFUe/ZfWyxXG/GTcj0maRgHGUjq/0I43r0dDQ== dependencies: "@storybook/global" "^5.0.0" "@storybook/icons" "^2.0.0" @@ -13499,9 +13498,9 @@ unrs-resolver@^1.7.11: "@unrs/resolver-binding-win32-x64-msvc" "1.11.1" update-browserslist-db@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz#cfb4358afa08b3d5731a2ecd95eebf4ddef8033e" - integrity sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA== + version "1.2.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" + integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w== dependencies: escalade "^3.2.0" picocolors "^1.1.1" @@ -14046,9 +14045,9 @@ ws@^7.3.1: integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== ws@^8.18.0: - version "8.18.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" - integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== + version "8.19.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.19.0.tgz#ddc2bdfa5b9ad860204f5a72a4863a8895fd8c8b" + integrity sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg== wsl-utils@^0.1.0: version "0.1.0" From adc5ee22cc173ae15353659b08a89d20f2eff823 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Jan 2026 15:09:55 +0000 Subject: [PATCH 03/13] Update peter-evans/create-pull-request action to v8 (#31666) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/playwright-image-updates.yaml | 2 +- .github/workflows/update-jitsi.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/playwright-image-updates.yaml b/.github/workflows/playwright-image-updates.yaml index 1ce3d767a7..15ea93e19b 100644 --- a/.github/workflows/playwright-image-updates.yaml +++ b/.github/workflows/playwright-image-updates.yaml @@ -32,7 +32,7 @@ jobs: - name: Create Pull Request id: cpr - uses: peter-evans/create-pull-request@22a9089034f40e5a961c8808d113e2c98fb63676 # v7 + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 # v8 with: token: ${{ secrets.ELEMENT_BOT_TOKEN }} branch: actions/playwright-image-updates diff --git a/.github/workflows/update-jitsi.yml b/.github/workflows/update-jitsi.yml index 67e3fb19c5..694393de07 100644 --- a/.github/workflows/update-jitsi.yml +++ b/.github/workflows/update-jitsi.yml @@ -23,7 +23,7 @@ jobs: run: "yarn update:jitsi" - name: Create Pull Request - uses: peter-evans/create-pull-request@22a9089034f40e5a961c8808d113e2c98fb63676 # v7 + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 # v8 with: token: ${{ secrets.ELEMENT_BOT_TOKEN }} branch: actions/jitsi-update From 867a6850e4cd14740cf5f68782d59be470f1ff39 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Jan 2026 15:19:25 +0000 Subject: [PATCH 04/13] Update octokit/graphql-action action to v3.0.2 (#31657) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/triage-move-review-requests.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/triage-move-review-requests.yml b/.github/workflows/triage-move-review-requests.yml index 4d8745f4bd..6933233c0a 100644 --- a/.github/workflows/triage-move-review-requests.yml +++ b/.github/workflows/triage-move-review-requests.yml @@ -9,7 +9,7 @@ jobs: name: Move PRs asking for design review to the design board runs-on: ubuntu-24.04 steps: - - uses: octokit/graphql-action@abaeca7ba4f0325d63b8de7ef943c2418d161b93 # v3.0.0 + - uses: octokit/graphql-action@ddde8ebb2493e79f390e6449c725c21663a67505 # v3.0.2 id: find_team_members with: headers: '{"GraphQL-Features": "projects_next_graphql"}' @@ -52,7 +52,7 @@ jobs: fi env: TEAM: "design" - - uses: octokit/graphql-action@abaeca7ba4f0325d63b8de7ef943c2418d161b93 # v3.0.0 + - uses: octokit/graphql-action@ddde8ebb2493e79f390e6449c725c21663a67505 # v3.0.2 id: add_to_project if: steps.any_matching_reviewers.outputs.match == 'true' with: @@ -76,7 +76,7 @@ jobs: name: Move PRs asking for design review to the design board runs-on: ubuntu-24.04 steps: - - uses: octokit/graphql-action@abaeca7ba4f0325d63b8de7ef943c2418d161b93 # v3.0.0 + - uses: octokit/graphql-action@ddde8ebb2493e79f390e6449c725c21663a67505 # v3.0.2 id: find_team_members with: headers: '{"GraphQL-Features": "projects_next_graphql"}' @@ -119,7 +119,7 @@ jobs: fi env: TEAM: "product" - - uses: octokit/graphql-action@abaeca7ba4f0325d63b8de7ef943c2418d161b93 # v3.0.0 + - uses: octokit/graphql-action@ddde8ebb2493e79f390e6449c725c21663a67505 # v3.0.2 id: add_to_project if: steps.any_matching_reviewers.outputs.match == 'true' with: From 4668c15ea16ea39d78b491418c14462d40f0ba7c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Jan 2026 15:22:01 +0000 Subject: [PATCH 05/13] Update dependency @formatjs/intl-segmenter to v12 (#31664) * Update dependency @formatjs/intl-segmenter to v12 * Update imports Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --------- Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Michael Telatynski <7t3chguy@gmail.com> --- package.json | 2 +- src/vector/index.ts | 4 ++-- yarn.lock | 41 +++++++++++++++++++++-------------------- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index 8e53e04d23..d6a4f000c0 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "@element-hq/web-shared-components": "link:packages/shared-components", "@fontsource/fira-code": "^5", "@fontsource/inter": "^5", - "@formatjs/intl-segmenter": "^11.5.7", + "@formatjs/intl-segmenter": "^12.0.0", "@matrix-org/analytics-events": "^0.30.0", "@matrix-org/emojibase-bindings": "^1.5.0", "@matrix-org/react-sdk-module-api": "^2.4.0", diff --git a/src/vector/index.ts b/src/vector/index.ts index e705014add..3dfcbe6cdf 100644 --- a/src/vector/index.ts +++ b/src/vector/index.ts @@ -11,7 +11,7 @@ Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; -import { shouldPolyfill as shouldPolyFillIntlSegmenter } from "@formatjs/intl-segmenter/should-polyfill"; +import { shouldPolyfill as shouldPolyFillIntlSegmenter } from "@formatjs/intl-segmenter/should-polyfill.js"; // These are things that can run before the skin loads - be careful not to reference the react-sdk though. import { parseQsFromFragment } from "./url_utils"; @@ -106,7 +106,7 @@ const supportedBrowser = checkBrowserFeatures(); // Load parallelism is based on research in https://github.com/element-hq/element-web/issues/12253 async function start(): Promise { if (shouldPolyFillIntlSegmenter()) { - await import(/* webpackChunkName: "intl-segmenter-polyfill" */ "@formatjs/intl-segmenter/polyfill-force"); + await import(/* webpackChunkName: "intl-segmenter-polyfill" */ "@formatjs/intl-segmenter/polyfill-force.js"); } // load init.ts async so that its code is not executed immediately and we can catch any exceptions diff --git a/yarn.lock b/yarn.lock index 6d5ebea7a0..190d9963aa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1853,37 +1853,38 @@ resolved "https://registry.yarnpkg.com/@fontsource/inter/-/inter-5.2.8.tgz#10c95d877d972c7de5bd4592309d42fb6a5e1a5b" integrity sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg== -"@formatjs/ecma402-abstract@2.3.6": - version "2.3.6" - resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz#d6ca9d3579054fe1e1a0a0b5e872e0d64922e4e1" - integrity sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw== +"@formatjs/ecma402-abstract@3.0.7": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-3.0.7.tgz#f5b211fd5fb075a96aefc195f641c7bf3e739698" + integrity sha512-U55Yulf37vBXN0C7gHm7hrxULVrcrhpQBcdLmIN2rpYpLfC5eIpa1JRX9efjU74gfzjK/MSmSG3Lxv3E4ZNZIw== dependencies: - "@formatjs/fast-memoize" "2.2.7" - "@formatjs/intl-localematcher" "0.6.2" + "@formatjs/fast-memoize" "3.0.2" + "@formatjs/intl-localematcher" "0.7.4" decimal.js "^10.4.3" tslib "^2.8.0" -"@formatjs/fast-memoize@2.2.7": - version "2.2.7" - resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz#707f9ddaeb522a32f6715bb7950b0831f4cc7b15" - integrity sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ== +"@formatjs/fast-memoize@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-3.0.2.tgz#0e1303b62fbf9dfc33fed52c60356bd5b2ed585c" + integrity sha512-YFApUDWFmjpPwAE7VcY7PYVjm6JaLZOAo0UfCQj1/OGi/1QtduG9kIBHmVC551M6AI01qvuP5kjbDebrZOT4Vg== dependencies: tslib "^2.8.0" -"@formatjs/intl-localematcher@0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz#e9ebe0b4082d7d48e5b2d753579fb7ece4eaefea" - integrity sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA== +"@formatjs/intl-localematcher@0.7.4": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.7.4.tgz#5385b6b45ce1907fc4376c53fed0a79ab6531d98" + integrity sha512-AWsSZupIBMU/y04Nj24CjohyNVyfItMJPxSzX5OJwedDEIbGLOHkPxCjAeLeiLF2dw4xmQA8psktdi9MaebBQw== dependencies: + "@formatjs/fast-memoize" "3.0.2" tslib "^2.8.0" -"@formatjs/intl-segmenter@^11.5.7": - version "11.7.12" - resolved "https://registry.yarnpkg.com/@formatjs/intl-segmenter/-/intl-segmenter-11.7.12.tgz#eed3e2166a342495dd823b59781560d379d28d6c" - integrity sha512-3QefVKh5HvaKU80lAFmqUsWmKYWcpiDymsc0HwFvhuVl0dAnMhtbNmzMN50UiC7ZsnbybelNGrm9GZPp4kbbZA== +"@formatjs/intl-segmenter@^12.0.0": + version "12.0.7" + resolved "https://registry.yarnpkg.com/@formatjs/intl-segmenter/-/intl-segmenter-12.0.7.tgz#0602ea3aae1699849f70d821eee3d1c2524c0536" + integrity sha512-ac/N+lNi9CaQcYeqrrEmiWWFd2g3navcJQmUG346h4EMRNrEHQzhBrizO2G4qAohvszI9qzSmCXxAmpr0NHLfQ== dependencies: - "@formatjs/ecma402-abstract" "2.3.6" - "@formatjs/intl-localematcher" "0.6.2" + "@formatjs/ecma402-abstract" "3.0.7" + "@formatjs/intl-localematcher" "0.7.4" tslib "^2.8.0" "@grpc/grpc-js@^1.11.1": From b8ecc0e07ed50c4e2408df51ebdeeff1939d9a6e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Jan 2026 15:41:37 +0000 Subject: [PATCH 06/13] Update GitHub Artifact Actions (#31665) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- .github/workflows/build_debian.yaml | 2 +- .github/workflows/build_develop.yml | 2 +- .github/workflows/end-to-end-tests-netlify.yaml | 2 +- .github/workflows/end-to-end-tests.yaml | 10 +++++----- .github/workflows/netlify.yaml | 2 +- .../shared-component-visual-tests-netlify.yaml | 2 +- .github/workflows/shared-component-visual-tests.yaml | 2 +- .github/workflows/tests.yml | 4 ++-- 9 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 74425f25b4..b2c765a9a8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -66,7 +66,7 @@ jobs: run: VERSION=$(scripts/get-version-from-git.sh) yarn build - name: Upload Artifact - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 with: name: webapp-${{ matrix.image }} path: webapp diff --git a/.github/workflows/build_debian.yaml b/.github/workflows/build_debian.yaml index 48c21c9dc5..6ad62f85aa 100644 --- a/.github/workflows/build_debian.yaml +++ b/.github/workflows/build_debian.yaml @@ -62,7 +62,7 @@ jobs: dpkg-gencontrol -v"$VERSION" -ldebian/tmp/DEBIAN/changelog dpkg-deb -Zxz --root-owner-group --build debian/tmp element-web.deb - - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 with: name: element-web.deb path: element-web.deb diff --git a/.github/workflows/build_develop.yml b/.github/workflows/build_develop.yml index a923e1db1d..0915a784c8 100644 --- a/.github/workflows/build_develop.yml +++ b/.github/workflows/build_develop.yml @@ -53,7 +53,7 @@ jobs: - run: mv dist/element-*.tar.gz dist/develop.tar.gz - - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 with: name: webapp path: dist/develop.tar.gz diff --git a/.github/workflows/end-to-end-tests-netlify.yaml b/.github/workflows/end-to-end-tests-netlify.yaml index 049f4ea343..a08efa220b 100644 --- a/.github/workflows/end-to-end-tests-netlify.yaml +++ b/.github/workflows/end-to-end-tests-netlify.yaml @@ -25,7 +25,7 @@ jobs: actions: read steps: - name: Download HTML report - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7 with: github-token: ${{ secrets.GITHUB_TOKEN }} run-id: ${{ github.event.workflow_run.id }} diff --git a/.github/workflows/end-to-end-tests.yaml b/.github/workflows/end-to-end-tests.yaml index d2bb8ecd52..df87229cf9 100644 --- a/.github/workflows/end-to-end-tests.yaml +++ b/.github/workflows/end-to-end-tests.yaml @@ -74,7 +74,7 @@ jobs: run: VERSION=$(scripts/get-version-from-git.sh) yarn build - name: Upload Artifact - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 with: name: webapp path: webapp @@ -128,7 +128,7 @@ jobs: repository: element-hq/element-web - name: 📥 Download artifact - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7 with: name: webapp path: webapp @@ -172,7 +172,7 @@ jobs: - name: Upload blob report to GitHub Actions Artifacts if: always() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 with: name: all-blob-reports-${{ matrix.project }}-${{ matrix.runner }} path: blob-report @@ -212,7 +212,7 @@ jobs: - name: Download blob reports from GitHub Actions Artifacts if: inputs.skip != true - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7 with: pattern: all-blob-reports-* path: all-blob-reports @@ -228,7 +228,7 @@ jobs: # Upload the HTML report even if one of our reporters fails, this can happen when stale screenshots are detected - name: Upload HTML report if: always() && inputs.skip != true - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 with: name: html-report path: playwright-report diff --git a/.github/workflows/netlify.yaml b/.github/workflows/netlify.yaml index ab2433c267..9507567ef6 100644 --- a/.github/workflows/netlify.yaml +++ b/.github/workflows/netlify.yaml @@ -28,7 +28,7 @@ jobs: Exercise caution. Use test accounts. - name: 📥 Download artifact - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7 with: github-token: ${{ secrets.GITHUB_TOKEN }} run-id: ${{ github.event.workflow_run.id }} diff --git a/.github/workflows/shared-component-visual-tests-netlify.yaml b/.github/workflows/shared-component-visual-tests-netlify.yaml index 816d899836..950dd8febf 100644 --- a/.github/workflows/shared-component-visual-tests-netlify.yaml +++ b/.github/workflows/shared-component-visual-tests-netlify.yaml @@ -27,7 +27,7 @@ jobs: run: "sudo apt-get install -y tree" - name: Download Diffs - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7 with: github-token: ${{ secrets.GITHUB_TOKEN }} run-id: ${{ github.event.workflow_run.id }} diff --git a/.github/workflows/shared-component-visual-tests.yaml b/.github/workflows/shared-component-visual-tests.yaml index 1652d58568..ebe821fa28 100644 --- a/.github/workflows/shared-component-visual-tests.yaml +++ b/.github/workflows/shared-component-visual-tests.yaml @@ -60,7 +60,7 @@ jobs: - name: Upload received images & diffs if: always() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 with: name: received-images path: packages/shared-components/playwright/shared-component-received diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index f18c33dc0d..a9f6d910de 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -84,7 +84,7 @@ jobs: - name: Upload Artifact if: env.ENABLE_COVERAGE == 'true' - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 with: name: coverage-${{ matrix.runner }} path: | @@ -159,7 +159,7 @@ jobs: - name: Upload Artifact if: env.ENABLE_COVERAGE == 'true' - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 with: name: coverage-sharedcomponents path: | From 126b216d449031f3445fcbf5c5a772f9ec0ed090 Mon Sep 17 00:00:00 2001 From: Valere Fedronic Date: Tue, 6 Jan 2026 16:49:48 +0100 Subject: [PATCH 07/13] fix flaky test by waiting for chat panel before counting messages (#31633) * fix flaky test by waiting for chat panel before counting messages * improve test stability by waiting for visibility before elements count() --- playwright/e2e/voip/element-call.spec.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/playwright/e2e/voip/element-call.spec.ts b/playwright/e2e/voip/element-call.spec.ts index 7c2494d2ae..18bf0c33c0 100644 --- a/playwright/e2e/voip/element-call.spec.ts +++ b/playwright/e2e/voip/element-call.spec.ts @@ -647,6 +647,10 @@ test.describe("Element Call", () => { // For this test we want to display the chat area alongside the widget await page.getByRole("button", { name: "Chat" }).click(); + // Wait for the right panel to show the timeline. + await expect( + page.locator(".mx_RightPanel .mx_TimelineCard").getByText("Alice created and configured the room."), + ).toBeVisible(); await page .locator('iframe[title="Element Call"]') @@ -654,7 +658,12 @@ test.describe("Element Call", () => { .getByRole("button", { name: "Send Room Message" }) .click(); - const messageSent = await page.getByText("I sent this once!!").count(); + const timelineLocator = page.locator(".mx_RightPanel .mx_TimelineCard"); + // First wait for the message to appear in the timeline then + // check the count. This improves test stability as we know the message has been sent. + await expect(timelineLocator.getByText("I sent this once!!")).toBeVisible(); + + const messageSent = await timelineLocator.getByText("I sent this once!!").count(); expect(messageSent).toBe(1); }); From 4dd128fd1809666a4b2ca9d2b5ec4a12daf588ae Mon Sep 17 00:00:00 2001 From: ElementRobot Date: Tue, 6 Jan 2026 16:11:27 +0000 Subject: [PATCH 08/13] [create-pull-request] automated change (#31580) Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com> --- playwright/testcontainers/mas.ts | 2 +- playwright/testcontainers/synapse.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/playwright/testcontainers/mas.ts b/playwright/testcontainers/mas.ts index 61cc53bbc9..a0f2c18395 100644 --- a/playwright/testcontainers/mas.ts +++ b/playwright/testcontainers/mas.ts @@ -10,7 +10,7 @@ import { type StartedPostgreSqlContainer, } from "@element-hq/element-web-playwright-common/lib/testcontainers"; -const TAG = "main@sha256:2c5966c2ff06458ac5cbae959f12e19d30e3ebb63c641d31ec1ae08abccb9c6d"; +const TAG = "main@sha256:7892272f66adcefda74126f9f0c60a25ad7e83f0cda2834233e4283c8333eb19"; /** * MatrixAuthenticationServiceContainer which freezes the docker digest to diff --git a/playwright/testcontainers/synapse.ts b/playwright/testcontainers/synapse.ts index 1359cd0f69..7ff6ca2a21 100644 --- a/playwright/testcontainers/synapse.ts +++ b/playwright/testcontainers/synapse.ts @@ -7,7 +7,7 @@ Please see LICENSE files in the repository root for full details. import { SynapseContainer as BaseSynapseContainer } from "@element-hq/element-web-playwright-common/lib/testcontainers"; -const TAG = "develop@sha256:7c3dce1d2b44fdc4b1494c5b8f4792018733ad323f823b88aac30c883d09fb35"; +const TAG = "develop@sha256:8226bae1a8bc606721a91e3b3e07cb5c8a8e5718c61af7e2c9620479efa04d26"; /** * SynapseContainer which freezes the docker digest to stabilise tests, From d7a58216aeb843ca91cac72f5e7b24d85f5857b6 Mon Sep 17 00:00:00 2001 From: ElementRobot Date: Wed, 7 Jan 2026 07:27:41 +0000 Subject: [PATCH 09/13] [create-pull-request] automated change (#31670) Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com> --- playwright/testcontainers/mas.ts | 2 +- playwright/testcontainers/synapse.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/playwright/testcontainers/mas.ts b/playwright/testcontainers/mas.ts index a0f2c18395..58528c7e90 100644 --- a/playwright/testcontainers/mas.ts +++ b/playwright/testcontainers/mas.ts @@ -10,7 +10,7 @@ import { type StartedPostgreSqlContainer, } from "@element-hq/element-web-playwright-common/lib/testcontainers"; -const TAG = "main@sha256:7892272f66adcefda74126f9f0c60a25ad7e83f0cda2834233e4283c8333eb19"; +const TAG = "main@sha256:48456909ce44ca9dae1a6c1abe1a2000cc2a021743d66d0b29f54077b38a09cf"; /** * MatrixAuthenticationServiceContainer which freezes the docker digest to diff --git a/playwright/testcontainers/synapse.ts b/playwright/testcontainers/synapse.ts index 7ff6ca2a21..6ec3036b7e 100644 --- a/playwright/testcontainers/synapse.ts +++ b/playwright/testcontainers/synapse.ts @@ -7,7 +7,7 @@ Please see LICENSE files in the repository root for full details. import { SynapseContainer as BaseSynapseContainer } from "@element-hq/element-web-playwright-common/lib/testcontainers"; -const TAG = "develop@sha256:8226bae1a8bc606721a91e3b3e07cb5c8a8e5718c61af7e2c9620479efa04d26"; +const TAG = "develop@sha256:106108a210f7194e0615a4d5df3502d34ee8962359b425f78d6d9d78d6b9599a"; /** * SynapseContainer which freezes the docker digest to stabilise tests, From 7f057faaad523309969247b6143b1e9dac873a29 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 7 Jan 2026 10:22:26 +0000 Subject: [PATCH 10/13] Switch emoji picker to use emoji for header icons (#31645) * Replace icons with Compound alternatives Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Remove unused icon Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Replace more icons with Compound alternatives Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Swap for outline icons in spotlight & update screenshots Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Switch emoji picker to use emoji for header icons Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Update screenshot Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Update football emoji Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Tweak emoji and fix disabled state Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --------- Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .../CIDER.spec.ts/emoji-picker-linux.png | Bin 41761 -> 44201 bytes .../emoji-picker-small-linux.png | Bin 25614 -> 27700 bytes res/css/views/emojipicker/_EmojiPicker.pcss | 54 ++++-------------- res/img/emojipicker/activity.svg | 14 ----- res/img/emojipicker/flags.svg | 14 ----- res/img/emojipicker/foods.svg | 14 ----- res/img/emojipicker/nature.svg | 15 ----- res/img/emojipicker/objects.svg | 15 ----- res/img/emojipicker/people.svg | 15 ----- res/img/emojipicker/places.svg | 15 ----- res/img/emojipicker/recent.svg | 15 ----- res/img/emojipicker/symbols.svg | 14 ----- src/components/views/emojipicker/Category.tsx | 2 + .../views/emojipicker/EmojiPicker.tsx | 26 ++++----- src/components/views/emojipicker/Header.tsx | 6 +- 15 files changed, 27 insertions(+), 192 deletions(-) delete mode 100644 res/img/emojipicker/activity.svg delete mode 100644 res/img/emojipicker/flags.svg delete mode 100644 res/img/emojipicker/foods.svg delete mode 100644 res/img/emojipicker/nature.svg delete mode 100644 res/img/emojipicker/objects.svg delete mode 100644 res/img/emojipicker/people.svg delete mode 100644 res/img/emojipicker/places.svg delete mode 100644 res/img/emojipicker/recent.svg delete mode 100644 res/img/emojipicker/symbols.svg diff --git a/playwright/snapshots/composer/CIDER.spec.ts/emoji-picker-linux.png b/playwright/snapshots/composer/CIDER.spec.ts/emoji-picker-linux.png index 27d91ca70f5aaa0f722e5e2a31bf1677ef0efe7f..939ab008e024e04148f932ffd648a0a9f3ce5fd3 100644 GIT binary patch literal 44201 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 XfD_Wg?jL|0d8Z(wB3&(M6!gCU(WZQy literal 41761 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 diff --git a/playwright/snapshots/composer/CIDER.spec.ts/emoji-picker-small-linux.png b/playwright/snapshots/composer/CIDER.spec.ts/emoji-picker-small-linux.png index d9238f36fbeb5a5cd9aa1a98383b46794b861f05..75bb1b41724ebafc5375127f91f250c6508b2c5b 100644 GIT binary patch literal 27700 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 - - - - diff --git a/res/img/emojipicker/flags.svg b/res/img/emojipicker/flags.svg deleted file mode 100644 index bd0a935265..0000000000 --- a/res/img/emojipicker/flags.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - diff --git a/res/img/emojipicker/foods.svg b/res/img/emojipicker/foods.svg deleted file mode 100644 index 57a15976d8..0000000000 --- a/res/img/emojipicker/foods.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - diff --git a/res/img/emojipicker/nature.svg b/res/img/emojipicker/nature.svg deleted file mode 100644 index a4778be927..0000000000 --- a/res/img/emojipicker/nature.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/res/img/emojipicker/objects.svg b/res/img/emojipicker/objects.svg deleted file mode 100644 index e0d39f985a..0000000000 --- a/res/img/emojipicker/objects.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/res/img/emojipicker/people.svg b/res/img/emojipicker/people.svg deleted file mode 100644 index c2fdb579f6..0000000000 --- a/res/img/emojipicker/people.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/res/img/emojipicker/places.svg b/res/img/emojipicker/places.svg deleted file mode 100644 index 0947baaf04..0000000000 --- a/res/img/emojipicker/places.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/res/img/emojipicker/recent.svg b/res/img/emojipicker/recent.svg deleted file mode 100644 index 2fdcc65cd2..0000000000 --- a/res/img/emojipicker/recent.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/res/img/emojipicker/symbols.svg b/res/img/emojipicker/symbols.svg deleted file mode 100644 index a2b86d9ec8..0000000000 --- a/res/img/emojipicker/symbols.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - diff --git a/src/components/views/emojipicker/Category.tsx b/src/components/views/emojipicker/Category.tsx index 21e5c97c33..17f33d9346 100644 --- a/src/components/views/emojipicker/Category.tsx +++ b/src/components/views/emojipicker/Category.tsx @@ -22,6 +22,8 @@ export type CategoryKey = keyof typeof DATA_BY_CATEGORY | "recent"; export interface ICategory { id: CategoryKey; name: string; + // Emoji to show in the header for this category + emoji: string; enabled: boolean; // Whether the category is currently visible visible: boolean; diff --git a/src/components/views/emojipicker/EmojiPicker.tsx b/src/components/views/emojipicker/EmojiPicker.tsx index 9ba2445102..192a40b782 100644 --- a/src/components/views/emojipicker/EmojiPicker.tsx +++ b/src/components/views/emojipicker/EmojiPicker.tsx @@ -81,19 +81,16 @@ class EmojiPicker extends React.Component { const hasRecentlyUsed = this.recentlyUsed.length > 0; - const categoryConfig: Array<{ - id: CategoryKey; - name: string; - }> = [ - { id: "recent", name: _t("emoji|category_frequently_used") }, - { id: "people", name: _t("emoji|category_smileys_people") }, - { id: "nature", name: _t("emoji|category_animals_nature") }, - { id: "foods", name: _t("emoji|category_food_drink") }, - { id: "activity", name: _t("emoji|category_activities") }, - { id: "places", name: _t("emoji|category_travel_places") }, - { id: "objects", name: _t("emoji|category_objects") }, - { id: "symbols", name: _t("emoji|category_symbols") }, - { id: "flags", name: _t("emoji|category_flags") }, + const categoryConfig: Pick[] = [ + { id: "recent", name: _t("emoji|category_frequently_used"), emoji: "🕒" }, + { id: "people", name: _t("emoji|category_smileys_people"), emoji: "😀" }, + { id: "nature", name: _t("emoji|category_animals_nature"), emoji: "🐕" }, + { id: "foods", name: _t("emoji|category_food_drink"), emoji: "🍎" }, + { id: "activity", name: _t("emoji|category_activities"), emoji: "⚽️" }, + { id: "places", name: _t("emoji|category_travel_places"), emoji: "🚗" }, + { id: "objects", name: _t("emoji|category_objects"), emoji: "💡" }, + { id: "symbols", name: _t("emoji|category_symbols"), emoji: "⁉️" }, + { id: "flags", name: _t("emoji|category_flags"), emoji: "🏁" }, ]; this.categories = categoryConfig.map((config) => { @@ -109,8 +106,7 @@ class EmojiPicker extends React.Component { firstVisible = !hasRecentlyUsed; } return { - id: config.id, - name: config.name, + ...config, enabled: isEnabled, visible: isVisible, firstVisible: firstVisible, diff --git a/src/components/views/emojipicker/Header.tsx b/src/components/views/emojipicker/Header.tsx index ed2c6b9f21..5b57c065b5 100644 --- a/src/components/views/emojipicker/Header.tsx +++ b/src/components/views/emojipicker/Header.tsx @@ -84,7 +84,7 @@ class Header extends React.PureComponent { onKeyDown={this.onKeyDown} > {this.props.categories.map((category) => { - const classes = classNames(`mx_EmojiPicker_anchor mx_EmojiPicker_anchor_${category.id}`, { + const classes = classNames("mx_EmojiPicker_anchor", { mx_EmojiPicker_anchor_visible: category.visible, }); // Properties of this button are also modified by EmojiPicker's updateVisibility in DOM. @@ -100,7 +100,9 @@ class Header extends React.PureComponent { tabIndex={category.firstVisible ? 0 : -1} // roving aria-selected={category.visible} aria-controls={`mx_EmojiPicker_category_${category.id}`} - /> + > + {category.emoji} + ); })} From 4ee04d0661169495a0f74767c393dad4548f97a9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 Jan 2026 10:52:05 +0000 Subject: [PATCH 11/13] Update npm non-major dependencies (#31662) * Update npm non-major dependencies * Make types happier Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --------- Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Michael Telatynski <7t3chguy@gmail.com> --- package.json | 4 +- packages/shared-components/yarn.lock | 422 ++++++------------ src/components/utils/ListView.tsx | 7 + .../views/rooms/RoomListPanel/RoomList.tsx | 20 +- yarn.lock | 26 +- 5 files changed, 171 insertions(+), 308 deletions(-) diff --git a/package.json b/package.json index d6a4f000c0..9e8e703749 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "postinstall": "patch-package" }, "resolutions": { - "**/pretty-format/react-is": "19.2.1", + "**/pretty-format/react-is": "19.2.3", "@types/react": "19.2.7", "@types/react-dom": "19.2.3", "oidc-client-ts": "3.4.1", @@ -137,7 +137,7 @@ "opus-recorder": "^8.0.3", "pako": "^2.0.3", "png-chunks-extract": "^1.0.0", - "posthog-js": "1.302.2", + "posthog-js": "1.313.0", "qrcode": "1.5.4", "re-resizable": "6.11.2", "react": "^19.0.0", diff --git a/packages/shared-components/yarn.lock b/packages/shared-components/yarn.lock index 84305fa752..6eb17d9052 100644 --- a/packages/shared-components/yarn.lock +++ b/packages/shared-components/yarn.lock @@ -353,261 +353,131 @@ dependencies: tslib "^2.4.0" -"@esbuild/aix-ppc64@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz#80fcbe36130e58b7670511e888b8e88a259ed76c" - integrity sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA== - "@esbuild/aix-ppc64@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz#521cbd968dcf362094034947f76fa1b18d2d403c" integrity sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw== -"@esbuild/android-arm64@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz#8aa4965f8d0a7982dc21734bf6601323a66da752" - integrity sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg== - "@esbuild/android-arm64@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz#61ea550962d8aa12a9b33194394e007657a6df57" integrity sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA== -"@esbuild/android-arm@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.12.tgz#300712101f7f50f1d2627a162e6e09b109b6767a" - integrity sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg== - "@esbuild/android-arm@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.27.2.tgz#554887821e009dd6d853f972fde6c5143f1de142" integrity sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA== -"@esbuild/android-x64@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.12.tgz#87dfb27161202bdc958ef48bb61b09c758faee16" - integrity sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg== - "@esbuild/android-x64@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.27.2.tgz#a7ce9d0721825fc578f9292a76d9e53334480ba2" integrity sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A== -"@esbuild/darwin-arm64@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz#79197898ec1ff745d21c071e1c7cc3c802f0c1fd" - integrity sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg== - "@esbuild/darwin-arm64@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz#2cb7659bd5d109803c593cfc414450d5430c8256" integrity sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg== -"@esbuild/darwin-x64@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz#146400a8562133f45c4d2eadcf37ddd09718079e" - integrity sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA== - "@esbuild/darwin-x64@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz#e741fa6b1abb0cd0364126ba34ca17fd5e7bf509" integrity sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA== -"@esbuild/freebsd-arm64@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz#1c5f9ba7206e158fd2b24c59fa2d2c8bb47ca0fe" - integrity sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg== - "@esbuild/freebsd-arm64@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz#2b64e7116865ca172d4ce034114c21f3c93e397c" integrity sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g== -"@esbuild/freebsd-x64@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz#ea631f4a36beaac4b9279fa0fcc6ca29eaeeb2b3" - integrity sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ== - "@esbuild/freebsd-x64@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz#e5252551e66f499e4934efb611812f3820e990bb" integrity sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA== -"@esbuild/linux-arm64@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz#e1066bce58394f1b1141deec8557a5f0a22f5977" - integrity sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ== - "@esbuild/linux-arm64@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz#dc4acf235531cd6984f5d6c3b13dbfb7ddb303cb" integrity sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw== -"@esbuild/linux-arm@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz#452cd66b20932d08bdc53a8b61c0e30baf4348b9" - integrity sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw== - "@esbuild/linux-arm@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz#56a900e39240d7d5d1d273bc053daa295c92e322" integrity sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw== -"@esbuild/linux-ia32@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz#b24f8acc45bcf54192c7f2f3be1b53e6551eafe0" - integrity sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA== - "@esbuild/linux-ia32@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz#d4a36d473360f6870efcd19d52bbfff59a2ed1cc" integrity sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w== -"@esbuild/linux-loong64@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz#f9cfffa7fc8322571fbc4c8b3268caf15bd81ad0" - integrity sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng== - "@esbuild/linux-loong64@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz#fcf0ab8c3eaaf45891d0195d4961cb18b579716a" integrity sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg== -"@esbuild/linux-mips64el@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz#575a14bd74644ffab891adc7d7e60d275296f2cd" - integrity sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw== - "@esbuild/linux-mips64el@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz#598b67d34048bb7ee1901cb12e2a0a434c381c10" integrity sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw== -"@esbuild/linux-ppc64@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz#75b99c70a95fbd5f7739d7692befe60601591869" - integrity sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA== - "@esbuild/linux-ppc64@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz#3846c5df6b2016dab9bc95dde26c40f11e43b4c0" integrity sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ== -"@esbuild/linux-riscv64@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz#2e3259440321a44e79ddf7535c325057da875cd6" - integrity sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w== - "@esbuild/linux-riscv64@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz#173d4475b37c8d2c3e1707e068c174bb3f53d07d" integrity sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA== -"@esbuild/linux-s390x@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz#17676cabbfe5928da5b2a0d6df5d58cd08db2663" - integrity sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg== - "@esbuild/linux-s390x@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz#f7a4790105edcab8a5a31df26fbfac1aa3dacfab" integrity sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w== -"@esbuild/linux-x64@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz#0583775685ca82066d04c3507f09524d3cd7a306" - integrity sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw== - "@esbuild/linux-x64@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz#2ecc1284b1904aeb41e54c9ddc7fcd349b18f650" integrity sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA== -"@esbuild/netbsd-arm64@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz#f04c4049cb2e252fe96b16fed90f70746b13f4a4" - integrity sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg== - "@esbuild/netbsd-arm64@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz#e2863c2cd1501845995cb11adf26f7fe4be527b0" integrity sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw== -"@esbuild/netbsd-x64@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz#77da0d0a0d826d7c921eea3d40292548b258a076" - integrity sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ== - "@esbuild/netbsd-x64@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz#93f7609e2885d1c0b5a1417885fba8d1fcc41272" integrity sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA== -"@esbuild/openbsd-arm64@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz#6296f5867aedef28a81b22ab2009c786a952dccd" - integrity sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A== - "@esbuild/openbsd-arm64@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz#a1985604a203cdc325fd47542e106fafd698f02e" integrity sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA== -"@esbuild/openbsd-x64@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz#f8d23303360e27b16cf065b23bbff43c14142679" - integrity sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw== - "@esbuild/openbsd-x64@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz#8209e46c42f1ffbe6e4ef77a32e1f47d404ad42a" integrity sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg== -"@esbuild/openharmony-arm64@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz#49e0b768744a3924be0d7fd97dd6ce9b2923d88d" - integrity sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg== - "@esbuild/openharmony-arm64@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz#8fade4441893d9cc44cbd7dcf3776f508ab6fb2f" integrity sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag== -"@esbuild/sunos-x64@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz#a6ed7d6778d67e528c81fb165b23f4911b9b13d6" - integrity sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w== - "@esbuild/sunos-x64@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz#980d4b9703a16f0f07016632424fc6d9a789dfc2" integrity sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg== -"@esbuild/win32-arm64@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz#9ac14c378e1b653af17d08e7d3ce34caef587323" - integrity sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg== - "@esbuild/win32-arm64@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz#1c09a3633c949ead3d808ba37276883e71f6111a" integrity sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg== -"@esbuild/win32-ia32@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz#918942dcbbb35cc14fca39afb91b5e6a3d127267" - integrity sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ== - "@esbuild/win32-ia32@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz#1b1e3a63ad4bef82200fef4e369e0fff7009eee5" integrity sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ== -"@esbuild/win32-x64@0.25.12": - version "0.25.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz#9bdad8176be7811ad148d1f8772359041f46c6c5" - integrity sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA== - "@esbuild/win32-x64@0.27.2": version "0.27.2" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz#9e585ab6086bef994c6e8a5b3a0481219ada862b" @@ -1218,115 +1088,130 @@ estree-walker "^2.0.2" picomatch "^4.0.2" -"@rollup/rollup-android-arm-eabi@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz#7e478b66180c5330429dd161bf84dad66b59c8eb" - integrity sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w== +"@rollup/rollup-android-arm-eabi@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz#76e0fef6533b3ce313f969879e61e8f21f0eeb28" + integrity sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg== -"@rollup/rollup-android-arm64@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz#2b025510c53a5e3962d3edade91fba9368c9d71c" - integrity sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w== +"@rollup/rollup-android-arm64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz#d3cfc675a40bbdec97bda6d7fe3b3b05f0e1cd93" + integrity sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg== -"@rollup/rollup-darwin-arm64@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz#3577c38af68ccf34c03e84f476bfd526abca10a0" - integrity sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA== +"@rollup/rollup-darwin-arm64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz#eb912b8f59dd47c77b3c50a78489013b1d6772b4" + integrity sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg== -"@rollup/rollup-darwin-x64@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz#2bf5f2520a1f3b551723d274b9669ba5b75ed69c" - integrity sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ== +"@rollup/rollup-darwin-x64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz#e7d0839fdfd1276a1d34bc5ebbbd0dfd7d0b81a0" + integrity sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ== -"@rollup/rollup-freebsd-arm64@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz#4bb9cc80252564c158efc0710153c71633f1927c" - integrity sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w== +"@rollup/rollup-freebsd-arm64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz#7ff8118760f7351e48fd0cd3717ff80543d6aac8" + integrity sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg== -"@rollup/rollup-freebsd-x64@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz#2301289094d49415a380cf942219ae9d8b127440" - integrity sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q== +"@rollup/rollup-freebsd-x64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz#49d330dadbda1d4e9b86b4a3951b59928a9489a9" + integrity sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw== -"@rollup/rollup-linux-arm-gnueabihf@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz#1d03d776f2065e09fc141df7d143476e94acca88" - integrity sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw== +"@rollup/rollup-linux-arm-gnueabihf@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz#98c5f1f8b9776b4a36e466e2a1c9ed1ba52ef1b6" + integrity sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ== -"@rollup/rollup-linux-arm-musleabihf@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz#8623de0e040b2fd52a541c602688228f51f96701" - integrity sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg== +"@rollup/rollup-linux-arm-musleabihf@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz#b9acecd3672e742f70b0c8a94075c816a91ff040" + integrity sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg== -"@rollup/rollup-linux-arm64-gnu@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz#ce2d1999bc166277935dde0301cde3dd0417fb6e" - integrity sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w== +"@rollup/rollup-linux-arm64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz#7a6ab06651bc29e18b09a50ed1a02bc972977c9b" + integrity sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ== -"@rollup/rollup-linux-arm64-musl@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz#88c2523778444da952651a2219026416564a4899" - integrity sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A== +"@rollup/rollup-linux-arm64-musl@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz#3c8c9072ba4a4d4ef1156b85ab9a2cbb57c1fad0" + integrity sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA== -"@rollup/rollup-linux-loong64-gnu@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz#578ca2220a200ac4226c536c10c8cc6e4f276714" - integrity sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g== +"@rollup/rollup-linux-loong64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz#17a7af13530f4e4a7b12cd26276c54307a84a8b0" + integrity sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g== -"@rollup/rollup-linux-ppc64-gnu@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz#aa338d3effd4168a20a5023834a74ba2c3081293" - integrity sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw== +"@rollup/rollup-linux-loong64-musl@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz#5cd7a900fd7b077ecd753e34a9b7ff1157fe70c1" + integrity sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw== -"@rollup/rollup-linux-riscv64-gnu@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz#16ba582f9f6cff58119aa242782209b1557a1508" - integrity sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g== +"@rollup/rollup-linux-ppc64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz#03a097e70243ddf1c07b59d3c20f38e6f6800539" + integrity sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw== -"@rollup/rollup-linux-riscv64-musl@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz#e404a77ebd6378483888b8064c703adb011340ab" - integrity sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A== +"@rollup/rollup-linux-ppc64-musl@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz#a5389873039d4650f35b4fa060d286392eb21a94" + integrity sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw== -"@rollup/rollup-linux-s390x-gnu@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz#92ad52d306227c56bec43d96ad2164495437ffe6" - integrity sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg== +"@rollup/rollup-linux-riscv64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz#789e60e7d6e2b76132d001ffb24ba80007fb17d0" + integrity sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw== -"@rollup/rollup-linux-x64-gnu@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz#fd0dea3bb9aa07e7083579f25e1c2285a46cb9fa" - integrity sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w== +"@rollup/rollup-linux-riscv64-musl@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz#3556fa88d139282e9a73c337c9a170f3c5fe7aa4" + integrity sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg== -"@rollup/rollup-linux-x64-musl@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz#37a3efb09f18d555f8afc490e1f0444885de8951" - integrity sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q== +"@rollup/rollup-linux-s390x-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz#c085995b10143c16747a67f1a5487512b2ff04b2" + integrity sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg== -"@rollup/rollup-openharmony-arm64@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz#c489bec9f4f8320d42c9b324cca220c90091c1f7" - integrity sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw== +"@rollup/rollup-linux-x64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz#9563a5419dd2604841bad31a39ccfdd2891690fb" + integrity sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg== -"@rollup/rollup-win32-arm64-msvc@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz#152832b5f79dc22d1606fac3db946283601b7080" - integrity sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw== +"@rollup/rollup-linux-x64-musl@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz#691bb06e6269a8959c13476b0cd2aa7458facb31" + integrity sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w== -"@rollup/rollup-win32-ia32-msvc@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz#54d91b2bb3bf3e9f30d32b72065a4e52b3a172a5" - integrity sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA== +"@rollup/rollup-openbsd-x64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz#223e71224746a59ce6d955bbc403577bb5a8be9d" + integrity sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg== -"@rollup/rollup-win32-x64-gnu@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz#df9df03e61a003873efec8decd2034e7f135c71e" - integrity sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg== +"@rollup/rollup-openharmony-arm64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz#0817e5d8ecbfeb8b7939bf58f8ce3c9dd67fce77" + integrity sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw== -"@rollup/rollup-win32-x64-msvc@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz#38ae84f4c04226c1d56a3b17296ef1e0460ecdfe" - integrity sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ== +"@rollup/rollup-win32-arm64-msvc@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz#de56d8f2013c84570ef5fb917aae034abda93e4a" + integrity sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g== + +"@rollup/rollup-win32-ia32-msvc@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz#659aff5244312475aeea2c9479a6c7d397b517bf" + integrity sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA== + +"@rollup/rollup-win32-x64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz#2cb09549cbb66c1b979f9238db6dd454cac14a88" + integrity sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg== + +"@rollup/rollup-win32-x64-msvc@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz#f79437939020b83057faf07e98365b1fa51c458b" + integrity sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw== "@rushstack/node-core-library@5.17.0": version "5.17.0" @@ -1644,9 +1529,9 @@ redent "^3.0.0" "@testing-library/react@^16.3.0": - version "16.3.0" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-16.3.0.tgz#3a85bb9bdebf180cd76dba16454e242564d598a6" - integrity sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw== + version "16.3.1" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-16.3.1.tgz#60a9f1f6a930399d9e41b506a8bf68dbf4831fe8" + integrity sha512-gr4KtAWqIOQoucWYD/f6ki+j5chXfcPc74Col/6poTyqTmn7zRmodWahWRCp8tYd+GMqBonw6hstNzqjbs6gjw== dependencies: "@babel/runtime" "^7.12.5" @@ -3467,7 +3352,7 @@ es6-error@^4.0.1: resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== -"esbuild@^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0 || ^0.26.0 || ^0.27.0": +"esbuild@^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0 || ^0.26.0 || ^0.27.0", esbuild@^0.27.0: version "0.27.2" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.27.2.tgz#d83ed2154d5813a5367376bb2292a9296fc83717" integrity sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw== @@ -3499,38 +3384,6 @@ es6-error@^4.0.1: "@esbuild/win32-ia32" "0.27.2" "@esbuild/win32-x64" "0.27.2" -esbuild@^0.25.0: - version "0.25.12" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.12.tgz#97a1d041f4ab00c2fce2f838d2b9969a2d2a97a5" - integrity sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg== - optionalDependencies: - "@esbuild/aix-ppc64" "0.25.12" - "@esbuild/android-arm" "0.25.12" - "@esbuild/android-arm64" "0.25.12" - "@esbuild/android-x64" "0.25.12" - "@esbuild/darwin-arm64" "0.25.12" - "@esbuild/darwin-x64" "0.25.12" - "@esbuild/freebsd-arm64" "0.25.12" - "@esbuild/freebsd-x64" "0.25.12" - "@esbuild/linux-arm" "0.25.12" - "@esbuild/linux-arm64" "0.25.12" - "@esbuild/linux-ia32" "0.25.12" - "@esbuild/linux-loong64" "0.25.12" - "@esbuild/linux-mips64el" "0.25.12" - "@esbuild/linux-ppc64" "0.25.12" - "@esbuild/linux-riscv64" "0.25.12" - "@esbuild/linux-s390x" "0.25.12" - "@esbuild/linux-x64" "0.25.12" - "@esbuild/netbsd-arm64" "0.25.12" - "@esbuild/netbsd-x64" "0.25.12" - "@esbuild/openbsd-arm64" "0.25.12" - "@esbuild/openbsd-x64" "0.25.12" - "@esbuild/openharmony-arm64" "0.25.12" - "@esbuild/sunos-x64" "0.25.12" - "@esbuild/win32-arm64" "0.25.12" - "@esbuild/win32-ia32" "0.25.12" - "@esbuild/win32-x64" "0.25.12" - escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" @@ -6271,34 +6124,37 @@ ripemd160@^2.0.0, ripemd160@^2.0.1, ripemd160@^2.0.3: inherits "^2.0.4" rollup@^4.43.0: - version "4.53.3" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.53.3.tgz#dbc8cd8743b38710019fb8297e8d7a76e3faa406" - integrity sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA== + version "4.55.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.55.1.tgz#4ec182828be440648e7ee6520dc35e9f20e05144" + integrity sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A== dependencies: "@types/estree" "1.0.8" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.53.3" - "@rollup/rollup-android-arm64" "4.53.3" - "@rollup/rollup-darwin-arm64" "4.53.3" - "@rollup/rollup-darwin-x64" "4.53.3" - "@rollup/rollup-freebsd-arm64" "4.53.3" - "@rollup/rollup-freebsd-x64" "4.53.3" - "@rollup/rollup-linux-arm-gnueabihf" "4.53.3" - "@rollup/rollup-linux-arm-musleabihf" "4.53.3" - "@rollup/rollup-linux-arm64-gnu" "4.53.3" - "@rollup/rollup-linux-arm64-musl" "4.53.3" - "@rollup/rollup-linux-loong64-gnu" "4.53.3" - "@rollup/rollup-linux-ppc64-gnu" "4.53.3" - "@rollup/rollup-linux-riscv64-gnu" "4.53.3" - "@rollup/rollup-linux-riscv64-musl" "4.53.3" - "@rollup/rollup-linux-s390x-gnu" "4.53.3" - "@rollup/rollup-linux-x64-gnu" "4.53.3" - "@rollup/rollup-linux-x64-musl" "4.53.3" - "@rollup/rollup-openharmony-arm64" "4.53.3" - "@rollup/rollup-win32-arm64-msvc" "4.53.3" - "@rollup/rollup-win32-ia32-msvc" "4.53.3" - "@rollup/rollup-win32-x64-gnu" "4.53.3" - "@rollup/rollup-win32-x64-msvc" "4.53.3" + "@rollup/rollup-android-arm-eabi" "4.55.1" + "@rollup/rollup-android-arm64" "4.55.1" + "@rollup/rollup-darwin-arm64" "4.55.1" + "@rollup/rollup-darwin-x64" "4.55.1" + "@rollup/rollup-freebsd-arm64" "4.55.1" + "@rollup/rollup-freebsd-x64" "4.55.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.55.1" + "@rollup/rollup-linux-arm-musleabihf" "4.55.1" + "@rollup/rollup-linux-arm64-gnu" "4.55.1" + "@rollup/rollup-linux-arm64-musl" "4.55.1" + "@rollup/rollup-linux-loong64-gnu" "4.55.1" + "@rollup/rollup-linux-loong64-musl" "4.55.1" + "@rollup/rollup-linux-ppc64-gnu" "4.55.1" + "@rollup/rollup-linux-ppc64-musl" "4.55.1" + "@rollup/rollup-linux-riscv64-gnu" "4.55.1" + "@rollup/rollup-linux-riscv64-musl" "4.55.1" + "@rollup/rollup-linux-s390x-gnu" "4.55.1" + "@rollup/rollup-linux-x64-gnu" "4.55.1" + "@rollup/rollup-linux-x64-musl" "4.55.1" + "@rollup/rollup-openbsd-x64" "4.55.1" + "@rollup/rollup-openharmony-arm64" "4.55.1" + "@rollup/rollup-win32-arm64-msvc" "4.55.1" + "@rollup/rollup-win32-ia32-msvc" "4.55.1" + "@rollup/rollup-win32-x64-gnu" "4.55.1" + "@rollup/rollup-win32-x64-msvc" "4.55.1" fsevents "~2.3.2" run-applescript@^7.0.0: @@ -7154,11 +7010,11 @@ vite-plugin-node-polyfills@^0.24.0: node-stdlib-browser "^1.2.0" vite@^7.1.9: - version "7.2.7" - resolved "https://registry.yarnpkg.com/vite/-/vite-7.2.7.tgz#0789a4c3206081699f34a9ecca2dda594a07478e" - integrity sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ== + version "7.3.0" + resolved "https://registry.yarnpkg.com/vite/-/vite-7.3.0.tgz#066c7a835993a66e82004eac3e185d0d157fd658" + integrity sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg== dependencies: - esbuild "^0.25.0" + esbuild "^0.27.0" fdir "^6.5.0" picomatch "^4.0.3" postcss "^8.5.6" diff --git a/src/components/utils/ListView.tsx b/src/components/utils/ListView.tsx index e35f7e2e47..9df5b67e69 100644 --- a/src/components/utils/ListView.tsx +++ b/src/components/utils/ListView.tsx @@ -76,6 +76,13 @@ export interface IListViewProps extends Omit< onKeyDown?: (e: React.KeyboardEvent) => void; } +/** + * Utility type for the prop scrollIntoViewOnChange allowing it to be memoised by a caller without repeating types + */ +export type ScrollIntoViewOnChange = NonNullable< + VirtuosoProps>["scrollIntoViewOnChange"] +>; + /** * A generic virtualized list component built on top of react-virtuoso. * Provides keyboard navigation and virtualized rendering for performance with large lists. diff --git a/src/components/views/rooms/RoomListPanel/RoomList.tsx b/src/components/views/rooms/RoomListPanel/RoomList.tsx index c1c081ca9c..ee7b59c74e 100644 --- a/src/components/views/rooms/RoomListPanel/RoomList.tsx +++ b/src/components/views/rooms/RoomListPanel/RoomList.tsx @@ -7,13 +7,12 @@ import React, { useCallback, useRef, type JSX } from "react"; import { type Room } from "matrix-js-sdk/src/matrix"; -import { type ScrollIntoViewLocation } from "react-virtuoso"; import { isEqual } from "lodash"; import { type RoomListViewState } from "../../../viewmodels/roomlist/RoomListViewModel"; import { _t } from "../../../../languageHandler"; import { RoomListItemView } from "./RoomListItemView"; -import { type ListContext, ListView } from "../../../utils/ListView"; +import { type ListContext, ListView, type ScrollIntoViewOnChange } from "../../../utils/ListView"; import { type FilterKey } from "../../../../stores/room-list-v3/skip-list/filters"; import { getKeyBindingsManager } from "../../../../KeyBindingsManager"; import { KeyBindingAction } from "../../../../accessibility/KeyboardShortcuts"; @@ -25,6 +24,12 @@ interface RoomListProps { */ vm: RoomListViewState; } + +type Context = { + spaceId: string; + filterKeys: FilterKey[] | undefined; +}; + /** * Height of a single room list item */ @@ -48,10 +53,7 @@ export function RoomList({ vm: { roomsResult, activeIndex } }: RoomListProps): J ( index: number, item: Room, - context: ListContext<{ - spaceId: string; - filterKeys: FilterKey[] | undefined; - }>, + context: ListContext, onFocus: (item: Room, e: React.FocusEvent) => void, ): JSX.Element => { const itemKey = item.roomId; @@ -78,10 +80,8 @@ export function RoomList({ vm: { roomsResult, activeIndex } }: RoomListProps): J return item.roomId; }, []); - const scrollIntoViewOnChange = useCallback( - (params: { - context: ListContext<{ spaceId: string; filterKeys: FilterKey[] | undefined }>; - }): ScrollIntoViewLocation | null | undefined | false | void => { + const scrollIntoViewOnChange = useCallback>( + (params) => { const { spaceId, filterKeys } = params.context.context; const shouldScrollIndexIntoView = lastSpaceId.current !== spaceId || !isEqual(lastFilterKeys.current, filterKeys); diff --git a/yarn.lock b/yarn.lock index 190d9963aa..ba714612f4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2610,10 +2610,10 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.28.tgz#d45e01c4a56f143ee69c54dd6b12eade9e270a73" integrity sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw== -"@posthog/core@1.7.1": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@posthog/core/-/core-1.7.1.tgz#ec45a3b13acbe4fbf453625c83bcd38da21beeb7" - integrity sha512-kjK0eFMIpKo9GXIbts8VtAknsoZ18oZorANdtuTj1CbgS28t4ZVq//HAWhnxEuXRTrtkd+SUJ6Ux3j2Af8NCuA== +"@posthog/core@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@posthog/core/-/core-1.9.0.tgz#b0f3b2018e166dd47e8d5a38fbcf32c93ff384f7" + integrity sha512-j7KSWxJTUtNyKynLt/p0hfip/3I46dWU2dk+pt7dKRoz2l5CYueHuHK4EO7Wlgno5yo1HO4sc4s30MXMTICHJw== dependencies: cross-spawn "^7.0.6" @@ -11183,12 +11183,12 @@ postcss@^8.4.40, postcss@^8.5.6: picocolors "^1.1.1" source-map-js "^1.2.1" -posthog-js@1.302.2: - version "1.302.2" - resolved "https://registry.yarnpkg.com/posthog-js/-/posthog-js-1.302.2.tgz#149ab7d511106541d7056bf239094c425fb4ef0a" - integrity sha512-4voih22zQe7yHA7DynlQ3B7kgzJOaKIjzV7K3jJ2Qf+UDXd1ZgO7xYmLWYVtuKEvD1OXHbKk/fPhUTZeHEWpBw== +posthog-js@1.313.0: + version "1.313.0" + resolved "https://registry.yarnpkg.com/posthog-js/-/posthog-js-1.313.0.tgz#163c3a21bdde22cc6595b79604b83622731ce3b5" + integrity sha512-CL8RkC7m9BTZrix86w0fdnSCVqC/gxrfs6c4Wfkz/CldFD7f2912S2KqnWFmwRVDGIwm9IR82YhublQ88gdDKw== dependencies: - "@posthog/core" "1.7.1" + "@posthog/core" "1.9.0" core-js "^3.38.1" fflate "^0.4.8" preact "^10.19.3" @@ -11511,10 +11511,10 @@ react-focus-lock@^2.5.1: use-callback-ref "^1.3.3" use-sidecar "^1.1.3" -react-is@19.2.1, react-is@^17.0.1, react-is@^18.3.1: - version "19.2.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.2.1.tgz#712fa6ee30c8398dc34260017325dad92b9224c5" - integrity sha512-L7BnWgRbMwzMAubQcS7sXdPdNLmKlucPlopgAzx7FtYbksWZgEWiuYM5x9T6UqS2Ne0rsgQTq5kY2SGqpzUkYA== +react-is@19.2.3, react-is@^17.0.1, react-is@^18.3.1: + version "19.2.3" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.2.3.tgz#eec2feb69c7fb31f77d0b5c08c10ae1c88886b29" + integrity sha512-qJNJfu81ByyabuG7hPFEbXqNcWSU3+eVus+KJs+0ncpGfMyYdvSmxiJxbWR65lYi1I+/0HBcliO029gc4F+PnA== react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" From 13696af1940aa8205ad1d05cdcf58a723a7072c3 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 7 Jan 2026 11:49:01 +0000 Subject: [PATCH 12/13] 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> --- .github/workflows/static_analysis.yaml | 13 +- localazy.json | 16 + package.json | 2 +- .../.storybook/languageAddon.tsx | 8 +- packages/shared-components/.storybook/main.ts | 47 +- packages/shared-components/package.json | 5 +- .../scripts/gatherTranslationKeys.ts | 67 --- .../shared-components/src/@types/i18n.d.ts | 14 + .../src/i18n/strings/cs.json | 43 ++ .../src/i18n/strings/cy.json | 43 ++ .../src/i18n/strings/da.json | 35 ++ .../src/i18n/strings/de_DE.json | 43 ++ .../src/i18n/strings/el.json | 35 ++ .../src/i18n/strings/en_EN.json | 48 ++ .../src/i18n/strings/eo.json | 35 ++ .../src/i18n/strings/es.json | 39 ++ .../src/i18n/strings/et.json | 48 ++ .../src/i18n/strings/fa.json | 29 ++ .../src/i18n/strings/fi.json | 38 ++ .../src/i18n/strings/fr.json | 48 ++ .../src/i18n/strings/gl.json | 35 ++ .../src/i18n/strings/he.json | 27 ++ .../src/i18n/strings/hu.json | 43 ++ .../src/i18n/strings/hy.json | 43 ++ .../src/i18n/strings/id.json | 43 ++ .../src/i18n/strings/is.json | 35 ++ .../src/i18n/strings/it.json | 38 ++ .../src/i18n/strings/ja.json | 35 ++ .../src/i18n/strings/ka.json | 32 ++ .../src/i18n/strings/ko.json | 43 ++ .../src/i18n/strings/lo.json | 35 ++ .../src/i18n/strings/lt.json | 24 + .../src/i18n/strings/lv.json | 35 ++ .../src/i18n/strings/mg_MG.json | 38 ++ .../src/i18n/strings/nb_NO.json | 43 ++ .../src/i18n/strings/nl.json | 38 ++ .../src/i18n/strings/pl.json | 43 ++ .../src/i18n/strings/pt.json | 42 ++ .../src/i18n/strings/pt_BR.json | 43 ++ .../src/i18n/strings/ru.json | 43 ++ .../src/i18n/strings/sk.json | 48 ++ .../src/i18n/strings/sq.json | 35 ++ .../src/i18n/strings/sv.json | 43 ++ .../src/i18n/strings/tr.json | 42 ++ .../src/i18n/strings/uk.json | 43 ++ .../src/i18n/strings/vi.json | 35 ++ .../src/i18n/strings/zh_Hans.json | 35 ++ .../src/i18n/strings/zh_Hant.json | 35 ++ packages/shared-components/src/index.ts | 4 - .../shared-components/src/test/setupTests.ts | 2 +- .../src/utils/I18nApi.test.ts | 3 +- .../shared-components/src/utils/I18nApi.ts | 6 +- packages/shared-components/src/utils/i18n.tsx | 16 +- scripts/copy-res.ts | 27 +- src/@types/i18n.d.ts | 14 + src/accessibility/KeyboardShortcuts.ts | 2 +- src/components/structures/EmbeddedPage.tsx | 2 +- src/components/structures/TabbedView.tsx | 2 +- .../memberlist/tiles/MemberTileViewModel.tsx | 2 +- .../viewmodels/roomlist/useFilteredRooms.tsx | 2 +- src/components/views/auth/EmailField.tsx | 2 +- .../views/auth/PassphraseConfirmField.tsx | 2 +- src/components/views/auth/PassphraseField.tsx | 2 +- .../views/context_menus/DeviceContextMenu.tsx | 2 +- .../dialogs/AddExistingToSpaceDialog.tsx | 2 +- .../views/dialogs/DevtoolsDialog.tsx | 2 +- .../views/dialogs/TextInputDialog.tsx | 2 +- .../views/dialogs/devtools/AccountData.tsx | 2 +- .../views/dialogs/devtools/BaseTool.tsx | 2 +- .../views/dialogs/devtools/Event.tsx | 2 +- .../elements/DesktopCapturerSourcePicker.tsx | 2 +- src/components/views/rooms/E2EIcon.tsx | 2 +- src/components/views/rooms/LegacyRoomList.tsx | 2 +- src/components/views/rooms/NewRoomIntro.tsx | 2 +- src/components/views/rooms/Stickerpicker.tsx | 2 +- .../views/settings/devices/DeviceTypeIcon.tsx | 2 +- .../tabs/room/RolesRoomSettingsTab.tsx | 2 +- src/effects/effect.ts | 2 - src/i18n/strings/cs.json | 20 +- src/i18n/strings/cy.json | 411 +----------------- src/i18n/strings/da.json | 21 +- src/i18n/strings/de_DE.json | 20 +- src/i18n/strings/el.json | 19 +- src/i18n/strings/en_EN.json | 21 +- src/i18n/strings/eo.json | 19 +- src/i18n/strings/es.json | 20 +- src/i18n/strings/et.json | 22 +- src/i18n/strings/fa.json | 16 - src/i18n/strings/fi.json | 19 +- src/i18n/strings/fr.json | 21 +- src/i18n/strings/gl.json | 19 +- src/i18n/strings/he.json | 14 - src/i18n/strings/hu.json | 345 +-------------- src/i18n/strings/hy.json | 22 +- src/i18n/strings/id.json | 20 +- src/i18n/strings/is.json | 19 +- src/i18n/strings/it.json | 19 +- src/i18n/strings/ja.json | 19 +- src/i18n/strings/ka.json | 19 +- src/i18n/strings/ko.json | 141 +----- src/i18n/strings/lo.json | 19 +- src/i18n/strings/lt.json | 14 - src/i18n/strings/lv.json | 21 +- src/i18n/strings/mg_MG.json | 21 +- src/i18n/strings/nb_NO.json | 46 +- src/i18n/strings/nl.json | 19 +- src/i18n/strings/pl.json | 20 +- src/i18n/strings/pt.json | 21 +- src/i18n/strings/pt_BR.json | 20 +- src/i18n/strings/ru.json | 25 +- src/i18n/strings/sk.json | 23 +- src/i18n/strings/sq.json | 19 +- src/i18n/strings/sv.json | 20 +- src/i18n/strings/tr.json | 20 +- src/i18n/strings/uk.json | 25 +- src/i18n/strings/vi.json | 19 +- src/i18n/strings/zh_Hans.json | 19 +- src/i18n/strings/zh_Hant.json | 19 +- src/languageHandler.tsx | 2 - src/modules/ProxiedModuleApi.ts | 2 +- .../VectorPushRulesDefinitions.ts | 2 +- src/settings/Settings.tsx | 2 +- .../ServerSupportUnstableFeatureController.ts | 2 +- src/slash-commands/command.ts | 2 +- src/utils/AutoDiscoveryUtils.tsx | 2 +- src/utils/ErrorUtils.tsx | 2 +- src/widgets/CapabilityText.tsx | 2 +- test/setup/setupLanguage.ts | 21 +- .../components/views/beta/BetaCard-test.tsx | 1 - test/unit-tests/languageHandler-test.tsx | 1 - ...erSupportUnstableFeatureController-test.ts | 1 - 131 files changed, 1783 insertions(+), 1763 deletions(-) delete mode 100644 packages/shared-components/scripts/gatherTranslationKeys.ts create mode 100644 packages/shared-components/src/@types/i18n.d.ts create mode 100644 packages/shared-components/src/i18n/strings/cs.json create mode 100644 packages/shared-components/src/i18n/strings/cy.json create mode 100644 packages/shared-components/src/i18n/strings/da.json create mode 100644 packages/shared-components/src/i18n/strings/de_DE.json create mode 100644 packages/shared-components/src/i18n/strings/el.json create mode 100644 packages/shared-components/src/i18n/strings/en_EN.json create mode 100644 packages/shared-components/src/i18n/strings/eo.json create mode 100644 packages/shared-components/src/i18n/strings/es.json create mode 100644 packages/shared-components/src/i18n/strings/et.json create mode 100644 packages/shared-components/src/i18n/strings/fa.json create mode 100644 packages/shared-components/src/i18n/strings/fi.json create mode 100644 packages/shared-components/src/i18n/strings/fr.json create mode 100644 packages/shared-components/src/i18n/strings/gl.json create mode 100644 packages/shared-components/src/i18n/strings/he.json create mode 100644 packages/shared-components/src/i18n/strings/hu.json create mode 100644 packages/shared-components/src/i18n/strings/hy.json create mode 100644 packages/shared-components/src/i18n/strings/id.json create mode 100644 packages/shared-components/src/i18n/strings/is.json create mode 100644 packages/shared-components/src/i18n/strings/it.json create mode 100644 packages/shared-components/src/i18n/strings/ja.json create mode 100644 packages/shared-components/src/i18n/strings/ka.json create mode 100644 packages/shared-components/src/i18n/strings/ko.json create mode 100644 packages/shared-components/src/i18n/strings/lo.json create mode 100644 packages/shared-components/src/i18n/strings/lt.json create mode 100644 packages/shared-components/src/i18n/strings/lv.json create mode 100644 packages/shared-components/src/i18n/strings/mg_MG.json create mode 100644 packages/shared-components/src/i18n/strings/nb_NO.json create mode 100644 packages/shared-components/src/i18n/strings/nl.json create mode 100644 packages/shared-components/src/i18n/strings/pl.json create mode 100644 packages/shared-components/src/i18n/strings/pt.json create mode 100644 packages/shared-components/src/i18n/strings/pt_BR.json create mode 100644 packages/shared-components/src/i18n/strings/ru.json create mode 100644 packages/shared-components/src/i18n/strings/sk.json create mode 100644 packages/shared-components/src/i18n/strings/sq.json create mode 100644 packages/shared-components/src/i18n/strings/sv.json create mode 100644 packages/shared-components/src/i18n/strings/tr.json create mode 100644 packages/shared-components/src/i18n/strings/uk.json create mode 100644 packages/shared-components/src/i18n/strings/vi.json create mode 100644 packages/shared-components/src/i18n/strings/zh_Hans.json create mode 100644 packages/shared-components/src/i18n/strings/zh_Hant.json create mode 100644 src/@types/i18n.d.ts diff --git a/.github/workflows/static_analysis.yaml b/.github/workflows/static_analysis.yaml index 9f90572371..3ac32ac756 100644 --- a/.github/workflows/static_analysis.yaml +++ b/.github/workflows/static_analysis.yaml @@ -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 diff --git a/localazy.json b/localazy.json index 7ba5ef2542..669ac657c3 100644 --- a/localazy.json +++ b/localazy.json @@ -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}", diff --git a/package.json b/package.json index 9e8e703749..9d6bcf78c8 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/packages/shared-components/.storybook/languageAddon.tsx b/packages/shared-components/.storybook/languageAddon.tsx index e1483738f5..b1474bd308 100644 --- a/packages/shared-components/.storybook/languageAddon.tsx +++ b/packages/shared-components/.storybook/languageAddon.tsx @@ -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 = { diff --git a/packages/shared-components/.storybook/main.ts b/packages/shared-components/.storybook/main.ts index efc35752b5..520426b3ed 100644 --- a/packages/shared-components/.storybook/main.ts +++ b/packages/shared-components/.storybook/main.ts @@ -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 = {}; + 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; diff --git a/packages/shared-components/package.json b/packages/shared-components/package.json index e3bba648e0..ea35eb99f8 100644 --- a/packages/shared-components/package.json +++ b/packages/shared-components/package.json @@ -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", diff --git a/packages/shared-components/scripts/gatherTranslationKeys.ts b/packages/shared-components/scripts/gatherTranslationKeys.ts deleted file mode 100644 index 37812df33b..0000000000 --- a/packages/shared-components/scripts/gatherTranslationKeys.ts +++ /dev/null @@ -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(); - } -} diff --git a/packages/shared-components/src/@types/i18n.d.ts b/packages/shared-components/src/@types/i18n.d.ts new file mode 100644 index 0000000000..04531d8954 --- /dev/null +++ b/packages/shared-components/src/@types/i18n.d.ts @@ -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; +} diff --git a/packages/shared-components/src/i18n/strings/cs.json b/packages/shared-components/src/i18n/strings/cs.json new file mode 100644 index 0000000000..0ab040edd5 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/cs.json @@ -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 (%(userId)s) se změnila. Další informace", + "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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/cy.json b/packages/shared-components/src/i18n/strings/cy.json new file mode 100644 index 0000000000..5d490ec948 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/cy.json @@ -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 (%(userId)s) %(displayName)s ei ailosod. Dysgu rhagor", + "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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/da.json b/packages/shared-components/src/i18n/strings/da.json new file mode 100644 index 0000000000..39eb6ccfa8 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/da.json @@ -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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/de_DE.json b/packages/shared-components/src/i18n/strings/de_DE.json new file mode 100644 index 0000000000..001c64d9bb --- /dev/null +++ b/packages/shared-components/src/i18n/strings/de_DE.json @@ -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 (%(userId)s) Identität wurde zurückgesetzt. Mehr erfahren ", + "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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/el.json b/packages/shared-components/src/i18n/strings/el.json new file mode 100644 index 0000000000..1a9693f88e --- /dev/null +++ b/packages/shared-components/src/i18n/strings/el.json @@ -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": "Ήχος χωρίς όνομα" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/en_EN.json b/packages/shared-components/src/i18n/strings/en_EN.json new file mode 100644 index 0000000000..78b9c88b3f --- /dev/null +++ b/packages/shared-components/src/i18n/strings/en_EN.json @@ -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 (%(userId)s) identity was reset. Learn more", + "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. Learn More" + } + }, + "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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/eo.json b/packages/shared-components/src/i18n/strings/eo.json new file mode 100644 index 0000000000..83c7485327 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/eo.json @@ -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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/es.json b/packages/shared-components/src/i18n/strings/es.json new file mode 100644 index 0000000000..3efb5cdeea --- /dev/null +++ b/packages/shared-components/src/i18n/strings/es.json @@ -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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/et.json b/packages/shared-components/src/i18n/strings/et.json new file mode 100644 index 0000000000..b9ad6f1d6d --- /dev/null +++ b/packages/shared-components/src/i18n/strings/et.json @@ -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 (%(userId)s) võrguidentiteet on lähtestatud. Lisateave", + "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. Lisateave" + } + }, + "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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/fa.json b/packages/shared-components/src/i18n/strings/fa.json new file mode 100644 index 0000000000..0871bcdc0b --- /dev/null +++ b/packages/shared-components/src/i18n/strings/fa.json @@ -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 دقیقه قبل" + } +} diff --git a/packages/shared-components/src/i18n/strings/fi.json b/packages/shared-components/src/i18n/strings/fi.json new file mode 100644 index 0000000000..d178b17307 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/fi.json @@ -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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/fr.json b/packages/shared-components/src/i18n/strings/fr.json new file mode 100644 index 0000000000..ba6be68e4f --- /dev/null +++ b/packages/shared-components/src/i18n/strings/fr.json @@ -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 (%(userId)s) semble avoir changé. En savoir plus", + "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. En savori plus" + } + }, + "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 l’audio", + "unnamed_audio": "Audio sans nom" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/gl.json b/packages/shared-components/src/i18n/strings/gl.json new file mode 100644 index 0000000000..2acc9ba7ca --- /dev/null +++ b/packages/shared-components/src/i18n/strings/gl.json @@ -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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/he.json b/packages/shared-components/src/i18n/strings/he.json new file mode 100644 index 0000000000..8d19269362 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/he.json @@ -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 דקות" + } +} diff --git a/packages/shared-components/src/i18n/strings/hu.json b/packages/shared-components/src/i18n/strings/hu.json new file mode 100644 index 0000000000..d973968a31 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/hu.json @@ -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 (%(userId)s) személyazonossága megváltozott. További információ", + "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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/hy.json b/packages/shared-components/src/i18n/strings/hy.json new file mode 100644 index 0000000000..e86dcc54e6 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/hy.json @@ -0,0 +1,43 @@ +{ + "a11y": { + "seek_bar_label": "Աուդիո որոնման գոտի" + }, + "action": { + "delete": "Ջնջել", + "dismiss": "Հեռացնել", + "explore_rooms": "Փնտրել սենյակներ", + "pause": "Դադար", + "play": "Միացնել", + "search": "Որոնել" + }, + "encryption": { + "pinned_identity_changed": "%(displayName)s-ի (%(userId)s ) ինքնությունը վերակայվել է։ Իմանալ ավելին", + "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": "Անանուն աուդիո" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/id.json b/packages/shared-components/src/i18n/strings/id.json new file mode 100644 index 0000000000..0d7da0a39e --- /dev/null +++ b/packages/shared-components/src/i18n/strings/id.json @@ -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 (%(userId)s) %(displayName)s tampaknya telah berubah. Pelajari lebih lanjut", + "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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/is.json b/packages/shared-components/src/i18n/strings/is.json new file mode 100644 index 0000000000..284bb0df06 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/is.json @@ -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óð" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/it.json b/packages/shared-components/src/i18n/strings/it.json new file mode 100644 index 0000000000..523d5798c1 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/it.json @@ -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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/ja.json b/packages/shared-components/src/i18n/strings/ja.json new file mode 100644 index 0000000000..e803863efe --- /dev/null +++ b/packages/shared-components/src/i18n/strings/ja.json @@ -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": "名前のない音声" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/ka.json b/packages/shared-components/src/i18n/strings/ka.json new file mode 100644 index 0000000000..5e7482c72a --- /dev/null +++ b/packages/shared-components/src/i18n/strings/ka.json @@ -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": "უსახელო აუდიო" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/ko.json b/packages/shared-components/src/i18n/strings/ko.json new file mode 100644 index 0000000000..bac4855636 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/ko.json @@ -0,0 +1,43 @@ +{ + "a11y": { + "seek_bar_label": "오디오 탐색 바" + }, + "action": { + "delete": "삭제", + "dismiss": "버리기", + "explore_rooms": "방 검색", + "pause": "일시중지", + "play": "재생", + "search": "찾기" + }, + "encryption": { + "pinned_identity_changed": "%(displayName)s (%(userId)s)의 신원이 재설정되었습니다. 자세히 알아보기", + "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": "이름 없는 오디오" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/lo.json b/packages/shared-components/src/i18n/strings/lo.json new file mode 100644 index 0000000000..9889020efb --- /dev/null +++ b/packages/shared-components/src/i18n/strings/lo.json @@ -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": "ສຽງບໍ່ມີຊື່" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/lt.json b/packages/shared-components/src/i18n/strings/lt.json new file mode 100644 index 0000000000..de50724d9f --- /dev/null +++ b/packages/shared-components/src/i18n/strings/lt.json @@ -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(-ų)" + } +} diff --git a/packages/shared-components/src/i18n/strings/lv.json b/packages/shared-components/src/i18n/strings/lv.json new file mode 100644 index 0000000000..5f2a3c04f1 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/lv.json @@ -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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/mg_MG.json b/packages/shared-components/src/i18n/strings/mg_MG.json new file mode 100644 index 0000000000..7960042a96 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/mg_MG.json @@ -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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/nb_NO.json b/packages/shared-components/src/i18n/strings/nb_NO.json new file mode 100644 index 0000000000..3fe3115ee4 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/nb_NO.json @@ -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 (%(userId)s) identitet ser ut til å ha endret seg. Finn ut mer", + "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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/nl.json b/packages/shared-components/src/i18n/strings/nl.json new file mode 100644 index 0000000000..26d4febbbc --- /dev/null +++ b/packages/shared-components/src/i18n/strings/nl.json @@ -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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/pl.json b/packages/shared-components/src/i18n/strings/pl.json new file mode 100644 index 0000000000..b347a1fe02 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/pl.json @@ -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 (%(userId)s) została zresetowana. Dowiedz się więcej", + "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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/pt.json b/packages/shared-components/src/i18n/strings/pt.json new file mode 100644 index 0000000000..a7b7156f68 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/pt.json @@ -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 (%(userId)s ) foi alterada. Saber mais", + "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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/pt_BR.json b/packages/shared-components/src/i18n/strings/pt_BR.json new file mode 100644 index 0000000000..bc13ec499b --- /dev/null +++ b/packages/shared-components/src/i18n/strings/pt_BR.json @@ -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 (%(userId)s) parece ter mudado. Saiba mais", + "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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/ru.json b/packages/shared-components/src/i18n/strings/ru.json new file mode 100644 index 0000000000..8a9ba1ce43 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/ru.json @@ -0,0 +1,43 @@ +{ + "a11y": { + "seek_bar_label": "Панель поиска аудио" + }, + "action": { + "delete": "Удалить", + "dismiss": "Закрыть", + "explore_rooms": "Обзор комнат", + "pause": "Пауза", + "play": "Воспроизведение", + "search": "Поиск" + }, + "encryption": { + "pinned_identity_changed": "Идентичность %(displayName)s (%(userId)s), похоже, изменилась. Узнать больше", + "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": "Безымянное аудио" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/sk.json b/packages/shared-components/src/i18n/strings/sk.json new file mode 100644 index 0000000000..176e2414c1 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/sk.json @@ -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 (%(userId)s) používateľa %(displayName)s bola obnovená. Zistiť viac ", + "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. Zistiť viac" + } + }, + "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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/sq.json b/packages/shared-components/src/i18n/strings/sq.json new file mode 100644 index 0000000000..64e80a6300 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/sq.json @@ -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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/sv.json b/packages/shared-components/src/i18n/strings/sv.json new file mode 100644 index 0000000000..628a16c747 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/sv.json @@ -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 (%(userId)s ) identitet verkar ha ändrats. Läs mer", + "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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/tr.json b/packages/shared-components/src/i18n/strings/tr.json new file mode 100644 index 0000000000..415182ba7e --- /dev/null +++ b/packages/shared-components/src/i18n/strings/tr.json @@ -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 (%(userId)s) kimliği değişmiş gibi görünüyor. Daha fazla bilgi ", + "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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/uk.json b/packages/shared-components/src/i18n/strings/uk.json new file mode 100644 index 0000000000..8aa0eaf334 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/uk.json @@ -0,0 +1,43 @@ +{ + "a11y": { + "seek_bar_label": "Панель гортання аудіо" + }, + "action": { + "delete": "Видалити", + "dismiss": "Відхилити", + "explore_rooms": "Каталог кімнат", + "pause": "Призупинити", + "play": "Відтворити", + "search": "Пошук" + }, + "encryption": { + "pinned_identity_changed": "Ідентичність %(displayName)s (%(userId)s) скинуто. Докладніше", + "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": "Аудіо без назви" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/vi.json b/packages/shared-components/src/i18n/strings/vi.json new file mode 100644 index 0000000000..edb065ffe8 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/vi.json @@ -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" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/zh_Hans.json b/packages/shared-components/src/i18n/strings/zh_Hans.json new file mode 100644 index 0000000000..7377fbbf45 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/zh_Hans.json @@ -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": "未命名的音频" + } + } +} diff --git a/packages/shared-components/src/i18n/strings/zh_Hant.json b/packages/shared-components/src/i18n/strings/zh_Hant.json new file mode 100644 index 0000000000..8f5e3ab9b3 --- /dev/null +++ b/packages/shared-components/src/i18n/strings/zh_Hant.json @@ -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": "未命名的音訊" + } + } +} diff --git a/packages/shared-components/src/index.ts b/packages/shared-components/src/index.ts index 849634e9da..346f92ef35 100644 --- a/packages/shared-components/src/index.ts +++ b/packages/shared-components/src/index.ts @@ -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"; diff --git a/packages/shared-components/src/test/setupTests.ts b/packages/shared-components/src/test/setupTests.ts index 43ffc0c071..516a5028bb 100644 --- a/packages/shared-components/src/test/setupTests.ts +++ b/packages/shared-components/src/test/setupTests.ts @@ -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 diff --git a/packages/shared-components/src/utils/I18nApi.test.ts b/packages/shared-components/src/utils/I18nApi.test.ts index 2b3431f07c..75c31a7f7c 100644 --- a/packages/shared-components/src/utils/I18nApi.test.ts +++ b/packages/shared-components/src/utils/I18nApi.test.ts @@ -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!", }, }); diff --git a/packages/shared-components/src/utils/I18nApi.ts b/packages/shared-components/src/utils/I18nApi.ts index 20d641f5ce..df474e2775 100644 --- a/packages/shared-components/src/utils/I18nApi.ts +++ b/packages/shared-components/src/utils/I18nApi.ts @@ -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): void { const langs: Record> = {}; + 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]; } } diff --git a/packages/shared-components/src/utils/i18n.tsx b/packages/shared-components/src/utils/i18n.tsx index 2ce1f78005..d3cf396087 100644 --- a/packages/shared-components/src/utils/i18n.tsx +++ b/packages/shared-components/src/utils/i18n.tsx @@ -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 { } export async function getLangsJson(): Promise { - 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" }); diff --git a/scripts/copy-res.ts b/scripts/copy-res.ts index e74eb6fd2d..94e456700d 100755 --- a/scripts/copy-res.ts +++ b/scripts/copy-res.ts @@ -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): void { * and regenerating languages.json with the new filename */ function watchLanguage(lang: string, dest: string, langFileMap: Record): 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 { - 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>((m, l) => { - const [filename, json] = prepareLangFile(l, I18N_DEST); + const [filename, json] = prepareLangFile(l); if (!watch) { genLangFile(I18N_DEST, filename, json); } diff --git a/src/@types/i18n.d.ts b/src/@types/i18n.d.ts new file mode 100644 index 0000000000..04531d8954 --- /dev/null +++ b/src/@types/i18n.d.ts @@ -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; +} diff --git a/src/accessibility/KeyboardShortcuts.ts b/src/accessibility/KeyboardShortcuts.ts index 2872e1a1a2..9d4222d92f 100644 --- a/src/accessibility/KeyboardShortcuts.ts +++ b/src/accessibility/KeyboardShortcuts.ts @@ -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"; diff --git a/src/components/structures/EmbeddedPage.tsx b/src/components/structures/EmbeddedPage.tsx index 53a5d7d537..8ea20d3cb3 100644 --- a/src/components/structures/EmbeddedPage.tsx +++ b/src/components/structures/EmbeddedPage.tsx @@ -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"; diff --git a/src/components/structures/TabbedView.tsx b/src/components/structures/TabbedView.tsx index 7b11b92e9c..1746c13652 100644 --- a/src/components/structures/TabbedView.tsx +++ b/src/components/structures/TabbedView.tsx @@ -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"; diff --git a/src/components/viewmodels/memberlist/tiles/MemberTileViewModel.tsx b/src/components/viewmodels/memberlist/tiles/MemberTileViewModel.tsx index d99c127d85..1cb29029ea 100644 --- a/src/components/viewmodels/memberlist/tiles/MemberTileViewModel.tsx +++ b/src/components/viewmodels/memberlist/tiles/MemberTileViewModel.tsx @@ -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 { diff --git a/src/components/viewmodels/roomlist/useFilteredRooms.tsx b/src/components/viewmodels/roomlist/useFilteredRooms.tsx index 4e311f39db..a0e36dc668 100644 --- a/src/components/viewmodels/roomlist/useFilteredRooms.tsx +++ b/src/components/viewmodels/roomlist/useFilteredRooms.tsx @@ -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, diff --git a/src/components/views/auth/EmailField.tsx b/src/components/views/auth/EmailField.tsx index fb420ed459..a8388f7ad9 100644 --- a/src/components/views/auth/EmailField.tsx +++ b/src/components/views/auth/EmailField.tsx @@ -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"; diff --git a/src/components/views/auth/PassphraseConfirmField.tsx b/src/components/views/auth/PassphraseConfirmField.tsx index 4dc720e8af..0eb0ce79b0 100644 --- a/src/components/views/auth/PassphraseConfirmField.tsx +++ b/src/components/views/auth/PassphraseConfirmField.tsx @@ -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 { id?: string; diff --git a/src/components/views/auth/PassphraseField.tsx b/src/components/views/auth/PassphraseField.tsx index 938e559fd7..d5cd27e401 100644 --- a/src/components/views/auth/PassphraseField.tsx +++ b/src/components/views/auth/PassphraseField.tsx @@ -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"; diff --git a/src/components/views/context_menus/DeviceContextMenu.tsx b/src/components/views/context_menus/DeviceContextMenu.tsx index 7560b4a7d5..e780449f12 100644 --- a/src/components/views/context_menus/DeviceContextMenu.tsx +++ b/src/components/views/context_menus/DeviceContextMenu.tsx @@ -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.AudioInput]: _td("voip|input_devices"), diff --git a/src/components/views/dialogs/AddExistingToSpaceDialog.tsx b/src/components/views/dialogs/AddExistingToSpaceDialog.tsx index c247c3aea9..4b6d031967 100644 --- a/src/components/views/dialogs/AddExistingToSpaceDialog.tsx +++ b/src/components/views/dialogs/AddExistingToSpaceDialog.tsx @@ -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"; diff --git a/src/components/views/dialogs/DevtoolsDialog.tsx b/src/components/views/dialogs/DevtoolsDialog.tsx index 5ac0478012..10986095ea 100644 --- a/src/components/views/dialogs/DevtoolsDialog.tsx +++ b/src/components/views/dialogs/DevtoolsDialog.tsx @@ -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"; diff --git a/src/components/views/dialogs/TextInputDialog.tsx b/src/components/views/dialogs/TextInputDialog.tsx index 1a86a40d14..ed076bc472 100644 --- a/src/components/views/dialogs/TextInputDialog.tsx +++ b/src/components/views/dialogs/TextInputDialog.tsx @@ -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"; diff --git a/src/components/views/dialogs/devtools/AccountData.tsx b/src/components/views/dialogs/devtools/AccountData.tsx index d4dfe039fd..6900a7097e 100644 --- a/src/components/views/dialogs/devtools/AccountData.tsx +++ b/src/components/views/dialogs/devtools/AccountData.tsx @@ -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 = ({ mxEvent, onBack }) => { const cli = useContext(MatrixClientContext); diff --git a/src/components/views/dialogs/devtools/BaseTool.tsx b/src/components/views/dialogs/devtools/BaseTool.tsx index 8a923e2623..555d5b31ff 100644 --- a/src/components/views/dialogs/devtools/BaseTool.tsx +++ b/src/components/views/dialogs/devtools/BaseTool.tsx @@ -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"; diff --git a/src/components/views/dialogs/devtools/Event.tsx b/src/components/views/dialogs/devtools/Event.tsx index 00669cd614..63712b28d9 100644 --- a/src/components/views/dialogs/devtools/Event.tsx +++ b/src/components/views/dialogs/devtools/Event.tsx @@ -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"; diff --git a/src/components/views/elements/DesktopCapturerSourcePicker.tsx b/src/components/views/elements/DesktopCapturerSourcePicker.tsx index 636e37ccd0..fd20db7ef6 100644 --- a/src/components/views/elements/DesktopCapturerSourcePicker.tsx +++ b/src/components/views/elements/DesktopCapturerSourcePicker.tsx @@ -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"; diff --git a/src/components/views/rooms/E2EIcon.tsx b/src/components/views/rooms/E2EIcon.tsx index 2598584aaa..c9c7d8ec12 100644 --- a/src/components/views/rooms/E2EIcon.tsx +++ b/src/components/views/rooms/E2EIcon.tsx @@ -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"; diff --git a/src/components/views/rooms/LegacyRoomList.tsx b/src/components/views/rooms/LegacyRoomList.tsx index 50519cbfe8..aa5b1b2398 100644 --- a/src/components/views/rooms/LegacyRoomList.tsx +++ b/src/components/views/rooms/LegacyRoomList.tsx @@ -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"; diff --git a/src/components/views/rooms/NewRoomIntro.tsx b/src/components/views/rooms/NewRoomIntro.tsx index d41bb3ecc0..989f147697 100644 --- a/src/components/views/rooms/NewRoomIntro.tsx +++ b/src/components/views/rooms/NewRoomIntro.tsx @@ -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"; diff --git a/src/components/views/rooms/Stickerpicker.tsx b/src/components/views/rooms/Stickerpicker.tsx index bbf3f49685..80d9422335 100644 --- a/src/components/views/rooms/Stickerpicker.tsx +++ b/src/components/views/rooms/Stickerpicker.tsx @@ -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"; diff --git a/src/components/views/settings/devices/DeviceTypeIcon.tsx b/src/components/views/settings/devices/DeviceTypeIcon.tsx index 8b716af1ee..35db504682 100644 --- a/src/components/views/settings/devices/DeviceTypeIcon.tsx +++ b/src/components/views/settings/devices/DeviceTypeIcon.tsx @@ -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"; diff --git a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx index 4c720a2372..308918e1b3 100644 --- a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx @@ -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"; diff --git a/src/effects/effect.ts b/src/effects/effect.ts index 571ce494ed..60f94b283f 100644 --- a/src/effects/effect.ts +++ b/src/effects/effect.ts @@ -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 = { /** * one or more emojis that will trigger this effect diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json index 19f2321f14..d548164231 100644 --- a/src/i18n/strings/cs.json +++ b/src/i18n/strings/cs.json @@ -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ě" diff --git a/src/i18n/strings/cy.json b/src/i18n/strings/cy.json index e1f8ea0e3e..b1b17c16cd 100644 --- a/src/i18n/strings/cy.json +++ b/src/i18n/strings/cy.json @@ -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:%(status)s , cyfrif:%(count)s": "other", - "Statws heb ei ddarllen yn yr ystafell:%(status)s , cyfrif:%(count)s": "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", - "": "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. Wedi'i allforio gan 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": { - " a dim arall": "zero", - " ac un arall": "one", - " 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 neges edefyn", "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 logiau dadfygio 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 “\"": "other", - "1 canlyniad wedi'i ganfod ar gyfer “\"": "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 , y mae'r gweinydd cartref hwn wedi'i nodi'n ansefydlog.", "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'u gwahardd %(count)s gwaith": "other" - }, - "banned_multiple": { - "wedi'u gwahardd": "zero", - "wedi'i wahardd": "one", - "wedi'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'i dynnu'n ôl": "zero", - "Mae %(oneUser)swedi cael ei gwahoddiad wedi'i dynnu'n ôl": "one", - "Mae %(oneUser)swedi cael eu gwahoddiad wedi'i dynnu'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 negeseuon wedi'u pinio yr ystafell %(count)s gwaith": "other", - "Newidiodd %(oneUser)s y negeseuon wedi'u pinio yr ystafell": "one" - }, - "pinned_events_multiple": { - "Newidiodd %(severalUsers)s y negeseuon wedi'u pinio yr ystafell %(count)s gwaith": "other", - "Newidiodd %(severalUsers)s y negeseuon wedi'u pinio 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", diff --git a/src/i18n/strings/da.json b/src/i18n/strings/da.json index 00bc5734a8..aa57c55bec 100644 --- a/src/i18n/strings/da.json +++ b/src/i18n/strings/da.json @@ -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.", diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index ecdd47ccac..63bdb63092 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -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" diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json index 8289ac7347..1745aac7a8 100644 --- a/src/i18n/strings/el.json +++ b/src/i18n/strings/el.json @@ -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", diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 03936f61bc..8d1ae17ea2 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -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 contact your service administrator to continue using the service.", - "history_visible": "This room has been configured so that new members can read history. Learn More", "homeserver_blocked": "Your message wasn't sent because this homeserver has been blocked by its administrator. Please contact your service administrator 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 contact your service administrator to continue using the service.", "requires_consent_agreement": "You can't send any messages until you review and agree to our terms and conditions.", @@ -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" diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 3556411638..87717c2ffa 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -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.", diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index c23bc8c5fa..4b2ea056a7 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -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" diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index 54bc4576e4..c2a79a42b6 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -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 võta ühendust serveri haldajaga.", - "history_visible": "See jututuba on seadistatud sel viisil, et uued liikmed saavad lugeda varasemat ajalugu. Lisateave", "homeserver_blocked": "Sinu sõnumit ei saadetud, kuna see koduserver blokeeritud serveri haldaja poolt. Teenuse kasutamiseks palun võta ühendust serveri haldajaga.", "monthly_user_limit_reached": "Sinu sõnumit ei saadetud, kuna see koduserver on saavutanud igakuise aktiivsete kasutajate piiri. Teenuse kasutamiseks palun võta ühendust serveri haldajaga.", "requires_consent_agreement": "Sa ei saa saata ühtego sõnumit enne, kui oled läbi lugenud ja nõustunud meie kasutustingimustega.", @@ -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" diff --git a/src/i18n/strings/fa.json b/src/i18n/strings/fa.json index 3738aa3b40..23f5ca64ec 100644 --- a/src/i18n/strings/fa.json +++ b/src/i18n/strings/fa.json @@ -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س" diff --git a/src/i18n/strings/fi.json b/src/i18n/strings/fi.json index 32f609f683..362ac0db0d 100644 --- a/src/i18n/strings/fi.json +++ b/src/i18n/strings/fi.json @@ -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", diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 159f4f450a..88cd598dae 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -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 n’a pas été envoyé car ce serveur d’accueil a dépassé une de ses limites de ressources. Veuillez contacter l’administrateur de votre service pour continuer à l’utiliser.", - "history_visible": "Ce salon a été configuré afin que les nouveaux membres puissent lire l'historique. En savori plus", "homeserver_blocked": "Votre message n’a pas été envoyé car ce serveur d’accueil a été bloqué par son administrateur. Veuillez contacter l’administrateur de votre service pour continuer à l’utiliser.", "monthly_user_limit_reached": "Votre message n’a pas été envoyé car le serveur d’accueil a atteint sa limite mensuelle d’utilisateurs. Veuillez contacter l’administrateur de votre service pour continuer à l’utiliser.", "requires_consent_agreement": "Vous ne pouvez voir aucun message tant que vous ne lisez et n’acceptez pas nos conditions générales.", @@ -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 n’a pu être chargé car il n’a pas pu être trouvé." }, "m.audio": { - "audio_player": "Lecteur audio", "error_downloading_audio": "Erreur lors du téléchargement de l’audio", "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" diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index ea7522a155..eaa18a2897 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -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" diff --git a/src/i18n/strings/he.json b/src/i18n/strings/he.json index 0b7f1986de..ae1f752cd1 100644 --- a/src/i18n/strings/he.json +++ b/src/i18n/strings/he.json @@ -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 שעות", diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 9c10c95a4e..fba37a87af 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -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: %(status)s, darabszám: %(count)s": "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", - "": "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) szoba exportálásának kezdete. Exportálta: , 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": { - " és még %(count)s másik": "other", - " é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 hibakeresési naplókat, 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: „”": "one", - "%(count)s találat ehhez: „”": "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: , amelyet a Matrix-kiszolgáló instabilnak 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 kitűzött üzeneteit", "other": "%(oneUser)s %(count)s alkalommal megváltoztatta a szoba kitűzött üzeneteit" @@ -3763,46 +3484,6 @@ "pinned_events_multiple": { "one": "%(severalUsers)s megváltoztatta a szoba kitűzött üzeneteit", "other": "%(severalUsers)s %(count)s alkalommal megváltoztatta a szoba kitűzött üzeneteit" - }, - "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", diff --git a/src/i18n/strings/hy.json b/src/i18n/strings/hy.json index 228adbdcf8..7750602ef6 100644 --- a/src/i18n/strings/hy.json +++ b/src/i18n/strings/hy.json @@ -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": { diff --git a/src/i18n/strings/id.json b/src/i18n/strings/id.json index 66ed598c41..648e81c770 100644 --- a/src/i18n/strings/id.json +++ b/src/i18n/strings/id.json @@ -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" diff --git a/src/i18n/strings/is.json b/src/i18n/strings/is.json index 0cd458dfc8..3da046eb09 100644 --- a/src/i18n/strings/is.json +++ b/src/i18n/strings/is.json @@ -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" diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index affa7e5656..7f1faefc48 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -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" diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json index 0bdb4d18ff..051d3c5e1c 100644 --- a/src/i18n/strings/ja.json +++ b/src/i18n/strings/ja.json @@ -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": "位置情報(ライブ)を表示" diff --git a/src/i18n/strings/ka.json b/src/i18n/strings/ka.json index f7413dc821..cef91bf499 100644 --- a/src/i18n/strings/ka.json +++ b/src/i18n/strings/ka.json @@ -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": "" diff --git a/src/i18n/strings/ko.json b/src/i18n/strings/ko.json index 7ff568c560..c1f7e5eb47 100644 --- a/src/i18n/strings/ko.json +++ b/src/i18n/strings/ko.json @@ -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": { - "님 외 한 명": "one", - "님 외 %(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": "이 방은 방 버전 에서 실행 중이고, 이 홈서버가 불안정으로 표시됩니다.", "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님이 이 채팅방의 고정된 메시지를 %(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개의 메시지를 삭제하려고 합니다. 이 작업은 되돌릴 수 없으며, 대화에 참여한 모든 사용자에게서 해당 메시지가 영구적으로 삭제됩니다. 계속하시겠습니까?" }, diff --git a/src/i18n/strings/lo.json b/src/i18n/strings/lo.json index 14ed5f7f1f..db7ef6ba1e 100644 --- a/src/i18n/strings/lo.json +++ b/src/i18n/strings/lo.json @@ -75,9 +75,7 @@ "no": "ບໍ່", "ok": "ຕົກລົງ", "open": "ເປີດ", - "pause": "ຢຸດຊົ່ວຄາວ", "pin": "ປັກໝຸດ", - "play": "ຫຼິ້ນ", "quote": "ວົງຢືມ", "react": "ປະຕິກິລິຍາ", "refresh": "ໂຫຼດຫນ້າຈໍຄືນ", @@ -2287,21 +2285,7 @@ "show_thread_filter": "ສະແດງ:" }, "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 ນາທີຕໍ່ຈາກນີ້", "left": "ຍັງເຫຼືອ %(timeRemaining)s", - "n_days_ago": "%(num)sມື້ກ່ອນຫນ້ານີ້", - "n_hours_ago": "%(num)s ຊົ່ວໂມງກ່ອນ", - "n_minutes_ago": "%(num)s ນາທີກ່ອນ", "seconds_left": "ຍັງເຫຼືອ %(seconds)s" }, "timeline": { @@ -2336,8 +2320,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": "ເບິ່ງສະຖານທີ່ປັດຈຸບັນ" diff --git a/src/i18n/strings/lt.json b/src/i18n/strings/lt.json index 8f3add6d43..0c04e1090d 100644 --- a/src/i18n/strings/lt.json +++ b/src/i18n/strings/lt.json @@ -1782,21 +1782,7 @@ "open_thread": "Atidaryti temą" }, "time": { - "about_day_ago": "maždaug prieš dieną", - "about_hour_ago": "maždaug prieš valandą", - "about_minute_ago": "maždaug prieš minutę", "date_at_time": "%(date)s %(time)s", - "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(-ų)", "seconds_left": "%(seconds)ss liko", "short_hours": "%(value)sval" }, diff --git a/src/i18n/strings/lv.json b/src/i18n/strings/lv.json index 951a5bae1e..47d25ced02 100644 --- a/src/i18n/strings/lv.json +++ b/src/i18n/strings/lv.json @@ -87,9 +87,7 @@ "no": "Nē", "ok": "Labi", "open": "Atvērt", - "pause": "Pauzēt", "pin": "Piespraust", - "play": "Atskaņot", "proceed": "Turpināt", "quote": "Citēt", "react": "Reaģēt", @@ -1552,8 +1550,6 @@ "files_button": "Datnes", "pinned_messages": { "limits": { - "zero": "", - "one": "", "other": "Varat piespraust ne vairāk kā %(count)s logrīkus" } }, @@ -2764,24 +2760,10 @@ "no_rooms_with_unread_threads": "Jums vēl nav istabu ar nelasītiem pavedieniem." }, "time": { - "about_day_ago": "aptuveni dienu iepriekš", - "about_hour_ago": "aptuveni stundu iepriekš", - "about_minute_ago": "aptuveni minūti iepriekš", "date_at_time": "%(date)s pulksten %(time)s", - "few_seconds_ago": "pirms dažām sekundēm", "hours_minutes_seconds_left": "%(hours)sh %(minutes)s m %(seconds)s s atlicis", - "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", "left": "%(timeRemaining)s atlicis", "minutes_seconds_left": "%(minutes)sm %(seconds)s s atlicis", - "n_days_ago": "%(num)s dienas iepriekš", - "n_hours_ago": "%(num)s stundas iepriekš", - "n_minutes_ago": "%(num)s minūtes iepriekš", "seconds_left": "%(seconds)s sekundes atlikušas", "short_days": "%(value)s d.", "short_days_hours_minutes_seconds": "%(days)sd %(hours)sh %(minutes)sm %(seconds)ss", @@ -2828,8 +2810,7 @@ "m.audio": { "error_downloading_audio": "Kļūda skaņas lejupielādēšanā", "error_processing_audio": "Kļūda audio ziņas apstrādē", - "error_processing_voice_message": "Balss ziņas apstrādes kļūda", - "unnamed_audio": "Nenosaukts audio" + "error_processing_voice_message": "Balss ziņas apstrādes kļūda" }, "m.beacon_info": { "view_live_location": "Skatīties reāllaika atrašanās vietu" diff --git a/src/i18n/strings/mg_MG.json b/src/i18n/strings/mg_MG.json index d68e1454d6..ca70cf769f 100644 --- a/src/i18n/strings/mg_MG.json +++ b/src/i18n/strings/mg_MG.json @@ -84,9 +84,7 @@ "next": "Fanarahana", "no": "Tsya", "ok": "Eny", - "pause": "Mihato", "pin": "Hahantona", - "play": "Milalao", "proceed": "Izotra", "quote": "Notsongaina", "react": "Mamaly", @@ -1613,7 +1611,6 @@ "files_button": "Rakitra", "pinned_messages": { "limits": { - "one": "", "other": "Azonao atao ihany ny manoratra%(count)s gadget" } }, @@ -2820,24 +2817,10 @@ "header": "Hetsika kofehy" }, "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", "date_at_time": "% (Mihaona amin'ny % (fotoana", - "few_seconds_ago": "Segondra vitsy lasa", "hours_minutes_seconds_left": "% (ora) s h%(minitra) s m%(segondra) s ny tavela", - "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", "left": "%(timeRemaining) sAnkavia", "minutes_seconds_left": "% (minutes) sm% (segondra) s ny ambiny", - "n_days_ago": "%(num)s Andro vitsivitsy izay", - "n_hours_ago": "%(num)sOra maromaro", - "n_minutes_ago": "%(Num)s Minitra vitsivitsy izay", "seconds_left": "% (secondes) s ny ambiny", "short_days": "% (Sandales d", "short_days_hours_minutes_seconds": "%(andro) s d % (ora) sh% (minitra) s m % (segondra)s s", @@ -2882,8 +2865,7 @@ "m.audio": { "error_downloading_audio": "Hadisoana tamin'ny fampidinana feo", "error_processing_audio": "Hadisoana tamin'ny fanodinana hafatra audio", - "error_processing_voice_message": "Hadisoana tamin'ny fanodinana hafatra feo", - "unnamed_audio": "Audio tsy voatonona anarana" + "error_processing_voice_message": "Hadisoana tamin'ny fanodinana hafatra feo" }, "m.beacon_info": { "view_live_location": "Jereo ny toerana mivantana" @@ -3284,7 +3266,6 @@ } }, "truncated_list_n_more": { - "one": "", "other": "SY%(count)s Bebe kokoa..." }, "unsupported_server_description": "Ity mpizara ity dia mampiasa dikan-teny taloha any. Hiverina any amin'ny %(version)s mampiasa%(brand)s tsy misy hadisoana.", diff --git a/src/i18n/strings/nb_NO.json b/src/i18n/strings/nb_NO.json index 4a8e4d9aee..e57a3acd00 100644 --- a/src/i18n/strings/nb_NO.json +++ b/src/i18n/strings/nb_NO.json @@ -101,9 +101,7 @@ "ok": "OK", "open": "Åpne", "open_menu": "Åpne meny", - "pause": "Pause", "pin": "Fest", - "play": "Spill av", "proceed": "Fortsett", "quote": "Sitat", "react": "Reager", @@ -1911,7 +1909,6 @@ "other": "%(count)s festede meldinger" }, "limits": { - "one": "", "other": "Du kan bare feste opptil %(count)s widgets" }, "menu": "Åpne meny", @@ -2219,9 +2216,6 @@ }, "room_options": "Rominnstillinger", "show_less": "Vis mindre", - "show_n_more": { - "Vis %(count)s til": "Vis %(count)s mer" - }, "show_previews": "Vis forhåndsvisninger av meldinger", "sort": "Sorter", "sort_by": "Sorter etter", @@ -3383,24 +3377,10 @@ "no_rooms_with_unread_threads": "Du har ikke rom med uleste tråder ennå." }, "time": { - "about_day_ago": "cirka 1 dag siden", - "about_hour_ago": "cirka 1 time siden", - "about_minute_ago": "cirka 1 minutt siden", "date_at_time": "%(date)s klokken %(time)s", - "few_seconds_ago": "noen sekunder siden", "hours_minutes_seconds_left": "%(hours)st%(minutes)s m%(seconds)s s igjen", - "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å", "left": "%(timeRemaining)s igjen", "minutes_seconds_left": "%(minutes)sm%(seconds)s s igjen", - "n_days_ago": "%(num)s dager siden", - "n_hours_ago": "%(num)s timer siden", - "n_minutes_ago": "%(num)s minutter siden", "seconds_left": "%(seconds)ser igjen", "short_days": "%(value)sd", "short_days_hours_minutes_seconds": "%(days)sd %(hours)s t %(minutes)s m %(seconds)s er", @@ -3455,11 +3435,9 @@ "unable_to_find": "Prøvde å laste inn et bestemt punkt i dette rommets tidslinje, men klarte ikke å finne det." }, "m.audio": { - "audio_player": "Lydavspiller", "error_downloading_audio": "Feil ved nedlasting av lyd", "error_processing_audio": "Feil ved prosessering av lydmelding", - "error_processing_voice_message": "Feil ved prosessering av talemelding", - "unnamed_audio": "Ikke navngitt lyd" + "error_processing_voice_message": "Feil ved prosessering av talemelding" }, "m.beacon_info": { "view_live_location": "Se lokasjon i sanntid" @@ -3730,9 +3708,6 @@ "one": "%(oneUser)s endret navn", "other": "%(oneUser)s endret navn %(count)s ganger" }, - "changed_name_multiple": { - "%(severalUsers)s endret navnene sine": "one" - }, "format": "%(nameList)s%(transitionList)s", "hidden_event": { "one": "%(oneUser)ssendte en skjult melding", @@ -3746,9 +3721,6 @@ "one": "%(oneUser)sfikk invitasjonen trukket tilbake", "other": "%(oneUser)sfikk invitasjonen trukket tilbake %(count)s ganger" }, - "invite_withdrawn_multiple": { - "%(severalUsers)sfikk sine invitasjoner trukket tilbake": "one" - }, "invited": { "one": "ble invitert", "other": "ble invitert %(count)s ganger" @@ -3761,9 +3733,6 @@ "one": "%(oneUser)sble med", "other": "%(oneUser)sble med %(count)s ganger" }, - "joined_and_left": { - "%(oneUser)sble med og forlot igjen": "one" - }, "joined_and_left_multiple": { "one": "%(severalUsers)sble med og forlot", "other": "%(severalUsers)sble med og forlot %(count)s ganger" @@ -3863,9 +3832,6 @@ } } }, - "truncated_list_n_more": { - "Og %(count)s til...": "other" - }, "unsupported_browser": { "description": "Hvis du fortsetter, kan noen funksjoner slutte å fungere, og det er en risiko for at du kan miste data i fremtiden. Oppdater nettleseren din for å fortsette å bruke%(brand)s.", "title": "%(brand)s støtter ikke denne nettleseren" @@ -3906,11 +3872,7 @@ "not_image": "Filen du har valgt, er ikke en gyldig bildefil.", "title": "Last opp filer", "title_progress": "Last opp filer (%(current)s av %(total)s)", - "upload_all_button": "Last opp alle", - "upload_n_others_button": { - "Last opp %(count)s andre filer": "Last opp %(count)s andre filer", - "Last opp %(count)s annen fil": "Last opp %(count)s en annen fil" - } + "upload_all_button": "Last opp alle" }, "user_info": { "admin_tools_section": "Adminverktøy", @@ -3948,10 +3910,6 @@ "kick_space_warning": "De vil fortsatt kunne få tilgang til det du ikke er administrator av.", "promote_warning": "Du vil ikke kunne angre denne endringen ettersom du promoterer brukeren til å ha samme tilgangsnivå som deg selv.", "redact": { - "confirm_button": { - "Slett %(count)s meldinger": "Fjern 1 melding", - "Slett 1 melding": "Fjern %(count)s meldinger" - }, "confirm_description_1": { "one": "Du er i ferd med å fjerne %(count)s melding fra %(user)s. Dette vil fjerne dem permanent for alle i samtalen. Ønsker du å fortsette?", "other": "Du er i ferd med å fjerne %(count)s meldinger fra %(user)s. Dette vil fjerne dem permanent for alle i samtalen. Ønsker du å fortsette?" diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index 723b8b3a6d..8526543614 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -86,9 +86,7 @@ "no": "Nee", "ok": "Oké", "open": "Openen", - "pause": "Pauze", "pin": "Vastmaken", - "play": "Afspelen", "proceed": "Doorgaan", "quote": "Citeren", "react": "Reageren", @@ -2420,24 +2418,10 @@ "show_thread_filter": "Toon:" }, "time": { - "about_day_ago": "ongeveer een dag geleden", - "about_hour_ago": "ongeveer een uur geleden", - "about_minute_ago": "ongeveer een minuut geleden", "date_at_time": "%(date)s om %(time)s", - "few_seconds_ago": "enige tellen geleden", "hours_minutes_seconds_left": "%(hours)su, %(minutes)sm %(seconds)ss over", - "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", "left": "%(timeRemaining)s over", "minutes_seconds_left": "%(minutes)sm %(seconds)ss over", - "n_days_ago": "%(num)s dagen geleden", - "n_hours_ago": "%(num)s uur geleden", - "n_minutes_ago": "%(num)s minuten geleden", "seconds_left": "%(seconds)s's over", "short_days": "%(value)sd", "short_days_hours_minutes_seconds": "%(days)sd %(hours)su %(minutes)sm %(seconds)ss", @@ -2477,8 +2461,7 @@ "m.audio": { "error_downloading_audio": "Fout bij downloaden van audio", "error_processing_audio": "Fout bij verwerking audiobericht", - "error_processing_voice_message": "Fout bij verwerking spraakbericht", - "unnamed_audio": "Naamloze audio" + "error_processing_voice_message": "Fout bij verwerking spraakbericht" }, "m.beacon_info": { "view_live_location": "Bekijk live locatie" diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index 53032886e3..f8360892fe 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -102,9 +102,7 @@ "ok": "OK", "open": "Otwórz", "open_menu": "Otwórz menu", - "pause": "Wstrzymaj", "pin": "Przypnij", - "play": "Odtwórz", "proceed": "Kontynuuj", "quote": "Cytuj", "react": "Dodaj reakcję", @@ -3356,24 +3354,10 @@ "no_rooms_with_unread_threads": "Nie masz jeszcze pokoi z nieprzeczytanymi wątkami." }, "time": { - "about_day_ago": "około dzień temu", - "about_hour_ago": "około godziny temu", - "about_minute_ago": "około minuty temu", "date_at_time": "%(date)s o %(time)s", - "few_seconds_ago": "kilka sekund temu", "hours_minutes_seconds_left": "pozostało %(hours)s godz. %(minutes)s min. %(seconds)ss", - "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", "left": "%(timeRemaining)s pozostało", "minutes_seconds_left": "pozostało %(minutes)s min. %(seconds)ss", - "n_days_ago": "%(num)s dni temu", - "n_hours_ago": "%(num)s godzin temu", - "n_minutes_ago": "%(num)s minut temu", "seconds_left": "pozostało %(seconds)ss", "short_days": "%(value)sd", "short_days_hours_minutes_seconds": "%(days)sd %(hours)s godz. %(minutes)s min. %(seconds)ss", @@ -3428,11 +3412,9 @@ "unable_to_find": "Próbowano załadować konkretny punkt na osi czasu w tym pokoju, ale nie można go znaleźć." }, "m.audio": { - "audio_player": "Odtwarzacz audio", "error_downloading_audio": "Wystąpił błąd w trakcie pobierania audio", "error_processing_audio": "Wystąpił błąd procesowania wiadomości audio", - "error_processing_voice_message": "Wystąpił błąd procesowania wiadomości głosowej", - "unnamed_audio": "Audio bez nazwy" + "error_processing_voice_message": "Wystąpił błąd procesowania wiadomości głosowej" }, "m.beacon_info": { "view_live_location": "Pokaż lokalizację na żywo" diff --git a/src/i18n/strings/pt.json b/src/i18n/strings/pt.json index 2ed647b43e..7ff51fb9ca 100644 --- a/src/i18n/strings/pt.json +++ b/src/i18n/strings/pt.json @@ -88,9 +88,7 @@ "ok": "OK", "open": "Abrir", "open_menu": "Abrir menu", - "pause": "Pausar", "pin": "Fixar", - "play": "Reproduzir", "proceed": "Prosseguir", "quote": "Citar", "react": "Reagir", @@ -1781,7 +1779,6 @@ "other": "%(count)s Mensagens fixadas" }, "limits": { - "one": "", "other": "Só podes fixar até %(count)s widgets" }, "menu": "Abrir o menu", @@ -3182,24 +3179,10 @@ "no_rooms_with_unread_threads": "Ainda não tens salas com tópicos não lidos." }, "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", "date_at_time": "%(date)s às %(time)s", - "few_seconds_ago": "há alguns segundos atrás", "hours_minutes_seconds_left": "%(hours)sh %(minutes)sm %(seconds)ss restantes", - "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", "left": "%(timeRemaining)s ainda", "minutes_seconds_left": "%(minutes)sm %(seconds)ss restantes", - "n_days_ago": "%(num)s dias atrás", - "n_hours_ago": "%(num)s horas atrás", - "n_minutes_ago": "%(num)s minutos atrás", "seconds_left": "%(seconds)ss restantes", "short_days": "%(value)sd", "short_days_hours_minutes_seconds": "%(days)sd %(hours)sh %(minutes)sm %(seconds)ss", @@ -3256,8 +3239,7 @@ "m.audio": { "error_downloading_audio": "Erro ao descarregar áudio", "error_processing_audio": "Erro no processamento da mensagem de áudio", - "error_processing_voice_message": "Erro no processamento da mensagem de voz", - "unnamed_audio": "Áudio sem nome" + "error_processing_voice_message": "Erro no processamento da mensagem de voz" }, "m.beacon_info": { "view_live_location": "Vê a localização ao vivo" @@ -3664,7 +3646,6 @@ } }, "truncated_list_n_more": { - "one": "", "other": "E %(count)s mais..." }, "unsupported_browser": { diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index 9f2e9f5879..5c58fbc4e8 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -101,9 +101,7 @@ "ok": "Ok", "open": "Abrir", "open_menu": "Abrir menu", - "pause": "Pausar", "pin": "Alfinete", - "play": "Reproduzir", "proceed": "Prosseguir", "quote": "Citar", "react": "Adicionar reação", @@ -3366,24 +3364,10 @@ "no_rooms_with_unread_threads": "Você ainda não tem salas com tópicos não lidos." }, "time": { - "about_day_ago": "há aproximadamente um dia", - "about_hour_ago": "há aproximadamente uma hora", - "about_minute_ago": "há aproximadamente um minuto", "date_at_time": "%(date)s às %(time)s", - "few_seconds_ago": "há alguns segundos", "hours_minutes_seconds_left": "%(hours)sh %(minutes)sm %(seconds)ss restantes", - "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", "left": "%(timeRemaining)s restante(s)", "minutes_seconds_left": "%(minutes)sm %(seconds)ss restantes", - "n_days_ago": "há %(num)s dias", - "n_hours_ago": "há %(num)s horas", - "n_minutes_ago": "há %(num)s minutos", "seconds_left": "%(seconds)s restantes", "short_days": "%(value)sd", "short_days_hours_minutes_seconds": "%(days)sd %(hours)s h %(minutes)s m %(seconds)s s", @@ -3438,11 +3422,9 @@ "unable_to_find": "Não foi possível carregar um trecho específico da conversa desta sala." }, "m.audio": { - "audio_player": "Reprodutor de Áudio", "error_downloading_audio": "Erro ao baixar o áudio", "error_processing_audio": "Erro ao processar a mensagem de áudio", - "error_processing_voice_message": "Erro ao processar a mensagem de voz", - "unnamed_audio": "Áudio sem nome" + "error_processing_voice_message": "Erro ao processar a mensagem de voz" }, "m.beacon_info": { "view_live_location": "Ver localização ao vivo" diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index a4d54eddeb..f92fc80ca1 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -103,9 +103,7 @@ "ok": "ОК", "open": "Открыть", "open_menu": "Открыть меню", - "pause": "Пауза", "pin": "Закрепить", - "play": "Воспроизведение", "proceed": "Продолжить", "quote": "Цитировать", "react": "Отреагировать", @@ -3388,24 +3386,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 с", @@ -3460,11 +3444,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": "Посмотреть трансляцию местоположения" @@ -3873,11 +3855,6 @@ } } }, - "truncated_list_n_more": { - "one": "%(count)s...", - "few": "И еще %(count)s...", - "many": "И еще %(count)s..." - }, "unsupported_browser": { "description": "Если вы продолжите, некоторые функции могут перестать работать, и существует риск потери данных в будущем. Обновите браузер, чтобы продолжить использование %(brand)s.", "title": "%(brand)s не поддерживает этот браузер" diff --git a/src/i18n/strings/sk.json b/src/i18n/strings/sk.json index 64a49eed52..d7cb36f515 100644 --- a/src/i18n/strings/sk.json +++ b/src/i18n/strings/sk.json @@ -105,9 +105,7 @@ "ok": "OK", "open": "Otvoriť", "open_menu": "Otvoriť ponuku", - "pause": "Pozastaviť", "pin": "Špendlík", - "play": "Prehrať", "proceed": "Pokračovať", "quote": "Citovať", "react": "Reagovať", @@ -1933,8 +1931,6 @@ "other": "%(count)s pripnutých správ" }, "limits": { - "one": "Môžete pripnúť iba %(count)s widget", - "few": "Môžete pripnúť iba %(count)s widgety", "other": "Môžete pripnúť iba %(count)s widgetov" }, "menu": "Otvoriť ponuku", @@ -2153,7 +2149,6 @@ "status_bar": { "delete_all": "Vymazať všetko", "exceeded_resource_limit": "Vaša správa nebola odoslaná, pretože bol prekročený limit prostriedkov tohoto domovského servera. Prosím, kontaktujte správcu služieb aby ste službu mohli naďalej používať.", - "history_visible": "Správy, ktoré odošlete, budú zdieľané s novými členmi pozvanými do tejto miestnosti. Zistiť viac", "homeserver_blocked": "Vaša správa nebola odoslaná, pretože tento domovský server bol zablokovaný jeho správcom. Prosím, kontaktujte správcu služieb, aby ste službu mohli naďalej používať.", "monthly_user_limit_reached": "Vaša správa nebola odoslaná, pretože bol dosiahnutý mesačný limit počtu aktívnych používateľov tohoto domovského servera. Prosím, kontaktujte správcu služieb aby ste službu mohli naďalej používať.", "requires_consent_agreement": "Nemôžete posielať žiadne správy, kým si neprečítate a neodsúhlasíte naše zmluvné podmienky.", @@ -3428,24 +3423,10 @@ "no_rooms_with_unread_threads": "Zatiaľ nemáte miestnosti s neprečítanými vláknami." }, "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", "date_at_time": "%(date)s o %(time)s", - "few_seconds_ago": "pred pár sekundami", "hours_minutes_seconds_left": "ostáva %(hours)sh %(minutes)sm %(seconds)ss", - "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", "left": "zostáva %(timeRemaining)s", "minutes_seconds_left": "ostáva %(minutes)sm %(seconds)ss", - "n_days_ago": "pred %(num)s dňami", - "n_hours_ago": "pred %(num)s hodinami", - "n_minutes_ago": "pred %(num)s minútami", "seconds_left": "%(seconds)ss ostáva", "short_days": "%(value)sd", "short_days_hours_minutes_seconds": "%(days)sd %(hours)sh %(minutes)sm %(seconds)ss", @@ -3500,11 +3481,9 @@ "unable_to_find": "Pokus o načítanie konkrétneho bodu na časovej osi tejto miestnosti, ale nepodarilo sa ho nájsť." }, "m.audio": { - "audio_player": "Prehrávač zvuku", "error_downloading_audio": "Chyba pri sťahovaní zvuku", "error_processing_audio": "Chyba pri spracovaní hlasovej správy", - "error_processing_voice_message": "Chyba pri spracovaní hlasovej správy", - "unnamed_audio": "Nepomenovaný zvukový záznam" + "error_processing_voice_message": "Chyba pri spracovaní hlasovej správy" }, "m.beacon_info": { "view_live_location": "Zobraziť polohu v reálnom čase" diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index 30200eeae9..a5248c2c51 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -78,9 +78,7 @@ "next": "Pasuesja", "no": "Jo", "open": "Hape", - "pause": "Ndalesë", "pin": "Fiksoje", - "play": "Luaje", "quote": "Citim", "react": "Reagoni", "refresh": "Rifreskoje", @@ -2651,24 +2649,10 @@ "show_thread_filter": "Shfaq:" }, "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ë", "date_at_time": "%(date)s më %(time)s", - "few_seconds_ago": "pak sekonda më parë", "hours_minutes_seconds_left": "Edhe %(hours)sh %(minutes)sm %(seconds)ss", - "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", "left": "Edhe %(timeRemaining)s", "minutes_seconds_left": "Edhe %(minutes)sm %(seconds)ss", - "n_days_ago": "%(num)s ditë më parë", - "n_hours_ago": "%(num)s orë më parë", - "n_minutes_ago": "%(num)s minuta më parë", "seconds_left": "Edhe %(seconds)ss" }, "timeline": { @@ -2704,8 +2688,7 @@ "m.audio": { "error_downloading_audio": "Gabim në shkarkim audioje", "error_processing_audio": "Gabim në përpunim mesazhi audio", - "error_processing_voice_message": "Gabim në përpunimin e mesazhit zanor", - "unnamed_audio": "Audio pa emër" + "error_processing_voice_message": "Gabim në përpunimin e mesazhit zanor" }, "m.beacon_info": { "view_live_location": "Shihni vendndodhje aty për aty" diff --git a/src/i18n/strings/sv.json b/src/i18n/strings/sv.json index 3103398033..68ecf098f5 100644 --- a/src/i18n/strings/sv.json +++ b/src/i18n/strings/sv.json @@ -100,9 +100,7 @@ "ok": "OK", "open": "Öppna", "open_menu": "Öppna menyn", - "pause": "Pausa", "pin": "Häftstift", - "play": "Spela", "proceed": "Fortsätt", "quote": "Citera", "react": "Reagera", @@ -3297,24 +3295,10 @@ "no_rooms_with_unread_threads": "Du har inga rum med olästa trådar än." }, "time": { - "about_day_ago": "cirka en dag sedan", - "about_hour_ago": "cirka en timme sedan", - "about_minute_ago": "cirka en minut sedan", "date_at_time": "%(date)s vid %(time)s", - "few_seconds_ago": "några sekunder sedan", "hours_minutes_seconds_left": "%(hours)st %(minutes)sm %(seconds)ss kvar", - "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", "left": "%(timeRemaining)s kvar", "minutes_seconds_left": "%(minutes)sm %(seconds)ss kvar", - "n_days_ago": "%(num)s dagar sedan", - "n_hours_ago": "%(num)s timmar sedan", - "n_minutes_ago": "%(num)s minuter sedan", "seconds_left": "%(seconds)ss kvar", "short_days": "%(value)sd", "short_days_hours_minutes_seconds": "%(days)sd %(hours)st %(minutes)sm %(seconds)ss", @@ -3369,11 +3353,9 @@ "unable_to_find": "Försökte ladda en specifik punkt i det här rummets tidslinje, men kunde inte hitta den." }, "m.audio": { - "audio_player": "Ljudspelare", "error_downloading_audio": "Fel vid nedladdning av ljud", "error_processing_audio": "Fel vid hantering av ljudmeddelande", - "error_processing_voice_message": "Fel vid hantering av röstmeddelande", - "unnamed_audio": "Namnlöst ljud" + "error_processing_voice_message": "Fel vid hantering av röstmeddelande" }, "m.beacon_info": { "view_live_location": "Se realtidsposition" diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json index ecd80897a2..a3d9bdddaa 100644 --- a/src/i18n/strings/tr.json +++ b/src/i18n/strings/tr.json @@ -87,9 +87,7 @@ "ok": "Tamam", "open": "Aç", "open_menu": "Menüyü aç", - "pause": "Durdur", "pin": "PIN Kodu", - "play": "Oynat", "proceed": "İlerle", "quote": "Alıntı", "react": "Tepki ver", @@ -1779,7 +1777,6 @@ "other": "%(count)s Sabitlenmiş mesaj" }, "limits": { - "one": "", "other": "En fazla %(count)s widget'ı sabitleyebilirsiniz" }, "menu": "Menüyü aç", @@ -3153,24 +3150,10 @@ "no_rooms_with_unread_threads": "Henüz okunmamış mesaj dizilerinin bulunduğu odalarınız yok." }, "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", "date_at_time": "%(date)s e %(time)s", - "few_seconds_ago": "bir kaç saniye önce", "hours_minutes_seconds_left": "%(hours)sh %(minutes)sm %(seconds)ss kaldı", - "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", "left": "%(timeRemaining)s kaldı", "minutes_seconds_left": "%(minutes)sm %(seconds)ss kaldı", - "n_days_ago": "%(num)s gün önce", - "n_hours_ago": "%(num)s saat önce", - "n_minutes_ago": "%(num)s dakika önce", "seconds_left": "%(seconds)s saniye kaldı", "short_days": "%(value)sd", "short_days_hours_minutes_seconds": "%(days)sd %(hours)sh %(minutes)sm %(seconds)ss", @@ -3227,8 +3210,7 @@ "m.audio": { "error_downloading_audio": "Ses dosyası indirilirken hata oluştu", "error_processing_audio": "Sesli mesaj işlenirken hata oluştu", - "error_processing_voice_message": "Sesli mesaj işlenirken hata oluştu", - "unnamed_audio": "İsimsiz ses" + "error_processing_voice_message": "Sesli mesaj işlenirken hata oluştu" }, "m.beacon_info": { "view_live_location": "Canlı konumu görüntüle" diff --git a/src/i18n/strings/uk.json b/src/i18n/strings/uk.json index 864d8b89b4..97cb516a11 100644 --- a/src/i18n/strings/uk.json +++ b/src/i18n/strings/uk.json @@ -103,9 +103,7 @@ "ok": "Гаразд", "open": "Відкрити", "open_menu": "Відкрити меню", - "pause": "Призупинити", "pin": "Кнопка", - "play": "Відтворити", "proceed": "Продовжити", "quote": "Цитувати", "react": "Відреагувати", @@ -3387,24 +3385,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с", @@ -3459,11 +3443,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": "Показувати місцеперебування наживо" @@ -3879,11 +3861,6 @@ } } }, - "truncated_list_n_more": { - "one": "", - "few": "І ще %(count)s…", - "many": "І ще %(count)s…" - }, "unsupported_browser": { "description": "Якщо ви продовжите, деякі функції можуть перестати працювати, і існує ризик втрати даних у майбутньому. Оновіть браузер, щоб продовжити користуватись %(brand)s.", "title": "%(brand)s не підтримує цей браузер" diff --git a/src/i18n/strings/vi.json b/src/i18n/strings/vi.json index 2fedb71c84..c611f48cd4 100644 --- a/src/i18n/strings/vi.json +++ b/src/i18n/strings/vi.json @@ -83,9 +83,7 @@ "no": "Không", "ok": "Ok", "open": "Mở", - "pause": "Tạm dừng", "pin": "Ghim", - "play": "Chạy", "proceed": "Tiếp tục", "quote": "Trích", "react": "Phản ứng", @@ -2597,23 +2595,9 @@ "show_thread_filter": "Hiển thị:" }, "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", "date_at_time": "%(date)s lúc %(time)s", - "few_seconds_ago": "vài giây trước", "hours_minutes_seconds_left": "Còn lại %(hours)s giờ %(minutes)s phút %(seconds)s giây", - "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ờ", "minutes_seconds_left": "Còn lại %(minutes)s phút %(seconds)s giây", - "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", "seconds_left": "Còn %(seconds)s giây", "short_days": "%(value)sngày", "short_days_hours_minutes_seconds": "%(days)s ngày %(hours)s giờ %(minutes)s phút %(seconds)s giây", @@ -2656,8 +2640,7 @@ "m.audio": { "error_downloading_audio": "Lỗi khi tải xuống âm thanh", "error_processing_audio": "Lỗi khi xử lý tin nhắn âm thanh", - "error_processing_voice_message": "Lỗi khi xử lý tin nhắn thoại", - "unnamed_audio": "Âm thanh không tên" + "error_processing_voice_message": "Lỗi khi xử lý tin nhắn thoại" }, "m.call": { "video_call_ended": "Cuộc gọi truyền hình đã kết thúc", diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index 489e56ca53..9a399f3c1e 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -81,9 +81,7 @@ "no": "不", "ok": "确定", "open": "打开", - "pause": "暂停", "pin": "别针", - "play": "播放", "proceed": "继续", "quote": "引述", "react": "回应", @@ -2522,24 +2520,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)s 秒", "short_days": "%(value)s 天", "short_days_hours_minutes_seconds": "%(days)s天%(hours)s小时%(minutes)s分钟%(seconds)s秒", @@ -2581,8 +2565,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": "查看实时位置" diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 5094d81d18..e0e7bb4ec1 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -85,9 +85,7 @@ "no": "否", "ok": "確定", "open": "開啟", - "pause": "暫停", "pin": "圖釘", - "play": "播放", "proceed": "繼續", "quote": "引用", "react": "反應", @@ -2835,24 +2833,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)s 秒", "short_days": "%(value)sd", "short_days_hours_minutes_seconds": "%(days)s 天 %(hours)s 小時 %(minutes)s 分鐘 %(seconds)s 秒", @@ -2895,8 +2879,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": "檢視即時位置" diff --git a/src/languageHandler.tsx b/src/languageHandler.tsx index abd26dda01..2effdb3856 100644 --- a/src/languageHandler.tsx +++ b/src/languageHandler.tsx @@ -12,7 +12,6 @@ import _ from "lodash"; import { _t, normalizeLanguageKey, - type TranslationKey, type IVariables, KEY_SEPARATOR, getLangsJson, @@ -33,7 +32,6 @@ export { _t, type IVariables, type Tags, - type TranslationKey, type TranslatedString, _td, _tDom, diff --git a/src/modules/ProxiedModuleApi.ts b/src/modules/ProxiedModuleApi.ts index f36b81dec2..9bccf9f71f 100644 --- a/src/modules/ProxiedModuleApi.ts +++ b/src/modules/ProxiedModuleApi.ts @@ -19,7 +19,7 @@ import { type ModuleUiDialogOptions } from "@matrix-org/react-sdk-module-api/lib import type React from "react"; import Modal from "../Modal"; -import { _t, type TranslationKey } from "../languageHandler"; +import { _t } from "../languageHandler"; import { ModuleUiDialog } from "../components/views/dialogs/ModuleUiDialog"; import SdkConfig from "../SdkConfig"; import PlatformPeg from "../PlatformPeg"; diff --git a/src/notifications/VectorPushRulesDefinitions.ts b/src/notifications/VectorPushRulesDefinitions.ts index 403efbc49b..d496119f1e 100644 --- a/src/notifications/VectorPushRulesDefinitions.ts +++ b/src/notifications/VectorPushRulesDefinitions.ts @@ -9,7 +9,7 @@ Please see LICENSE files in the repository root for full details. import { type IAnnotatedPushRule, type PushRuleAction, RuleId } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; -import { _td, type TranslationKey } from "../languageHandler"; +import { _td } from "../languageHandler"; import { StandardActions } from "./StandardActions"; import { PushRuleVectorState, VectorState } from "./PushRuleVectorState"; import { NotificationUtils } from "./NotificationUtils"; diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index 2fdc1a79a2..53fa9dff88 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -10,7 +10,7 @@ Please see LICENSE files in the repository root for full details. import React, { type ReactNode } from "react"; import { STABLE_MSC4133_EXTENDED_PROFILES, UNSTABLE_MSC4133_EXTENDED_PROFILES } from "matrix-js-sdk/src/matrix"; // Import these directly from shared-components to avoid circular deps -import { _t, _td, type TranslationKey } from "@element-hq/web-shared-components"; +import { _t, _td } from "@element-hq/web-shared-components"; import { type MediaPreviewConfig } from "../@types/media_preview.ts"; import DeviceIsolationModeController from "./controllers/DeviceIsolationModeController.ts"; diff --git a/src/settings/controllers/ServerSupportUnstableFeatureController.ts b/src/settings/controllers/ServerSupportUnstableFeatureController.ts index 058fdaae08..1b212da638 100644 --- a/src/settings/controllers/ServerSupportUnstableFeatureController.ts +++ b/src/settings/controllers/ServerSupportUnstableFeatureController.ts @@ -11,7 +11,7 @@ import MatrixClientBackedController from "./MatrixClientBackedController"; import { type WatchManager } from "../WatchManager"; import SettingsStore from "../SettingsStore"; import { type SettingKey } from "../Settings.tsx"; -import { _t, type TranslationKey } from "../../languageHandler.tsx"; +import { _t } from "../../languageHandler.tsx"; /** * Disables a given setting if the server unstable feature it requires is not supported diff --git a/src/slash-commands/command.ts b/src/slash-commands/command.ts index 9619c514dd..f541f5ae98 100644 --- a/src/slash-commands/command.ts +++ b/src/slash-commands/command.ts @@ -14,7 +14,7 @@ import { type SlashCommand as SlashCommandEvent } from "@matrix-org/analytics-ev import { TimelineRenderingType } from "../contexts/RoomContext"; import { reject } from "./utils"; -import { _t, type TranslationKey, UserFriendlyError } from "../languageHandler"; +import { _t, UserFriendlyError } from "../languageHandler"; import { PosthogAnalytics } from "../PosthogAnalytics"; import { CommandCategories, type RunResult } from "./interface"; diff --git a/src/utils/AutoDiscoveryUtils.tsx b/src/utils/AutoDiscoveryUtils.tsx index e5359c48f8..32bd92df7c 100644 --- a/src/utils/AutoDiscoveryUtils.tsx +++ b/src/utils/AutoDiscoveryUtils.tsx @@ -18,7 +18,7 @@ import { } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; -import { _t, _td, type TranslationKey, UserFriendlyError } from "../languageHandler"; +import { _t, _td, UserFriendlyError } from "../languageHandler"; import SdkConfig from "../SdkConfig"; import { type ValidatedServerConfig } from "./ValidatedServerConfig"; diff --git a/src/utils/ErrorUtils.tsx b/src/utils/ErrorUtils.tsx index 2772350a0c..de3d0bfdf3 100644 --- a/src/utils/ErrorUtils.tsx +++ b/src/utils/ErrorUtils.tsx @@ -10,7 +10,7 @@ import React, { type ReactNode } from "react"; import { MatrixError, ConnectionError } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; -import { _t, _td, lookupString, type Tags, type TranslatedString, type TranslationKey } from "../languageHandler"; +import { _t, _td, lookupString, type Tags, type TranslatedString } from "../languageHandler"; import SdkConfig from "../SdkConfig"; import { type ValidatedServerConfig } from "./ValidatedServerConfig"; import ExternalLink from "../components/views/elements/ExternalLink"; diff --git a/src/widgets/CapabilityText.tsx b/src/widgets/CapabilityText.tsx index effaa0975b..c64e7ffa0f 100644 --- a/src/widgets/CapabilityText.tsx +++ b/src/widgets/CapabilityText.tsx @@ -21,7 +21,7 @@ import { import { EventType, MsgType } from "matrix-js-sdk/src/matrix"; import React from "react"; -import { _t, _td, type TranslatedString, type TranslationKey } from "../languageHandler"; +import { _t, _td, type TranslatedString } from "../languageHandler"; import { ElementWidgetCapabilities } from "../stores/widgets/ElementWidgetCapabilities"; import { MatrixClientPeg } from "../MatrixClientPeg"; import TextWithTooltip from "../components/views/elements/TextWithTooltip"; diff --git a/test/setup/setupLanguage.ts b/test/setup/setupLanguage.ts index 124ff7cbbd..848a4b2d22 100644 --- a/test/setup/setupLanguage.ts +++ b/test/setup/setupLanguage.ts @@ -8,10 +8,16 @@ Please see LICENSE files in the repository root for full details. import fetchMock from "fetch-mock-jest"; import { ModuleLoader } from "@element-hq/element-web-module-api"; +import { merge } from "lodash"; import * as languageHandler from "../../src/languageHandler"; -import en from "../../src/i18n/strings/en_EN.json"; -import de from "../../src/i18n/strings/de_DE.json"; +import enElementWeb from "../../src/i18n/strings/en_EN.json"; +import deElementWeb from "../../src/i18n/strings/de_DE.json"; +// Cheat and import relatively here as these aren't exported by the module (should they be?) +// eslint-disable-next-line no-restricted-imports +import enSharedComponents from "../../packages/shared-components/src/i18n/strings/en_EN.json"; +// eslint-disable-next-line no-restricted-imports +import deSharedComponents from "../../packages/shared-components/src/i18n/strings/de_DE.json"; import { ModuleApi } from "../../src/modules/Api"; const lv = { @@ -31,14 +37,21 @@ const lv = { // lv.json - mock version with few translations, used to test fallback translation export function setupLanguageMock() { + // Pull the translations from shared components too as they have + // the strings for things like `humanizeTime` which do appear in + // snapshots (needs 'merge' which does a deep-merge rather than just + // replacing top-level keys). + const enTranslations = merge(enElementWeb, enSharedComponents); + const deTranslations = merge(deElementWeb, deSharedComponents); + fetchMock .get("/i18n/languages.json", { en: "en_EN.json", de: "de_DE.json", lv: "lv.json", }) - .get("end:en_EN.json", en) - .get("end:de_DE.json", de) + .get("end:en_EN.json", enTranslations) + .get("end:de_DE.json", deTranslations) .get("end:lv.json", lv); } setupLanguageMock(); diff --git a/test/unit-tests/components/views/beta/BetaCard-test.tsx b/test/unit-tests/components/views/beta/BetaCard-test.tsx index 06ede990e6..47c9b29230 100644 --- a/test/unit-tests/components/views/beta/BetaCard-test.tsx +++ b/test/unit-tests/components/views/beta/BetaCard-test.tsx @@ -13,7 +13,6 @@ import { render, screen } from "jest-matrix-react"; import { shouldShowFeedback } from "../../../../../src/utils/Feedback"; import BetaCard from "../../../../../src/components/views/beta/BetaCard"; import SettingsStore from "../../../../../src/settings/SettingsStore"; -import { type TranslationKey } from "../../../../../src/languageHandler"; import { type FeatureSettingKey } from "../../../../../src/settings/Settings.tsx"; jest.mock("../../../../../src/utils/Feedback"); diff --git a/test/unit-tests/languageHandler-test.tsx b/test/unit-tests/languageHandler-test.tsx index de1a629608..d484696995 100644 --- a/test/unit-tests/languageHandler-test.tsx +++ b/test/unit-tests/languageHandler-test.tsx @@ -23,7 +23,6 @@ import { substitute, type TranslatedString, UserFriendlyError, - type TranslationKey, type IVariables, type Tags, getLanguagesFromBrowser, diff --git a/test/unit-tests/settings/controllers/ServerSupportUnstableFeatureController-test.ts b/test/unit-tests/settings/controllers/ServerSupportUnstableFeatureController-test.ts index cab82f8d32..1bd80e2535 100644 --- a/test/unit-tests/settings/controllers/ServerSupportUnstableFeatureController-test.ts +++ b/test/unit-tests/settings/controllers/ServerSupportUnstableFeatureController-test.ts @@ -14,7 +14,6 @@ import { type FeatureSettingKey, LabGroup, SETTINGS } from "../../../../src/sett import { stubClient } from "../../../test-utils"; import { WatchManager } from "../../../../src/settings/WatchManager"; import MatrixClientBackedController from "../../../../src/settings/controllers/MatrixClientBackedController"; -import { type TranslationKey } from "../../../../src/languageHandler"; describe("ServerSupportUnstableFeatureController", () => { const watchers = new WatchManager(); From 2f817f32ce90e73d46e95e7f745b9b42caec557e Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 7 Jan 2026 12:42:30 +0000 Subject: [PATCH 13/13] Fix shared components i18n check (#31672) * Remove extra encryption strings Found their way in during the i18n changes * Remove log level silent to try & work out why it only fails on CI * Try giving it its own prettierrc so the import is correct * Comment why it needs its own prettierrc & put log level silent back * Comment the right .prettierrc --- packages/shared-components/.prettierrc.js | 5 +++++ packages/shared-components/src/i18n/strings/en_EN.json | 4 ---- 2 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 packages/shared-components/.prettierrc.js diff --git a/packages/shared-components/.prettierrc.js b/packages/shared-components/.prettierrc.js new file mode 100644 index 0000000000..4954ff865e --- /dev/null +++ b/packages/shared-components/.prettierrc.js @@ -0,0 +1,5 @@ +// Even though this (at time of writing) is identical Element Web's +// .prettierrc.js, shared components needs its own because otherwise +// this refers to element web's copy of eslint-plugin-matrix-org which +// would require element-web's modules to be installed. +module.exports = require("eslint-plugin-matrix-org/.prettierrc.js"); diff --git a/packages/shared-components/src/i18n/strings/en_EN.json b/packages/shared-components/src/i18n/strings/en_EN.json index 78b9c88b3f..d5521dfcf8 100644 --- a/packages/shared-components/src/i18n/strings/en_EN.json +++ b/packages/shared-components/src/i18n/strings/en_EN.json @@ -10,10 +10,6 @@ "play": "Play", "search": "Search" }, - "encryption": { - "pinned_identity_changed": "%(displayName)s's (%(userId)s) identity was reset. Learn more", - "withdraw_verification_action": "Withdraw verification" - }, "left_panel": { "open_dial_pad": "Open dial pad" },