From bacbfc1154b488b32787e628f639f5625718a37c Mon Sep 17 00:00:00 2001 From: tarteka Date: Wed, 15 May 2019 09:16:49 +0000 Subject: Update es.json --- src/i18n/es.json | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/i18n') diff --git a/src/i18n/es.json b/src/i18n/es.json index 2e38f859..800dc0b6 100644 --- a/src/i18n/es.json +++ b/src/i18n/es.json @@ -94,6 +94,11 @@ "direct_warning": "Esta publicación solo será visible para los usuarios mencionados.", "direct_warning_to_first_only": "Esta publicación solo será visible para los usuarios mencionados al comienzo del mensaje.", "posting": "Publicando", + "scope_notice": { + "public": "Esta publicación será visible para todo el mundo", + "private": "Esta publicación solo será visible para tus seguidores.", + "unlisted": "Esta publicación no será visible en la Línea Temporal Pública ni en Toda La Red Conocida" + }, "scope": { "direct": "Directo - Solo para los usuarios mencionados.", "private": "Solo-Seguidores - Solo tus seguidores leeran la publicación", -- cgit v1.2.3-70-g09d2 From f665ac83e7911560f41b2b31ec8e7980cc6efaaf Mon Sep 17 00:00:00 2001 From: Hakaba Hitoyo Date: Mon, 15 Jul 2019 19:18:20 +0000 Subject: i18n/Update easy Japanese trasnlation --- src/i18n/ja.json | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) (limited to 'src/i18n') diff --git a/src/i18n/ja.json b/src/i18n/ja.json index 559bb4c9..c77f28a6 100644 --- a/src/i18n/ja.json +++ b/src/i18n/ja.json @@ -27,7 +27,11 @@ "optional": "かかなくてもよい", "show_more": "つづきをみる", "show_less": "たたむ", - "cancel": "キャンセル" + "cancel": "キャンセル", + "disable": "なし", + "enable": "あり", + "confirm": "たしかめる", + "verify": "たしかめる" }, "image_cropper": { "crop_picture": "がぞうをきりぬく", @@ -48,7 +52,15 @@ "placeholder": "れい: lain", "register": "はじめる", "username": "ユーザーめい", - "hint": "はなしあいにくわわるには、ログインしてください" + "hint": "はなしあいにくわわるには、ログインしてください", + "authentication_code": "にんしょうコード", + "enter_recovery_code": "リカバリーコードをいれてください", + "enter_two_factor_code": "2-ファクターコードをいれてください", + "recovery_code": "リカバリーコード", + "heading" : { + "totp" : "2-ファクターにんしょう", + "recovery" : "2-ファクターリカバリー" + } }, "media_modal": { "previous": "まえ", @@ -79,6 +91,20 @@ "repeated_you": "あなたのステータスがリピートされました", "no_more_notifications": "つうちはありません" }, + "polls": { + "add_poll": "いれふだをはじめる", + "add_option": "オプションをふやす", + "option": "オプション", + "votes": "いれふだ", + "vote": "ふだをいれる", + "type": "いれふだのかた", + "single_choice": "ひとつえらぶ", + "multiple_choices": "いくつでもえらべる", + "expiry": "いれふだのながさ", + "expires_in": "いれふだは {0} で、おわります", + "expired": "いれふだは {0} まえに、おわりました", + "not_enough_options": "ユニークなオプションが、たりません" + }, "interactions": { "favs_repeats": "リピートとおきにいり", "follows": "あたらしいフォロー", @@ -139,6 +165,29 @@ }, "settings": { "app_name": "アプリのなまえ", + "security": "セキュリティ", + "enter_current_password_to_confirm": "あなたのアイデンティティをたしかめるため、あなたのいまのパスワードをかいてください", + "mfa": { + "otp" : "OTP", + "setup_otp" : "OTPをつくる", + "wait_pre_setup_otp" : "OTPをよういしています", + "confirm_and_enable" : "OTPをたしかめて、ゆうこうにする", + "title": "2-ファクターにんしょう", + "generate_new_recovery_codes" : "あたらしいリカバリーコードをつくる", + "warning_of_generate_new_codes" : "あたらしいリカバリーコードをつくったら、ふるいコードはつかえなくなります。", + "recovery_codes" : "リカバリーコード。", + "waiting_a_recovery_codes": "バックアップコードをうけとっています...", + "recovery_codes_warning" : "コードをかきうつすか、ひとにみられないところにセーブしてください。そうでなければ、あなたはこのコードをふたたびみることはできません。もしあなたが、2FAアプリのアクセスをうしなって、なおかつ、リカバリーコードもおもいだせないならば、あなたはあなたのアカウントから、しめだされます。", + "authentication_methods" : "にんしょうメソッド", + "scan": { + "title": "スキャン", + "desc": "あなたの2-ファクターアプリをつかって、このQRコードをスキャンするか、テキストキーをうちこんでください:", + "secret_code": "キー" + }, + "verify": { + "desc": "2-ファクターにんしょうをつかうには、あなたの2-ファクターアプリのコードをいれてください:" + } + }, "attachmentRadius": "ファイル", "attachments": "ファイル", "autoload": "したにスクロールしたとき、じどうてきによみこむ。", -- cgit v1.2.3-70-g09d2 From 54b45ec4a30a8644b59a86cc7e614ab76b6b8ea4 Mon Sep 17 00:00:00 2001 From: Hakaba Hitoyo Date: Mon, 15 Jul 2019 19:18:40 +0000 Subject: i18n/Update pedantic Japanese translation --- src/i18n/ja_pedantic.json | 53 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) (limited to 'src/i18n') diff --git a/src/i18n/ja_pedantic.json b/src/i18n/ja_pedantic.json index 345e1f1c..992a2fa6 100644 --- a/src/i18n/ja_pedantic.json +++ b/src/i18n/ja_pedantic.json @@ -27,7 +27,11 @@ "optional": "省略可", "show_more": "もっと見る", "show_less": "たたむ", - "cancel": "キャンセル" + "cancel": "キャンセル", + "disable": "無効", + "enable": "有効", + "confirm": "確認", + "verify": "検査" }, "image_cropper": { "crop_picture": "画像を切り抜く", @@ -48,7 +52,15 @@ "placeholder": "例: lain", "register": "登録", "username": "ユーザー名", - "hint": "会話に加わるには、ログインしてください" + "hint": "会話に加わるには、ログインしてください", + "authentication_code": "認証コード", + "enter_recovery_code": "リカバリーコードを入力してください", + "enter_two_factor_code": "2段階認証コードを入力してください", + "recovery_code": "リカバリーコード", + "heading" : { + "totp" : "2段階認証", + "recovery" : "2段階リカバリー" + } }, "media_modal": { "previous": "前", @@ -79,6 +91,20 @@ "repeated_you": "あなたのステータスがリピートされました", "no_more_notifications": "通知はありません" }, + "polls": { + "add_poll": "投票を追加", + "add_option": "選択肢を追加", + "option": "選択肢", + "votes": "票", + "vote": "投票", + "type": "投票の形式", + "single_choice": "択一式", + "multiple_choices": "複数選択式", + "expiry": "投票期間", + "expires_in": "投票は {0} で終了します", + "expired": "投票は {0} 前に終了しました", + "not_enough_options": "相異なる選択肢が不足しています" + }, "interactions": { "favs_repeats": "リピートとお気に入り", "follows": "新しいフォロワー", @@ -139,6 +165,29 @@ }, "settings": { "app_name": "アプリの名称", + "security": "セキュリティ", + "enter_current_password_to_confirm": "あなたのアイデンティティを証明するため、現在のパスワードを入力してください", + "mfa": { + "otp" : "OTP", + "setup_otp" : "OTPのセットアップ", + "wait_pre_setup_otp" : "OTPのプリセット", + "confirm_and_enable" : "OTPの確認と有効化", + "title": "2段階認証", + "generate_new_recovery_codes" : "新しいリカバリーコードを生成", + "warning_of_generate_new_codes" : "新しいリカバリーコードを生成すると、古いコードは使用できなくなります。", + "recovery_codes" : "リカバリーコード。", + "waiting_a_recovery_codes": "バックアップコードを受信しています...", + "recovery_codes_warning" : "コードを紙に書くか、安全な場所に保存してください。そうでなければ、あなたはコードを再び見ることはできません。もし2段階認証アプリのアクセスを喪失し、なおかつ、リカバリーコードもないならば、あなたは自分のアカウントから閉め出されます。", + "authentication_methods" : "認証方法", + "scan": { + "title": "スキャン", + "desc": "あなたの2段階認証アプリを使って、このQRコードをスキャンするか、テキストキーを入力してください:", + "secret_code": "キー" + }, + "verify": { + "desc": "2段階認証を有効にするには、あなたの2段階認証アプリのコードを入力してください:" + } + }, "attachmentRadius": "ファイル", "attachments": "ファイル", "autoload": "下にスクロールしたとき、自動的に読み込む。", -- cgit v1.2.3-70-g09d2 From 51fc0a5c52630ef6907e27659d15d7afed0aa533 Mon Sep 17 00:00:00 2001 From: tarteka Date: Tue, 23 Jul 2019 15:16:03 +0000 Subject: Update es.json --- src/i18n/es.json | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 115 insertions(+), 3 deletions(-) (limited to 'src/i18n') diff --git a/src/i18n/es.json b/src/i18n/es.json index 800dc0b6..bf87937a 100644 --- a/src/i18n/es.json +++ b/src/i18n/es.json @@ -27,7 +27,11 @@ "optional": "opcional", "show_more": "Mostrar más", "show_less": "Mostrar menos", - "cancel": "Cancelar" + "cancel": "Cancelar", + "disable": "Inhabilitar", + "enable": "Habilitar", + "confirm": "Confirmar", + "verify": "Verificar" }, "image_cropper": { "crop_picture": "Recortar la foto", @@ -48,7 +52,15 @@ "placeholder": "p.ej. lain", "register": "Registrar", "username": "Usuario", - "hint": "Inicia sesión para unirte a la discusión" + "hint": "Inicia sesión para unirte a la discusión", + "authentication_code": "Código de autentificación", + "enter_recovery_code": "Inserta el código de recuperación", + "enter_two_factor_code": "Inserta el código de doble factor", + "recovery_code": "Código de recuperación", + "heading" : { + "totp" : "Autentificación de doble factor", + "recovery" : "Recuperación de doble factor" + } }, "media_modal": { "previous": "Anterior", @@ -60,11 +72,13 @@ "chat": "Chat Local", "friend_requests": "Solicitudes de amistad", "mentions": "Menciones", + "interactions": "Interacciones", "dms": "Mensajes Directo", "public_tl": "Línea Temporal Pública", "timeline": "Línea Temporal", "twkn": "Toda La Red Conocida", "user_search": "Búsqueda de Usuarios", + "search": "Buscar", "who_to_follow": "A quién seguir", "preferences": "Preferencias" }, @@ -78,6 +92,25 @@ "repeated_you": "repite tu estado", "no_more_notifications": "No hay más notificaciones" }, + "polls": { + "add_poll": "Añadir encuesta", + "add_option": "Añadir opción", + "option": "Opción", + "votes": "votos", + "vote": "Votar", + "type": "Tipo de encuesta", + "single_choice": "Elección única", + "multiple_choices": "Múltiples elecciones", + "expiry": "Tiempo de vida de la encuesta", + "expires_in": "La encuensta termina en {0}", + "expired": "La encuesta terminó hace {0}", + "not_enough_options": "Muy pocas opciones únicas en la encuesta" + }, + "interactions": { + "favs_repeats": "Favoritos y Repetidos", + "follows": "Nuevos seguidores", + "load_older": "Cargar interacciones antiguas" + }, "post_status": { "new_status": "Publicar un nuevo estado", "account_not_locked_warning": "Tu cuenta no está {0}. Cualquiera puede seguirte y leer las entradas para Solo-Seguidores.", @@ -91,7 +124,7 @@ }, "content_warning": "Tema (opcional)", "default": "Acabo de aterrizar en L.A.", - "direct_warning": "Esta publicación solo será visible para los usuarios mencionados.", + "direct_warning_to_all": "Esta publicación será visible para todos los usarios mencionados.", "direct_warning_to_first_only": "Esta publicación solo será visible para los usuarios mencionados al comienzo del mensaje.", "posting": "Publicando", "scope_notice": { @@ -132,6 +165,29 @@ }, "settings": { "app_name": "Nombre de la aplicación", + "security": "Seguridad", + "enter_current_password_to_confirm": "Introduce la contraseña actual para confirmar tu identidad", + "mfa": { + "otp" : "OTP", + "setup_otp" : "Configurar OTP", + "wait_pre_setup_otp" : "preconfiguración OTP", + "confirm_and_enable" : "Confirmar y habilitar OTP", + "title": "Autentificación de Doble Factor", + "generate_new_recovery_codes" : "Generar nuevos códigos de recuperación", + "warning_of_generate_new_codes" : "Cuando generas nuevos códigos de recuperación, los antiguos dejarán de funcionar.", + "recovery_codes" : "Códigos de recuperación.", + "waiting_a_recovery_codes": "Recibiendo códigos de respaldo", + "recovery_codes_warning" : "Anote los códigos o guárdelos en un lugar seguro, de lo contrario no los volverá a ver. Si pierde el acceso a su aplicación 2FA y los códigos de recuperación, su cuenta quedará bloqueada.", + "authentication_methods" : "Métodos de autentificación", + "scan": { + "title": "Escanear", + "desc": "Usando su aplicación de doble factor, escanee este código QR o ingrese la clave de texto:", + "secret_code": "Clave" + }, + "verify": { + "desc": "Para habilitar la autenticación de doble factor, ingrese el código de su aplicación 2FA:" + } + }, "attachmentRadius": "Adjuntos", "attachments": "Adjuntos", "autoload": "Activar carga automática al llegar al final de la página", @@ -238,6 +294,7 @@ "reply_visibility_all": "Mostrar todas las réplicas", "reply_visibility_following": "Solo mostrar réplicas para mí o usuarios a los que sigo", "reply_visibility_self": "Solo mostrar réplicas para mí", + "autohide_floating_post_button": "Ocultar automáticamente el botón 'Nueva Publicación' (móvil)", "saving_err": "Error al guardar los ajustes", "saving_ok": "Ajustes guardados", "search_user_to_block": "Buscar usuarios a bloquear", @@ -270,6 +327,13 @@ "true": "sí" }, "notifications": "Notificaciones", + "notification_setting": "Recibir notificaciones de:", + "notification_setting_follows": "Usuarios que sigues", + "notification_setting_non_follows": "Usuarios que no sigues", + "notification_setting_followers": "Usuarios que te siguen", + "notification_setting_non_followers": "Usuarios que no te siguen", + "notification_mutes": "Para dejar de recibir notificaciones de un usuario específico, siléncialo.", + "notification_blocks": "El bloqueo de un usuario detiene todas las notificaciones y también las cancela.", "enable_web_push_notifications": "Habilitar las notificiaciones en el navegador", "style": { "switcher": { @@ -386,6 +450,40 @@ "frontend_version": "Versión del Frontend" } }, + "time": { + "day": "{0} día", + "days": "{0} días", + "day_short": "{0}d", + "days_short": "{0}d", + "hour": "{0} hora", + "hours": "{0} horas", + "hour_short": "{0}h", + "hours_short": "{0}h", + "in_future": "en {0}", + "in_past": "hace {0}", + "minute": "{0} minuto", + "minutes": "{0} minutos", + "minute_short": "{0}min", + "minutes_short": "{0}min", + "month": "{0} mes", + "months": "{0} meses", + "month_short": "{0}m", + "months_short": "{0}m", + "now": "justo ahora", + "now_short": "ahora", + "second": "{0} segundo", + "seconds": "{0} segundos", + "second_short": "{0}s", + "seconds_short": "{0}s", + "week": "{0} semana", + "weeks": "{0} semana", + "week_short": "{0}sem", + "weeks_short": "{0}sem", + "year": "{0} año", + "years": "{0} años", + "year_short": "{0}a", + "years_short": "{0}a" + }, "timeline": { "collapse": "Colapsar", "conversation": "Conversación", @@ -401,6 +499,11 @@ "status": { "favorites": "Favoritos", "repeats": "Repetidos", + "delete": "Eliminar publicación", + "pin": "Fijar en tu perfil", + "unpin": "Desclavar de tu perfil", + "pinned": "Fijado", + "delete_confirm": "¿Realmente quieres borrar la publicación?", "reply_to": "Responder a", "replies_list": "Respuestas:" }, @@ -427,6 +530,8 @@ "remote_follow": "Seguir", "report": "Reportar", "statuses": "Estados", + "subscribe": "Suscribirse", + "unsubscribe": "Desuscribirse", "unblock": "Desbloquear", "unblock_progress": "Desbloqueando...", "block_progress": "Bloqueando...", @@ -491,5 +596,12 @@ "GiB": "GiB", "TiB": "TiB" } + }, + "search": { + "people": "Personas", + "hashtags": "Hashtags", + "person_talking": "{count} personas hablando", + "people_talking": "{count} gente hablando", + "no_results": "Sin resultados" } } \ No newline at end of file -- cgit v1.2.3-70-g09d2 From fa6210872f7f22c4c8ce1a1603426ebf03bf2050 Mon Sep 17 00:00:00 2001 From: absturztaube Date: Wed, 24 Jul 2019 19:35:52 +0000 Subject: Feature/add sticker picker Squash to avoid storing commits with stickers in it to avoid possible copyright problems and excess storage space. --hj --- src/boot/after_store.js | 32 +++++++++++ .../post_status_form/post_status_form.js | 21 +++++++- .../post_status_form/post_status_form.vue | 24 ++++++++- src/components/sticker_picker/sticker_picker.js | 52 ++++++++++++++++++ src/components/sticker_picker/sticker_picker.vue | 62 ++++++++++++++++++++++ src/components/tab_switcher/tab_switcher.js | 14 ++++- src/components/tab_switcher/tab_switcher.scss | 6 +++ src/i18n/en.json | 3 ++ 8 files changed, 210 insertions(+), 4 deletions(-) create mode 100644 src/components/sticker_picker/sticker_picker.js create mode 100644 src/components/sticker_picker/sticker_picker.vue (limited to 'src/i18n') diff --git a/src/boot/after_store.js b/src/boot/after_store.js index 3fcbc246..3799359f 100644 --- a/src/boot/after_store.js +++ b/src/boot/after_store.js @@ -148,6 +148,37 @@ const getInstancePanel = async ({ store }) => { } } +const getStickers = async ({ store }) => { + try { + const res = await window.fetch('/static/stickers.json') + if (res.ok) { + const values = await res.json() + const stickers = (await Promise.all( + Object.entries(values).map(async ([name, path]) => { + const resPack = await window.fetch(path + 'pack.json') + var meta = {} + if (resPack.ok) { + meta = await resPack.json() + } + return { + pack: name, + path, + meta + } + }) + )).sort((a, b) => { + return a.meta.title.localeCompare(b.meta.title) + }) + store.dispatch('setInstanceOption', { name: 'stickers', value: stickers }) + } else { + throw (res) + } + } catch (e) { + console.warn("Can't load stickers") + console.warn(e) + } +} + const getStaticEmoji = async ({ store }) => { try { const res = await window.fetch('/static/emoji.json') @@ -286,6 +317,7 @@ const afterStoreSetup = async ({ store, i18n }) => { setConfig({ store }), getTOS({ store }), getInstancePanel({ store }), + getStickers({ store }), getStaticEmoji({ store }), getCustomEmoji({ store }), getNodeInfo({ store }) diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js index 36d0d74f..40bbf6d4 100644 --- a/src/components/post_status_form/post_status_form.js +++ b/src/components/post_status_form/post_status_form.js @@ -3,6 +3,7 @@ import MediaUpload from '../media_upload/media_upload.vue' import ScopeSelector from '../scope_selector/scope_selector.vue' import EmojiInput from '../emoji-input/emoji-input.vue' import PollForm from '../poll/poll_form.vue' +import StickerPicker from '../sticker_picker/sticker_picker.vue' import fileTypeService from '../../services/file_type/file_type.service.js' import { reject, map, uniqBy } from 'lodash' import suggestor from '../emoji-input/suggestor.js' @@ -34,6 +35,7 @@ const PostStatusForm = { MediaUpload, EmojiInput, PollForm, + StickerPicker, ScopeSelector }, mounted () { @@ -82,7 +84,8 @@ const PostStatusForm = { contentType }, caret: 0, - pollFormVisible: false + pollFormVisible: false, + stickerPickerVisible: false } }, computed: { @@ -158,6 +161,12 @@ const PostStatusForm = { safeDMEnabled () { return this.$store.state.instance.safeDM }, + stickersAvailable () { + if (this.$store.state.instance.stickers) { + return this.$store.state.instance.stickers.length > 0 + } + return 0 + }, pollsAvailable () { return this.$store.state.instance.pollsAvailable && this.$store.state.instance.pollLimits.max_options >= 2 @@ -213,6 +222,7 @@ const PostStatusForm = { poll: {} } this.pollFormVisible = false + this.stickerPickerVisible = false this.$refs.mediaUpload.clearFile() this.clearPollForm() this.$emit('posted') @@ -229,6 +239,7 @@ const PostStatusForm = { addMediaFile (fileInfo) { this.newStatus.files.push(fileInfo) this.enableSubmit() + this.stickerPickerVisible = false }, removeMediaFile (fileInfo) { let index = this.newStatus.files.indexOf(fileInfo) @@ -288,6 +299,14 @@ const PostStatusForm = { changeVis (visibility) { this.newStatus.visibility = visibility }, + toggleStickerPicker () { + this.stickerPickerVisible = !this.stickerPickerVisible + }, + clearStickerPicker () { + if (this.$refs.stickerPicker) { + this.$refs.stickerPicker.clear() + } + }, togglePollForm () { this.pollFormVisible = !this.pollFormVisible }, diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue index 1f389eda..d29d47e4 100644 --- a/src/components/post_status_form/post_status_form.vue +++ b/src/components/post_status_form/post_status_form.vue @@ -157,6 +157,17 @@ @uploaded="addMediaFile" @upload-failed="uploadFailed" /> +
+ +
- + + ) + } return (