diff --git a/frontend/app/components/auth-panel/auth-panel.tsx b/frontend/app/components/auth-panel/auth-panel.tsx index b548afafda..f030de36c6 100644 --- a/frontend/app/components/auth-panel/auth-panel.tsx +++ b/frontend/app/components/auth-panel/auth-panel.tsx @@ -133,7 +133,7 @@ export class AuthPanel extends Component { href={`${window.location.origin}/web/comments.html${window.location.search}`} target="_blank" > - new page + ); diff --git a/frontend/app/components/auth/__anonymous-login-form/auth__anonymous-login-form.tsx b/frontend/app/components/auth/__anonymous-login-form/auth__anonymous-login-form.tsx index 1b6e6edd8c..51ec00b62c 100644 --- a/frontend/app/components/auth/__anonymous-login-form/auth__anonymous-login-form.tsx +++ b/frontend/app/components/auth/__anonymous-login-form/auth__anonymous-login-form.tsx @@ -26,8 +26,7 @@ export const messages = defineMessages({ }, symbolLimit: { id: 'anonymousLoginForm.symbol-limit', - defaultMessage: - 'Username must start from the letter and contain only latin letters, numbers, underscores, and spaces', + defaultMessage: 'Username must start with a letter and contain only latin letters, numbers, underscores, or spaces', }, userName: { id: 'anonymousLoginForm.user-name', diff --git a/frontend/app/locales/de.json b/frontend/app/locales/de.json index 37f18e2905..67b9b4b073 100644 --- a/frontend/app/locales/de.json +++ b/frontend/app/locales/de.json @@ -12,6 +12,7 @@ "authPanel.logged-as": "Du hast dich angemeldet als", "authPanel.login": "Anmelden:", "authPanel.logout": "Abmelden?", + "authPanel.new-page": "neue Seite", "authPanel.or-provider": "oder", "authPanel.other-provider": "Andere", "authPanel.read-only": "Nur-Lesen", diff --git a/frontend/app/locales/en.json b/frontend/app/locales/en.json index a140e9bf20..fcd6d89548 100644 --- a/frontend/app/locales/en.json +++ b/frontend/app/locales/en.json @@ -1,7 +1,7 @@ { "anonymousLoginForm.length-limit": "Username must be at least 3 characters long", "anonymousLoginForm.log-in": "Log in", - "anonymousLoginForm.symbol-limit": "Username must start from the letter and contain only latin letters, numbers, underscores, and spaces", + "anonymousLoginForm.symbol-limit": "Username must start with a letter and contain only latin letters, numbers, underscores, or spaces", "anonymousLoginForm.user-name": "Username", "authPanel.anonymous-provider": "Anonymous", "authPanel.disable-comments": "Disable comments", @@ -12,6 +12,7 @@ "authPanel.logged-as": "You logged in as", "authPanel.login": "Login:", "authPanel.logout": "Logout?", + "authPanel.new-page": "new page", "authPanel.or-provider": "or", "authPanel.other-provider": "Other", "authPanel.read-only": "Read-only", diff --git a/frontend/app/locales/es.json b/frontend/app/locales/es.json new file mode 100644 index 0000000000..fd9c4345b1 --- /dev/null +++ b/frontend/app/locales/es.json @@ -0,0 +1,169 @@ +{ + "anonymousLoginForm.length-limit": "El nombre de usuario debe ser de al menos 3 caracteres de largo", + "anonymousLoginForm.log-in": "Acceder", + "anonymousLoginForm.symbol-limit": "El nombre de usuario debe comenzar con una letra y contener solamente letras latinas, números, guión bajo o espacio", + "anonymousLoginForm.user-name": "Nombre de usuario", + "authPanel.anonymous-provider": "Anónimo", + "authPanel.disable-comments": "Deshabilitar comentarios", + "authPanel.disabled-cookies": "Deshabilita las cookies de terceros que bloquean el acceso o abre los comentarios en una", + "authPanel.enable-comments": "Habilitar comentarios", + "authPanel.enable-cookies": "Habilitar cookies para acceder y comentar", + "authPanel.hide-settings": "Ocultar opciones", + "authPanel.logged-as": "Accediste como", + "authPanel.login": "Acceder:", + "authPanel.logout": "¿Salir?", + "authPanel.new-page": "nueva página", + "authPanel.or-provider": "o", + "authPanel.other-provider": "Otro", + "authPanel.read-only": "Solo lectura", + "authPanel.request-to-delete-data": "Solicitar la eliminación de mis datos", + "authPanel.show-settings": "Mostrar opciones", + "blockingDuration.day": "Por un día", + "blockingDuration.month": "Por un mes", + "blockingDuration.permanently": "Permanentemente", + "blockingDuration.week": "Por una semana", + "comment.block": "Bloquear", + "comment.block-user": "¿Quieres bloquear a {userName} {duration}?", + "comment.blocked-user": "Bloqueado", + "comment.blocking-period": "Período de bloqueo", + "comment.cancel": "Cancelar", + "comment.controversy": "Controversia: {value}", + "comment.copied": "¡Copiado!", + "comment.copy": "Copiar", + "comment.delete": "Eliminar", + "comment.delete-message": "¿Quieres eliminar este comentario?", + "comment.deleted-comment": "Este comentario fue eliminado", + "comment.deleted-user": "Eliminado", + "comment.edit": "Editar", + "comment.expired-time": "El tiempo de edición ha expirado.", + "comment.go-to-parent": "Ir al comentario padre", + "comment.hide": "Ocultar", + "comment.hide-user-comment": "¿Quieres ocultar los comentarios de {userName}?", + "comment.pin": "Anclar", + "comment.pin-comment": "¿Quieres anclar este comentario?", + "comment.reply": "Responder", + "comment.time": "{day} a las {time}", + "comment.toggle-verification": "Alternar verificación", + "comment.unblock": "Desbloquear", + "comment.unblock-user": "¿Quieres desbloquear a este usuario?", + "comment.unpin": "Desanclar", + "comment.unpin-comment": "¿Quieres desanclar este comentario?", + "comment.unverified-user": "Usuario no verificado", + "comment.unverify-user": "¿Quieres quitar la verificación a {userName}?", + "comment.verified-user": "Usuario verificado", + "comment.verify-user": "¿Quieres verificar a {userName}?", + "comment.vote-error": "Error al votar: {voteErrorMessage}", + "commentForm.anonymous-uploading-disabled": "La subida de imágenes está deshabilitada para usuarios no autenticados. Deberías acceder antes de subir imágenes.", + "commentForm.exceeded-size": "{fileName} excede el tamaño máximo de {maxImageSize}", + "commentForm.input-placeholder": "Tu comentario aquí", + "commentForm.new-comment": "Nuevo comentario", + "commentForm.notice-about-styling": "El formato con Markdown está soportado", + "commentForm.preview": "Pre-visualizar", + "commentForm.reply": "Responder", + "commentForm.save": "Guardar", + "commentForm.send": "Enviar", + "commentForm.subscribe-by": "Suscribirse por", + "commentForm.subscribe-or": "o", + "commentForm.unexpected-error": "Algo salió mal. Por favor vuelve a intentar más tarde.", + "commentForm.upload-file-fail": "la subida de {fileName} falló con \"{errorMessage}\"", + "commentForm.uploading": "Subiendo...", + "commentForm.uploading-file": "subiendo {fileName}...", + "commentSort.sort-by": "Ordernar por", + "commentsSort.best": "Mejor", + "commentsSort.least-controversial": "Menos controversial", + "commentsSort.least-recently-updated": "Actualizado menos recientemente", + "commentsSort.most-controversial": "Más controversial", + "commentsSort.newest": "Más nuevo", + "commentsSort.oldest": "Más antiguo", + "commentsSort.recently-updated": "Actualizado más recientemente", + "commentsSort.worst": "Peor", + "emailLoginForm.back": "Volver", + "emailLoginForm.confirm": "Confirmar", + "emailLoginForm.email-address": "Dirección de correo electrónico", + "emailLoginForm.empty-token": "El campo de token no debe ser vacío", + "emailLoginForm.expired-token": "El token ha expirado", + "emailLoginForm.invalid-email": "La dirección de correo electrónica no es válida", + "emailLoginForm.loading": "Cargando...", + "emailLoginForm.send-verification": "Enviar verificación", + "emailLoginForm.token": "Token", + "emailLoginForm.user-not-found": "No se encontró el usuario", + "errors.0": "Algo salió mal. Por favor vuelve a intentar más tarde.", + "errors.1": "No se ha encontrado el comentario. Por favor refresca la página y vuelve a intentar.", + "errors.10": "Es muy tarde para editar el comentario.", + "errors.11": "El comentario ya tiene una respuesta. No es posible editarlo.", + "errors.12": "No se ha podido guardar el resultado del voto. Por favor vuelve a intentar más tarde.", + "errors.13": "No puedes votar tu propio comentario.", + "errors.14": "Ya has votado el comentario.", + "errors.15": "Demasiados votos para el comentario.", + "errors.16": "Ya se ha alcanzado el puntaje mínimo para el comentario.", + "errors.17": "Acción rechazada. Por favor vuelve a intentar más tarde.", + "errors.18": "No se ha encontrado el archivo solicitado.", + "errors.2": "No se ha podido deserializar la petición entrante.", + "errors.3": "No tienes permisos para esta operación.", + "errors.4": "Datos de comentario inválidos.", + "errors.5": "El comentario no se ha encontrado. Por favor refresca la página y vuelve a intentar.", + "errors.6": "El sitio no se ha encontrado. Por favor refresca la página y vuelve a intentar.", + "errors.7": "El usuario ha sido bloqueado.", + "errors.8": "El usuario ha sido bloqueado.", + "errors.9": "No se ha podido cambiar el comentario. Por favor vuelve a intentar más tarde.", + "errors.failed-fetch": "No se ha podido obtener. Por favor revisa tu conexión a internet o vuelve a intentar más tarde", + "errors.forbidden": "Prohibido.", + "errors.not-authorized": "No autorizado.", + "errors.to-many-request": "Has llegado al límite de peticiones.", + "errors.unexpected-error": "Algo salió mal.", + "root.pinned-comments": "Comentarios anclados", + "root.powered-by": "Powered by Remark42", + "root.show-more": "Mostrar más", + "settings.block": "bloquear", + "settings.block-time": "hasta el {day} a las {time}", + "settings.block-user": "¿Quieres bloquear a {userName}?", + "settings.blocked-users-header": "Usuarios bloqueados:", + "settings.blocked-users-title": "Usuarios bloqueados", + "settings.hidden-user-header": "Usuarios ocultos:", + "settings.hidden-users-title": "Usuarios ocultos", + "settings.hide": "ocultar", + "settings.no-blocked-users": "No hay usuarios bloqueados.", + "settings.no-hidden-users": "No hay usuarios ocultos.", + "settings.permanently": "permanentemente", + "settings.show": "mostrar", + "settings.unblock": "desbloquear", + "settings.unblock-user": "¿Quieres desbloquear a {userName}?", + "settings.unknown": "desconocido", + "subscribeByEmail.back": "Volver", + "subscribeByEmail.close": "Cerrar", + "subscribeByEmail.email": "Correo electrónico", + "subscribeByEmail.expired-token": "Token expirado", + "subscribeByEmail.have-been-subscribed": "Has sido suscripto a actualizaciones por correo electrónico", + "subscribeByEmail.have-been-unsubscribed": "Has sido de-suscripto a actualizaciones por correo electrónico", + "subscribeByEmail.only-registered-users": "Disponible solo para usuarios registrados", + "subscribeByEmail.submit": "Enviar", + "subscribeByEmail.subscribe": "Suscribir", + "subscribeByEmail.subscribe-by-email": "Suscribir por correo electrónico", + "subscribeByEmail.subscribe-to-replies": "Suscribir a respuestas", + "subscribeByEmail.subscribed": "Estás suscripto a actualizaciones por correo electrónico", + "subscribeByEmail.token": "Token", + "subscribeByEmail.unsubscribe": "De-suscribir", + "subscribeByRSS.button-title": "Suscribir por RSS", + "subscribeByRSS.replies": "Respuestas", + "subscribeByRSS.site": "Sitio", + "subscribeByRSS.thread": "Hilo", + "subscribeByRSS.title": "RSS", + "toolbar.attach-image": "Adjunta la imágen, arrastra y suelta, o pega desde el portapapeles", + "toolbar.bold": "Agrega texto en negrita ", + "toolbar.code": "Inserta un código", + "toolbar.header": "Agrega un título", + "toolbar.italic": "Agrega texto en cursiva ", + "toolbar.link": "Agrega un link ", + "toolbar.ordered-list": "Agrega una lista numerada", + "toolbar.quote": "Inserta una cita", + "toolbar.unordered-list": "Agrega una lista sin numerar", + "user-info.last-comments": "Últimos comentarios de {userName}", + "user-info.unexpected-error": "Algo salió mal", + "vote.anonymous": "Los usuarios anónimos no puede votar", + "vote.deleted": "No se puede votar un comentario eliminado", + "vote.guest": "Accede para votar", + "vote.only-positive": "El puntaje debe ser positivo", + "vote.only-post-page": "Solo se puede votar en la página de la publicación", + "vote.own-comment": "No puedes votar tu propio comentario", + "vote.readonly": "No se puede votar en tópicos de solo lectura" +} diff --git a/frontend/app/locales/fi.json b/frontend/app/locales/fi.json index eebf77bda5..60ccc1dc75 100644 --- a/frontend/app/locales/fi.json +++ b/frontend/app/locales/fi.json @@ -12,6 +12,7 @@ "authPanel.logged-as": "Olet kirjautunut sisään nimellä", "authPanel.login": "Kirjaudu sisään:", "authPanel.logout": "Kirjaudu ulos?", + "authPanel.new-page": "uusi sivu", "authPanel.or-provider": "tai", "authPanel.other-provider": "Muu", "authPanel.read-only": "Vain luku", diff --git a/frontend/app/locales/ru.json b/frontend/app/locales/ru.json index c0e55e0d24..c2aeba6715 100644 --- a/frontend/app/locales/ru.json +++ b/frontend/app/locales/ru.json @@ -12,6 +12,7 @@ "authPanel.logged-as": "Вы вошли как", "authPanel.login": "Вход:", "authPanel.logout": "Выйти?", + "authPanel.new-page": "новая страница", "authPanel.or-provider": "или", "authPanel.other-provider": "Другой", "authPanel.read-only": "Только для чтение", diff --git a/frontend/app/utils/loadLocale.ts b/frontend/app/utils/loadLocale.ts index 6c0a6dd2b5..e81fdf8d2e 100644 --- a/frontend/app/utils/loadLocale.ts +++ b/frontend/app/utils/loadLocale.ts @@ -18,6 +18,11 @@ export async function loadLocale(locale: string): Promise .then(res => res.default) .catch(() => enMessages); } + if (locale === 'es') { + return import(/* webpackChunkName: "es" */ '../locales/es.json') + .then(res => res.default) + .catch(() => enMessages); + } return enMessages; } diff --git a/frontend/tasks/supportedLocales.json b/frontend/tasks/supportedLocales.json index e6ef2bd86c..8b10181c1a 100644 --- a/frontend/tasks/supportedLocales.json +++ b/frontend/tasks/supportedLocales.json @@ -1 +1 @@ -["en", "ru", "de", "fi"] +["en", "ru", "de", "fi", "es"]