diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c4eb1260f792b8a30bda47f2315fd70dcfac99e..e11fddabe1b566bf58bd0726843f65e24cb5326c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,20 @@ ChangeLog ========= -12.22.0 (2020/02/23) +12.23.0 (2020/03/22) +------------------- + +### ✨Improvements +* 削除ã—ã¦ç·¨é›†ã§ãるよã†ã« +* 基底テーマ分離 +* 端末ãŒãƒ€ãƒ¼ã‚¯ãƒ¢ãƒ¼ãƒ‰ã‹å¦ã‹ã§ãƒ†ãƒ¼ãƒžã‚’切り替ãˆã‚‰ã‚Œã‚‹ã‚ˆã†ã« + +### ðŸ›Fixes +* ユーザーåã®ã‚µã‚¸ã‚§ã‚¹ãƒˆã‚’アクティブã§ã‚ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼é †ã«è¡¨ç¤ºã™ã‚‹ã®ãŒã†ã¾ãã„ã£ã¦ã„ãªã„ã®ã‚’ä¿®æ£ +* 招待コードãŒç™ºè¡Œã§ããªã„å•é¡Œã‚’ä¿®æ£ +* CIãŒé€šã‚‰ãªã„å•é¡Œã‚’ä¿®æ£ + +12.22.0 (2020/03/21) ------------------- ### ✨Improvements diff --git a/locales/de-DE.yml b/locales/de-DE.yml index a50236fbb76f9e94e2ab2ec7cfa3b8127a10e1d6..3813a6522c37b3c33c85ec4247a6798ccd90eace 100644 --- a/locales/de-DE.yml +++ b/locales/de-DE.yml @@ -83,7 +83,6 @@ add: "Hinzufügen" reaction: "Reaktionen" reactionSettingDescription: "Weisen Sie Ihre lieblings reaktionen zu, die Sie in den Reaktionenswähler stecken möchten." rememberNoteVisibility: "Notizsichtbarkeit merken" -renameFile: "Datei umbenennen" attachCancel: "Anhängen abbrechen" markAsSensitive: "Als sensitiv markieren" unmarkAsSensitive: "Markierung als sensitiv zurücknehmen" @@ -182,7 +181,6 @@ fromUrl: "Von einer URL" explore: "Erkunden" games: "Misskey Spiele" messageRead: "Gelesen" -recentUsedEmojis: "Kürzlich genutzte Emojis" noMoreHistory: "Kein weiterer Verlauf vorhanden" nUsersRead: "Von {n} gelesen" agreeTo: "Ich stimme {0} zu" @@ -201,8 +199,9 @@ darkThemes: "Dunkle Farbthemen" drive: "Drive" selectFile: "Datei auswählen" selectFiles: "Dateien auswählen" -renameFolder: "Ordner umbenennen" +renameFile: "Datei umbenennen" createFolder: "Ordner erstellen" +renameFolder: "Ordner umbenennen" deleteFolder: "Ordner löschen" addFile: "Datei hinzufügen" emptyDrive: "Drive ist leer" @@ -290,7 +289,6 @@ noteOf: "Notiz von {user}" inviteToGroup: "Zu Gruppe einladen" maxNoteTextLength: "Maximale Länge von Notizen" useOsNativeEmojis: "Eingebaute Emojis des Betriebssystems benutzen" -noGroups: "Keine Gruppen vorhanden" joinOrCreateGroup: "Lass dich zu einer Gruppe einladen oder erstelle deine eigene." noHistory: "Kein Verlauf" disableAnimatedMfm: "MFM, die Animationen enthalten, deaktivieren" @@ -459,24 +457,16 @@ _timelines: global: "Global" _pages: content: "Inhalt" - more-details: "Mehr Informationen" title: "Titel" url: "Seiten-URL" summary: "Zusammenfassung" alignCenter: "Mittig ausrichten" - hide-title-when-pinned: "Seitentitel wenn angepinnt ausblenden" font: "Schriftart" fontSerif: "Serif" fontSansSerif: "Sans Serif" chooseBlock: "Block hinzufügen" selectType: "Wähle einen Typ" enterVariableName: "Gib einen Namen für deine Variable ein" - the-variable-name-is-already-used: "Der Variablenname wird bereits verwendet" - content-blocks: "Inhalt" - input-blocks: "Eingabe" - special-blocks: "Speziell" - post-from-post-form: "Diesen Inhalt senden" - posted-from-post-form: "Erfolgreich gesendet!" blocks: text: "Text" textarea: "Textfeld" diff --git a/locales/en-US.yml b/locales/en-US.yml index 946403ac7a1dc2095618e31696fe3cb6b5fadb7f..d5a751004b9b2a2ea81a29509fa04c421f31a9d9 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -35,6 +35,8 @@ unpin: "Unpin from profile" copyContent: "Copy contents" copyLink: "Copy link" delete: "Delete" +deleteAndEdit: "Delete and Edit" +deleteAndEditConfirm: "Are you sure you want to delete this note and edit it? You will lose all reactions, renotes and replies to it." addToList: "Add to list" sendMessage: "Send a message" copyUsername: "Copy username" @@ -86,7 +88,6 @@ add: "Add" reaction: "Reaction" reactionSettingDescription: "Assign your favorite reactions which want to pin in reaction picker." rememberNoteVisibility: "Remember note visibility settings" -renameFile: "Rename file" attachCancel: "Remove attachment" markAsSensitive: "Mark as NSFW" unmarkAsSensitive: "Undo NSFW" @@ -116,6 +117,7 @@ loginFailed: "Failed to sign in" showOnRemote: "View on remote instance" general: "General" wallpaper: "Wallpaper" +setWallpaper: "Set wallpaper" removeWallpaper: "Remove wallpaper" searchWith: "Search: {q}" youHaveNoLists: "You don't have any lists" @@ -204,10 +206,13 @@ messaging: "Messaging" upload: "Upload" fromDrive: "From Drive" fromUrl: "From URL" +uploadFromUrl: "Upload from a URL" +uploadFromUrlDescription: "URL of the file you want to upload" +uploadFromUrlRequested: "Upload requested" +uploadFromUrlMayTakeTime: "It may take some time until the upload is complete." explore: "Explore" games: "Misskey Games" messageRead: "Read" -recentUsedEmojis: "Recently used emojis" noMoreHistory: "There is no further history" startMessaging: "Start messaging" nUsersRead: "read by {n}" @@ -223,17 +228,30 @@ yearsOld: "{age} years old" registeredDate: "Joined on" location: "Location" theme: "Theme" +themeForLightMode: "Theme to use in Light Mode" +themeForDarkMode: "Theme to use in Dark Mode" +light: "Light" +dark: "Dark" lightThemes: "Light theme" darkThemes: "Dark theme" +syncDeviceDarkMode: "Sync Dark Mode with your device settings" drive: "Drive" +fileName: "Filename" selectFile: "Select a file" selectFiles: "Select files" -renameFolder: "Rename this folder" +renameFile: "Rename file" +folderName: "Folder name" createFolder: "Create a folder" +renameFolder: "Rename this folder" deleteFolder: "Delete this folder" addFile: "Add a file" emptyDrive: "The drive is empty" emptyFolder: "This folder is empty" +unableToDelete: "Unable to delete" +inputNewFileName: "Enter a new filename" +inputNewFolderName: "Enter a new folder name" +circularReferenceFolder: "The destination folder is a subfolder of the folder you wish to move." +hasChildFilesOrFolders: "Since this folder is not empty, it can not be deleted." copyUrl: "Copy URL" rename: "Rename" avatar: "Avatar" @@ -387,13 +405,14 @@ strongPassword: "Strong password" passwordMatched: "Matched" passwordNotMatched: "Doesn't match" signinWith: "Sign in with {x}" +signinFailed: "Unable to sign in. The username or password you entered is incorrect." tapSecurityKey: "Tap your security key" or: "Or" uiLanguage: "UI display language" groupInvited: "Invited to group" aboutX: "About {x}" useOsNativeEmojis: "Use the OS native Emojis" -noGroups: "No groups" +youHaveNoGroups: "You have no groups" joinOrCreateGroup: "Get invited to join the groups or you can create your own group." noHistory: "No history items" disableAnimatedMfm: "Disable MFM which has animations" @@ -445,6 +464,8 @@ none: "None" volume: "Volume" details: "Details" chooseEmoji: "Choose an emoji" +unableToProcess: "The operation could not be completed." +recentUsed: "Recently used" _sfx: note: "New note" noteMy: "My note" @@ -651,45 +672,39 @@ _pages: newPage: "Create a page" editPage: "Edit this page" readPage: "Source view activated" - page-created: "Successfully created a page!" - page-updated: "Successfully updated the page!" - name-already-exists: "Specified page URL already exists." - title-invalid-name: "The specified page URL is invalid." - text-invalid-name: "Please double-check if it is not empty." + created: "Successfully created a page!" + updated: "Successfully updated the page!" + deleted: "The page has been deleted" + nameAlreadyExists: "The specified page URL already exists" + invalidNameTitle: "The specified page URL is invalid" + invalidNameText: "Check whether that is not a blank" editThisPage: "Edit this page" viewSource: "View source" viewPage: "View your pages" like: "Like" unlike: "Undo like" - liked-pages: "Liked pages" - my-pages: "My pages" + my: "My pages" + liked: "Liked pages" inspector: "Inspector" content: "Page block" variables: "Variables" - variables-info: "You can make your page more interactive by using variables. If you write down <b>{ variable name }</b> in the text, you can embed the value of the variable. For example, source text <b>Hello { thing } world!</b> with <b> ai </b> as the value of variable 'thing' will result in the text being <b>Hello ai world!</b>." - variables-info2: "Because the evaluation of variables are performed from top to bottom, the variable cannot refer to another variables which appear on later lines. For example, when defining three variables <b>A</b>, <b>B</b> and <b>C</b>, variable <b>C</b> <i>can</i> refer to variables <b>A</b> and <b>B</b> in its expression. However, variable <b>A</b> <i>cannot</i> refer to variables <b>B</b> or <b>C</b> in its expression." - variables-info3: "To get an input from user, insert \"user input\" block with your desired variable name (that variable will be declared automatically). You could then use that variable to perform actions on your page." - variables-info4: "Functions make it easier to perform repetitive tasks. To create a function, declare a variable of \"Function\" type. A function can have a slot (argument/parameter) which can be used inside the function as a variable. Thanks to AiScript specification, you can also use function itself as a parameter for other functions. (Search \"callback functions\" on google for more details)." - more-details: "More information" title: "Title" url: "Page URL" summary: "Page summary" alignCenter: "Center elements" - hide-title-when-pinned: "Hide page title when pinned" + hideTitleWhenPinned: "Hide page title when pinned to profile" font: "Font" fontSerif: "Serif" fontSansSerif: "Sans serif" - set-eye-catching-image: "Set thumbnail image" - remove-eye-catching-image: "Remove thumbnail image" + eyeCatchingImageSet: "Set the eye-catching image" + eyeCatchingImageRemove: "Delete the eye-catching image" chooseBlock: "Add a block" selectType: "Select a type" enterVariableName: "Please enter a name for your variable" - the-variable-name-is-already-used: "This name is already being used by other variable" - content-blocks: "Content" - input-blocks: "Input" - special-blocks: "Special" - post-from-post-form: "Post this content" - posted-from-post-form: "Successfully posted!" + variableNameIsAlreadyUsed: "This name is already being used by other variable" + contentBlocks: "Content" + inputBlocks: "Input" + specialBlocks: "Special" blocks: text: "Text" textarea: "Text area" diff --git a/locales/es-ES.yml b/locales/es-ES.yml index c85cbd4c8a119444b118b4fa11166b8819272f12..7dcb73222be1fc03d5d416add343e4223224a911 100644 --- a/locales/es-ES.yml +++ b/locales/es-ES.yml @@ -35,6 +35,8 @@ unpin: "Desfijar" copyContent: "Copiar contenido" copyLink: "Copiar enlace" delete: "Borrar" +deleteAndEdit: "Borrar y editar" +deleteAndEditConfirm: "¿Quieres borrar y editar este nota? Las reacciones, renotes, respuestas y todo desaparecerán." addToList: "Agregar a lista" sendMessage: "Énviar mensaje" copyUsername: "Copiar nombre de usuario" @@ -86,7 +88,6 @@ add: "Añadir" reaction: "Reacción" reactionSettingDescription: "Asigne sus reacción favoritas que desean anclar en el selector de reacciones." rememberNoteVisibility: "Recordar visibilidad" -renameFile: "Renombrar archivo" attachCancel: "Quitar adjunto" markAsSensitive: "Marcar como sensible" unmarkAsSensitive: "Desmarcar como sensible" @@ -116,6 +117,7 @@ loginFailed: "Error al iniciar sesión." showOnRemote: "Ver en una instancia remota" general: "General" wallpaper: "Fondo de pantalla" +setWallpaper: "Establecer fondo de pantalla" removeWallpaper: "Quitar fondo de pantalla" searchWith: "Buscar: {q}" youHaveNoLists: "No tienes listas" @@ -204,10 +206,13 @@ messaging: "Chat" upload: "Subir" fromDrive: "Desde el drive" fromUrl: "Desde la URL" +uploadFromUrl: "Subir desde una URL" +uploadFromUrlDescription: "URL del fichero que quieres subir" +uploadFromUrlRequested: "Subida solicitada" +uploadFromUrlMayTakeTime: "Subir el fichero puede tardar un tiempo." explore: "Explorar" games: "Misskey Games" messageRead: "Ya leÃdo" -recentUsedEmojis: "Emojis usados recientemente" noMoreHistory: "El historial se ha acabado" startMessaging: "Iniciar chat" nUsersRead: "LeÃdo por {n} personas" @@ -223,17 +228,30 @@ yearsOld: "{age} años" registeredDate: "Fecha de registro" location: "Lugar" theme: "Tema" +themeForLightMode: "Tema para usar en Modo Linterna" +themeForDarkMode: "Tema para usar en Modo Oscuro" +light: "Linterna" +dark: "Oscuro" lightThemes: "Tema claro" darkThemes: "Tema oscuro" +syncDeviceDarkMode: "Sincronice el Modo Oscuro con la configuración de su dispositivo" drive: "Drive" +fileName: "Nombre de archivo" selectFile: "Elegir archivo" selectFiles: "Elegir archivos" -renameFolder: "Renombrar carpeta" +renameFile: "Renombrar archivo" +folderName: "Nombre de la carpeta" createFolder: "Crear carpeta" +renameFolder: "Renombrar carpeta" deleteFolder: "Borrar carpeta" addFile: "Añadir archivo" emptyDrive: "El drive está vacÃo" emptyFolder: "La carpeta está vacÃa" +unableToDelete: "No se puede borrar" +inputNewFileName: "Ingrese un nuevo nombre de archivo" +inputNewFolderName: "Ingrese un nuevo nombre de la carpeta" +circularReferenceFolder: "La carpeta de destino es una sub-carpeta de la carpeta que quieres mover." +hasChildFilesOrFolders: "No se puede borrar esta carpeta. No está vacÃa." copyUrl: "Copiar URL" rename: "Renombrar" avatar: "Avatar" @@ -387,13 +405,14 @@ strongPassword: "Muy buena contraseña" passwordMatched: "Correcto" passwordNotMatched: "Las contraseñas no son las mismas" signinWith: "Inicie sesión con {x}" +signinFailed: "Autenticación fallida. Asegúrate de haber usado el nombre de usuario y contraseña correctos." tapSecurityKey: "Toque la clave de seguridad" or: "O" uiLanguage: "Idioma de visualización de la interfaz" groupInvited: "Invitado al grupo" aboutX: "Acerca de {x}" useOsNativeEmojis: "Usa los emojis nativos de la plataforma" -noGroups: "Sin grupos" +youHaveNoGroups: "Sin grupos" joinOrCreateGroup: "Obtenga una invitación para unirse al grupos o puede crear su propio grupo." noHistory: "No hay datos en el historial" disableAnimatedMfm: "Deshabilitar MFM que tiene animaciones" @@ -445,6 +464,8 @@ none: "Ninguna" volume: "Volumen" details: "Detalles" chooseEmoji: "Elije un emoji" +unableToProcess: "La operación no se puede llevar a cabo" +recentUsed: "Usado recientemente" _sfx: note: "Notas" noteMy: "Nota (a mà mismo)" @@ -651,45 +672,39 @@ _pages: newPage: "Crear página" editPage: "Editar página" readPage: "Viendo la fuente" - page-created: "La página fue creada" - page-updated: "La página fue actualizada" - name-already-exists: "La URL de la página seleccionada ya existe" - title-invalid-name: "URL inválida" - text-invalid-name: "Verifique que no tenga espacios en blanco" + created: "La página fue creada" + updated: "La página fue actualizada" + deleted: "La página borrada" + nameAlreadyExists: "La URL de la página especificada ya existe" + invalidNameTitle: "URL inválida" + invalidNameText: "Verifique que no tenga espacios en blanco" editThisPage: "Editar esta página" viewSource: "Ver la fuente" viewPage: "Ver página" like: "Me gusta" unlike: "Quitar me gusta" - liked-pages: "Páginas que me gustan" - my-pages: "Mis páginas" + my: "Mis páginas" + liked: "Páginas que me gustan" inspector: "Inspector" content: "Bloque de página" variables: "Variables" - variables-info: "Puedes crear una página dinámica usando variables. Al escribir el <b>{ nombre de la variable }</b> dentro del texto, se puede embeber el valor de la variable allÃ. Por ejemplo, si en el texto <b>¡Hola { thing } mundo!</b> el valor de la variable (thing) es <b>ai</b>, el texto se vuelve <b>¡Hola ai mundo!</b>" - variables-info2: "La evaluación de las variables (el cálculo de los valores) se hace de arriba a abajo, por eso una variable no puede referenciar a otra que esté debajo. Por ejemplo, cuando se definen las variables <b>Aã€Bã€C</b>, <b>C</b> puede referenciar a <b>A</b> o <b>B</b>, pero <b>A</b> no puede referenciar a <b>B</b> ni a <b>C</b>." - variables-info3: "Para recibir la entrada del usuario, agregue un bloque \"entrada de usuario\" en la página, y configure el nombre de las variables que desea almacenar en el campo \"nombre de variables\" (Las variables se crearán automáticamente). Se ejecutaran acciones en base a la entrada del usuario de esas variables." - variables-info4: "Al usar funciones, se pueden agrupar el cálculo de valores de forma reutilizable. Para crear una función, se crea una variable de tipo \"función\". A la función de le puede configurar un slot (argumento), y el valor del slot está disponible como variable dentro de la función. También existen funciones que usan funciones como argumentos bajo el estandar AiScript (llamadas funciones de orden superior). Además de las funciones definidas previamente, se pueden definir funciones al momento en los slots de las funciones de orden superior." - more-details: "Más detalles" title: "TÃtulo" url: "URL de la página" summary: "Resumen de la página" alignCenter: "Centrar" - hide-title-when-pinned: "Ocultar el tÃtulo de la página al fijarse" + hideTitleWhenPinned: "Ocultar el tÃtulo de la página al fijarse" font: "Fuente" fontSerif: "Serif" fontSansSerif: "Sans Serif" - set-eye-catching-image: "Elegir imagen llamativa" - remove-eye-catching-image: "Borrar imagen llamativa" + eyeCatchingImageSet: "Elegir imagen llamativa" + eyeCatchingImageRemove: "Borrar imagen llamativa" chooseBlock: "Agregar bloque" selectType: "Elegir tipo" enterVariableName: "Ingrese el nombre de la variable" - the-variable-name-is-already-used: "El nombre de la variable ya está en uso" - content-blocks: "Contenido" - input-blocks: "Entrada" - special-blocks: "Especial" - post-from-post-form: "Postear este contenido" - posted-from-post-form: "Posteado" + variableNameIsAlreadyUsed: "El nombre de la variable ya está en uso" + contentBlocks: "Contenido" + inputBlocks: "Entrada" + specialBlocks: "Especial" blocks: text: "Texto" textarea: "Ãrea de texto" diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml index b0c6115b8d0fb27be5517f3f764029c24a5cd045..b527cbd602e77fc3e3c03ef62dbb6d1c09a65a8c 100644 --- a/locales/fr-FR.yml +++ b/locales/fr-FR.yml @@ -35,6 +35,8 @@ unpin: "Désépingler" copyContent: "Copier le contenu" copyLink: "Copier le lien" delete: "Supprimer" +deleteAndEdit: "Supprimer et réécrire" +deleteAndEditConfirm: "Êtes-vous sûr de vouloir effacer cette note et la modifier ? Vous perdrez toutes les réactions, renotes et réponses." addToList: "Ajouter à une liste" sendMessage: "Envoyer un message" copyUsername: "Copier le nom d'utilisateur" @@ -86,7 +88,6 @@ add: "Ajouter" reaction: "Réactions" reactionSettingDescription: "Attribuez vos réactions préférées qui souhaitent épingler le sélecteur de réaction." rememberNoteVisibility: "Se souvenir de la visibilité des notes" -renameFile: "Renommer le ficher" attachCancel: "Enlever le fichier attaché" markAsSensitive: "Marquer comme sensible" unmarkAsSensitive: "Enlever le marquage comme sensible" @@ -116,6 +117,7 @@ loginFailed: "Échec de la connexion" showOnRemote: "Voir sur l'instance distante" general: "Général" wallpaper: "Arrière plan" +setWallpaper: "Définir le fond d'écran" removeWallpaper: "Supprimer l'arrière plan" searchWith: "Recherche : {q}" youHaveNoLists: "Vous n'avez aucune liste" @@ -204,10 +206,13 @@ messaging: "Discuter" upload: "Téléchargez" fromDrive: "Depuis le Drive" fromUrl: "De l'URL" +uploadFromUrl: "Téléverser via une URL" +uploadFromUrlDescription: "URL du fichier que vous souhaitez téléverser" +uploadFromUrlRequested: "Téléversement demandé" +uploadFromUrlMayTakeTime: "Le téléversement de votre fichier peut prendre un certain temps." explore: "Découvrir" games: "Jeux de Misskey" messageRead: "Lus" -recentUsedEmojis: "Emoji récemment utilisé" noMoreHistory: "Plus d'histoire passée" startMessaging: "Commencer à écrire un discutez" nUsersRead: "{n} personnes ont lu" @@ -223,17 +228,30 @@ yearsOld: "{age} ans" registeredDate: "Date de création" location: "Localisation" theme: "Thème" +themeForLightMode: "Thème à utiliser en Mode Lumière" +themeForDarkMode: "Thème à utiliser en Mode Sombre" +light: "Lumière" +dark: "Sombre" lightThemes: "Thème lumineux" darkThemes: "Thème sombre" +syncDeviceDarkMode: "Synchronisez le mode sombre avec les paramètres de votre appareil" drive: "Drive" +fileName: "Nom du fichier" selectFile: "Choisir le fichier" selectFiles: "Choisir le fichiers" -renameFolder: "Renommer le dossier" +renameFile: "Renommer le ficher" +folderName: "Nom du dossier" createFolder: "Créer un dossier" +renameFolder: "Renommer le dossier" deleteFolder: "Supprimer le dossier" addFile: "Ajoutez un fichier" emptyDrive: "Le Drive est vide" emptyFolder: "Le dossier est vide" +unableToDelete: "Ne peut pas être supprimé" +inputNewFileName: "Entrez un nouveau nom de fichier" +inputNewFolderName: "Entrez un nouveau nom de dossier" +circularReferenceFolder: "Le dossier de destination est un sous-dossier du dossier que vous souhaitez déplacer." +hasChildFilesOrFolders: "Ce dossier n'est pas vide, il ne peut pas être supprimé" copyUrl: "Copier l’URL" rename: "Renommer" avatar: "Avatar" @@ -387,13 +405,14 @@ strongPassword: "Fort mot de passe" passwordMatched: "Correcte" passwordNotMatched: "Ne correspond pas" signinWith: "Connectez-vous avec {x}" +signinFailed: "Échec d’authentification. Veuillez vérifier que votre nom d’utilisateur et mot de passe sont corrects." tapSecurityKey: "Touchez la clé de sécurité" or: "OU" uiLanguage: "Langue d'affichage de l'interface" groupInvited: "Invité au groupe" aboutX: "À propos de {x}" useOsNativeEmojis: "Utilisez les emojis natifs de la plateforme" -noGroups: "Pas de groupes" +youHaveNoGroups: "Vous n'avez aucune groupe" joinOrCreateGroup: "Soyez invité à rejoindre les groupes ou vous pouvez créer votre propre groupe." noHistory: "Pas d'historique" disableAnimatedMfm: "Désactiver MFM qui a des animations" @@ -445,6 +464,8 @@ none: "Rien" volume: "Volume" details: "Détails" chooseEmoji: "Choisissez des emojis" +unableToProcess: "L'opération n'a pas pu être complétée" +recentUsed: "Récemment utilisé" _sfx: note: "Nouvelle note" noteMy: "Ma note" @@ -651,45 +672,39 @@ _pages: newPage: "Créer une page" editPage: "Modifier une page" readPage: "Voir la source" - page-created: "Page a été créée !" - page-updated: "A mis à jour la page" - name-already-exists: "Une page portant le même nom existe déjà " - title-invalid-name: "L’URL de la page spécifiée n’est pas valide" - text-invalid-name: "Assurez-vous qu'il n'est pas vide" + created: "La page a été créée !" + updated: "La page a été mise à jour !" + deleted: "La page a bien été supprimée" + nameAlreadyExists: "La URL de page spécifiée existe déjà " + invalidNameTitle: "La URL de la page spécifiée n’est pas valide" + invalidNameText: "Assurez-vous qu'il n'est pas vide" editThisPage: "Éditer cette page" viewSource: "Afficher la source" viewPage: "Afficher la page" like: "Favori" unlike: "Je n’favoris pas" - liked-pages: "Pages favoris" - my-pages: "Mes pages" + my: "Mes pages" + liked: "Pages favoris" inspector: "Inspecteur" content: "Bloc de page" variables: "Variables" - variables-info: "Vous pouvez créer une page dynamique à l'aide de variables. En tapant le <b>{nom de variable}</b> dans le texte, vous pouvez y incorporer la valeur de la variable. Par exemple, si dans le texte <b>Bonjour {chose} monde!</b> la valeur de la variable (chose) est <b>ai</b>, le texte devient est <b>Bonjour ai monde!</b>." - variables-info2: "L'évaluation des variables (le calcul des valeurs) se fait de haut en bas, donc l'variable ne peut pas se référer à une autre qui est en dessous. Par exemple, lorsque les variables <b>Aã€Bã€C</b> sont définies, <b>C</b> peut faire référence à <b>A</b> ou <b>B</b>, mais <b>A</b> ne peut pas faire référence à <b>B</b> ou <b>C</b>." - variables-info3: "Pour recevoir une entrée utilisateur, ajoutez un bloc \"Entrée\" sur la page et définissez le nom des variables que vous souhaitez stocker dans le champ \"Nom de la variable\" (les variables seront créées automatiquement). Les actions seront exécutées en fonction de l'entrée utilisateur de ces variables." - variables-info4: "Les fonctions vous permettent d'organiser le processus de calcul des valeurs sous une forme réutilisable. Pour créer une fonction, créez une variable de type \"fonction\". Une fonction peut avoir un slot (argument) et sa valeur peut être utilisée comme variable dans la fonction. Il existe également une fonction qui prend une fonction comme argument dans la norme AiScript (appelée fonction d'ordre supérieur). En plus des fonctions prédéfinies, elles peuvent être définies instantanément dans ces emplacements de fonction d'ordre supérieur." - more-details: "Description" title: "Titre" url: "URL de page" summary: "Résumé de page" alignCenter: "Centrée" - hide-title-when-pinned: "Masquer le titre de la page lorsque celle-ci est épinglée au profil" + hideTitleWhenPinned: "Masquer le titre de la page lorsque celle-ci est épinglée au profil" font: "Police de caractères" fontSerif: "Serif" fontSansSerif: "Sans Serif" - set-eye-catching-image: "Définir une image attirante" - remove-eye-catching-image: "Supprimer une image attirante" + eyeCatchingImageSet: "Définir une image attirante" + eyeCatchingImageRemove: "Supprimer une image attirante" chooseBlock: "Ajouter un bloc" selectType: "Choisir un type" enterVariableName: "Veuillez entrer un nom de variable" - the-variable-name-is-already-used: "Cette variable est déjà utilisée" - content-blocks: "Contenu" - input-blocks: "Entrée" - special-blocks: "Spécial" - post-from-post-form: "Publier ce contenu" - posted-from-post-form: "Publié !" + variableNameIsAlreadyUsed: "Cette variable est déjà utilisée" + contentBlocks: "Contenu" + inputBlocks: "Entrée" + specialBlocks: "Spécial" blocks: text: "Texte" textarea: "Zone de texte" diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml index f124014267f7f596cec0f27a749fc901621962a7..e2b1db6e086d5aeb7b0ac76a4a18a02434e9985d 100644 --- a/locales/ja-KS.yml +++ b/locales/ja-KS.yml @@ -62,7 +62,6 @@ clickToShow: "押ã—ã¦ã¿ã€è¦‹ã›ãŸã‚‹ã‚" sensitive: "見ãŸã‚‰ã‚ã‹ã‚“ã§" add: "増やã™" reaction: "リアクション" -renameFile: "ファイルåã‚’ã„らã†" attachCancel: "ãã£ã¤ã‘ã‚‹ã®ã‚„ã‚よã‹" markAsSensitive: "ã¡ã‚‡ã£ã¨è¦‹ã›ã‚‰ã‚Œã¸ã‚“ã‚" unmarkAsSensitive: "別ã«ãˆãˆã‚“ã˜ã‚ƒã?" @@ -102,6 +101,7 @@ all: "ã¿ãª" retypedNotMatch: "ãã‚„ãªã„ãん。" remove: "ã»ã‹ã™" noMoreHistory: "ã“れよりéŽåŽ»ã®å±¥æ´ã¯ã‚らã¸ã‚“ã§" +renameFile: "ファイルåã‚’ã„らã†" nsfw: "見ãŸã‚‰ã‚ã‹ã‚“ã§" userList: "リスト" about: "æƒ…å ±" diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml index 87a1415f2013843d2d7cd42fd631c6fc7edbaf0f..185764c443cbc0156b5b59ece7f1f89bd129ecdf 100644 --- a/locales/ko-KR.yml +++ b/locales/ko-KR.yml @@ -35,6 +35,8 @@ unpin: "프로필ì—ì„œ ê³ ì • í•´ì œ" copyContent: "ë‚´ìš© 복사" copyLink: "ë§í¬ 복사" delete: "ì‚ì œ" +deleteAndEdit: "ì‚ì œ 후 편집" +deleteAndEditConfirm: "ì´ ë…¸íŠ¸ë¥¼ ì‚ì œí•œ ë’¤ 다시 íŽ¸ì§‘í•˜ì‹œê² ìŠµë‹ˆê¹Œ? ì´ ë…¸íŠ¸ì— ëŒ€í•œ 리액션, 리노트, 답글 ë˜í•œ ëª¨ë‘ ì‚ì œë©ë‹ˆë‹¤." addToList: "ë¦¬ìŠ¤íŠ¸ì— ì¶”ê°€" sendMessage: "메시지 보내기" copyUsername: "ìœ ì €ëª… 복사" @@ -86,7 +88,6 @@ add: "추가" reaction: "리액션" reactionSettingDescription: "리액션 ì„ íƒ ìƒìžì— í‘œì‹œí• ë¦¬ì•¡ì…˜ì„ ì„¤ì •í•©ë‹ˆë‹¤." rememberNoteVisibility: "공개 범위를 기억하기" -renameFile: "íŒŒì¼ ì´ë¦„ 변경" attachCancel: "첨부 취소" markAsSensitive: "열람주ì˜ë¡œ ì„¤ì •" unmarkAsSensitive: "ì—´ëžŒì£¼ì˜ í•´ì œ" @@ -116,6 +117,7 @@ loginFailed: "로그ì¸ì— 실패했습니다" showOnRemote: "리모트ì—ì„œ 보기" general: "ì¼ë°˜" wallpaper: "ë°°ê²½" +setWallpaper: "배경화면 ì„¤ì •" removeWallpaper: "ë°°ê²½ ì œê±°" searchWith: "검색: {q}" youHaveNoLists: "리스트가 없습니다" @@ -204,10 +206,13 @@ messaging: "대화" upload: "업로드" fromDrive: "ë“œë¼ì´ë¸Œì—ì„œ" fromUrl: "URL로부터" +uploadFromUrl: "URL 업로드" +uploadFromUrlDescription: "ì—…ë¡œë“œí•˜ë ¤ëŠ” 파ì¼ì˜ URL" +uploadFromUrlRequested: "업로드를 ìš”ì²í–ˆìŠµë‹ˆë‹¤" +uploadFromUrlMayTakeTime: "업로드가 완료ë 때까지 ì‹œê°„ì´ ì†Œìš”ë 수 있습니다." explore: "발견하기" games: "Misskey Games" messageRead: "ì½ìŒ" -recentUsedEmojis: "ìµœê·¼ì— ì‚¬ìš©í•œ ì´ëª¨ì§€" noMoreHistory: "ì´ê²ƒë³´ë‹¤ ê³¼ê±°ì˜ ê¸°ë¡ì´ 없습니다" startMessaging: "대화 시작하기" nUsersRead: "{n}ëª…ì´ ì½ìŒ" @@ -223,17 +228,30 @@ yearsOld: "{age}세" registeredDate: "등ë¡ì¼" location: "장소" theme: "테마" +themeForLightMode: "ë¼ì´íŠ¸ 모드ì—ì„œ ì‚¬ìš©í• í…Œë§ˆ" +themeForDarkMode: "ë‹¤í¬ ëª¨ë“œì—ì„œ ì‚¬ìš©í• í…Œë§ˆ" +light: "ë¼ì´íŠ¸" +dark: "다í¬" lightThemes: "ë°ì€ 테마" darkThemes: "ì–´ë‘ìš´ 테마" +syncDeviceDarkMode: "디바ì´ìŠ¤ì˜ ë‹¤í¬ ëª¨ë“œ ì„¤ì •ê³¼ ë™ê¸°í™”" drive: "ë“œë¼ì´ë¸Œ" +fileName: "파ì¼ëª…" selectFile: "íŒŒì¼ ì„ íƒ" selectFiles: "íŒŒì¼ ì„ íƒ" -renameFolder: "í´ë” ì´ë¦„ 바꾸기" +renameFile: "íŒŒì¼ ì´ë¦„ 변경" +folderName: "í´ë”명" createFolder: "í´ë” 만들기" +renameFolder: "í´ë” ì´ë¦„ 바꾸기" deleteFolder: "í´ë” ì‚ì œ" addFile: "íŒŒì¼ ì¶”ê°€" emptyDrive: "ë“œë¼ì´ë¸Œê°€ 비어 있습니다" emptyFolder: "í´ë”ê°€ 비어 있습니다" +unableToDelete: "ì‚ì œí• ìˆ˜ 없습니다" +inputNewFileName: "바꿀 파ì¼ëª…ì„ ìž…ë ¥í•´ 주세요" +inputNewFolderName: "바꿀 í´ë”ëª…ì„ ìž…ë ¥í•´ 주세요" +circularReferenceFolder: "ì§€ì •í•œ í´ë”ê°€ ì´ë™í• í´ë”ì˜ í•˜ìœ„ í´ë”입니다." +hasChildFilesOrFolders: "ì´ í´ë”는 비어있지 않기 ë•Œë¬¸ì— ì‚ì œí• ìˆ˜ 없습니다." copyUrl: "URL 복사" rename: "ì´ë¦„ 변경" avatar: "아바타" @@ -387,13 +405,14 @@ strongPassword: "ê°•í•œ 비밀번호" passwordMatched: "ì¼ì¹˜í•©ë‹ˆë‹¤" passwordNotMatched: "ì¼ì¹˜í•˜ì§€ 않습니다" signinWith: "{x}ë¡œ 로그ì¸" +signinFailed: "로그ì¸í• 수 없습니다. 사용ìžëª…ê³¼ 비밀번호를 확ì¸í•˜ì—¬ 주ì‹ì‹œì˜¤." tapSecurityKey: "보안 키를 터치" or: "혹ì€" uiLanguage: "UI 표시 언어" groupInvited: "ê·¸ë£¹ì— ì´ˆëŒ€ë˜ì—ˆìŠµë‹ˆë‹¤" aboutX: "{x}ì— ëŒ€í•˜ì—¬" useOsNativeEmojis: "OS 기본 ì´ëª¨ì§€ë¥¼ 사용" -noGroups: "ê·¸ë£¹ì´ ì—†ìŠµë‹ˆë‹¤" +youHaveNoGroups: "ê·¸ë£¹ì´ ì—†ìŠµë‹ˆë‹¤" joinOrCreateGroup: "다른 ê·¸ë£¹ì˜ ì´ˆëŒ€ë¥¼ 받거나, ì§ì ‘ 새 ê·¸ë£¹ì„ ë§Œë“¤ì–´ 보세요." noHistory: "기ë¡ì´ 없습니다" disableAnimatedMfm: "움ì§ìž„ì´ ìžˆëŠ” MFMì„ ë¹„í™œì„±í™”" @@ -445,6 +464,8 @@ none: "ì—†ìŒ" volume: "ìŒëŸ‰" details: "ìžì„¸ížˆ" chooseEmoji: "ì´ëª¨ì§€ ì„ íƒ" +unableToProcess: "ìž‘ì—…ì„ ì™„ë£Œí• ìˆ˜ 없습니다" +recentUsed: "최근 사용" _sfx: note: "새 노트" noteMy: "ë‚´ 노트" @@ -651,45 +672,39 @@ _pages: newPage: "페ì´ì§€ 만들기" editPage: "페ì´ì§€ ìˆ˜ì •" readPage: "소스 표시 중" - page-created: "페ì´ì§€ë¥¼ 만들었습니다" - page-updated: "페ì´ì§€ë¥¼ ìˆ˜ì •í–ˆìŠµë‹ˆë‹¤" - name-already-exists: "ì§€ì •í•œ 페ì´ì§€ URLì´ ì´ë¯¸ 존재합니다" - title-invalid-name: "ìœ íš¨í•˜ì§€ ì•Šì€ íŽ˜ì´ì§€ URL입니다" - text-invalid-name: "비어있지 ì•Šì€ì§€ 확ì¸í•´ì£¼ì„¸ìš”" + created: "페ì´ì§€ë¥¼ 만들었습니다" + updated: "페ì´ì§€ë¥¼ ìˆ˜ì •í–ˆìŠµë‹ˆë‹¤" + deleted: "페ì´ì§€ê°€ ì‚ì œë˜ì—ˆìŠµë‹ˆë‹¤" + nameAlreadyExists: "ì§€ì •í•œ 페ì´ì§€ URLì´ ì´ë¯¸ 존재합니다" + invalidNameTitle: "ìœ íš¨í•˜ì§€ ì•Šì€ íŽ˜ì´ì§€ URL입니다" + invalidNameText: "비어있지 ì•Šì€ì§€ 확ì¸í•´ì£¼ì„¸ìš”" editThisPage: "ì´ íŽ˜ì´ì§€ë¥¼ 편집" viewSource: "소스 보기" viewPage: "페ì´ì§€ 보기" like: "좋아요" unlike: "좋아요 í•´ì œ" - liked-pages: "좋아요한 페ì´ì§€" - my-pages: "ë‚´ 페ì´ì§€" + my: "ë‚´ 페ì´ì§€" + liked: "좋아요한 페ì´ì§€" inspector: "ì¸ìŠ¤íŽ™í„°" content: "페ì´ì§€ 블ë¡" variables: "변수" - variables-info: "변수를 사용하면 ë™ì ì¸ íŽ˜ì´ì§€ë¥¼ 만들 수 있습니다. í…ìŠ¤íŠ¸ì— <b>{ 변수명 }</b>ì„ ì 으면 ê·¸ ìœ„ì¹˜ì— ë³€ìˆ˜ì˜ ê°’ì„ ì§‘ì–´ë„£ìŠµë‹ˆë‹¤. 예를 들어, <b>Hello { thing } world!</b> ë¼ëŠ” í…스트가 ìžˆì„ ë•Œ, 변수(thing)ì˜ ê°’ì´ <b>ai</b>ì¸ ê²½ìš° í…스트는 <b>Hello ai world!</b>ê°€ ë©ë‹ˆë‹¤." - variables-info2: "ë³€ìˆ˜ì˜ í‰ê°€(ê°’ì„ ê³„ì‚°í•´ë‚´ëŠ” 것)는 위ì—서부터 아래로 진행ë˜ë¯€ë¡œ ì–´ë–¤ ë³€ìˆ˜ì˜ ë‚´ë¶€ì—ì„œ ìžì‹ 보다 ì•„ëž˜ì— ìžˆëŠ” 변수를 ì°¸ì¡°í• ìˆ˜ëŠ” 없습니다. 예를 들ìžë©´ 위ì—서부터 <b>A, B, C</b>ì˜ 3ê°œì˜ ë³€ìˆ˜ê°€ ì •ì˜ë˜ì–´ ìžˆì„ ë•Œ, <b>C</b>ì˜ ë‚´ë¶€ì— <b>A</b>나 <b>B</b>를 ì°¸ì¡°í• ìˆ˜ëŠ” 있지만, <b>A</b>ì˜ ë‚´ë¶€ì—ì„œ <b>B</b>나 <b>C</b>를 ì°¸ì¡°í• ìˆ˜ëŠ” 없습니다." - variables-info3: "사용ìžë¡œë¶€í„° ìž…ë ¥ì„ ë°›ìœ¼ë ¤ë©´, 페ì´ì§€ì— \"ì‚¬ìš©ìž ìž…ë ¥\" 블ë¡ì„ ì‚½ìž…í•˜ê³ \"변수명\" ì— ìž…ë ¥ë°›ì€ ê°’ì„ ì €ìž¥í•˜ê³ ì‹¶ì€ ë³€ìˆ˜ëª…ì„ ì„¤ì •í•©ë‹ˆë‹¤ (변수는 ìžë™ìœ¼ë¡œ ìƒì„±ë©ë‹ˆë‹¤). ê·¸ 변수를 사용하여 ì‚¬ìš©ìž ìž…ë ¥ì— ë”°ë¼ ë™ìž‘í• ìˆ˜ 있습니다." - variables-info4: "함수를 사용하면 반복ë˜ëŠ” ìž‘ì—…ì„ ì†ì‰½ê²Œ ì²˜ë¦¬í• ìˆ˜ 있습니다. 함수를 ë§Œë“œì‹œë ¤ë©´ \"함수\" íƒ€ìž…ì˜ ë³€ìˆ˜ë¥¼ 만ë“니다. 함수ì—ì„œ 슬롯(ì¸ìˆ˜)를 ë°›ë„ë¡ ì„¤ì •í•˜ë©´, 함수를 ì‚¬ìš©í• ë•Œ ìŠ¬ë¡¯ì— ìž…ë ¥ëœ ê°’ì„ í•¨ìˆ˜ 안ì—ì„œ ë³€ìˆ˜ë¡œì¨ ì´ìš©í• 수 있게 ë©ë‹ˆë‹¤. ë˜í•œ, AiScript 표준ì—는 함수를 ì¸ìˆ˜ë¡œ 받는 함수(ê³ ì°¨í•¨ìˆ˜)ë„ ì¡´ìž¬í•©ë‹ˆë‹¤. 함수를 미리 ì •ì˜í•˜ëŠ” 것 외ì—, ì´ì™€ ê°™ì€ ê³ ì°¨í•¨ìˆ˜ë¥¼ 즉ì„으로 ì„¤ì •í• ìˆ˜ 있습니다." - more-details: "ìžì„¸í•œ 설명" title: "ì œëª©" url: "페ì´ì§€ URL" summary: "페ì´ì§€ 요약" alignCenter: "ê°€ìš´ë° ì •ë ¬" - hide-title-when-pinned: "í”„ë¡œí•„ì— ê³ ì •í• ë•Œ 타ì´í‹€ì„ 표시하지 ì•ŠìŒ" + hideTitleWhenPinned: "í”„ë¡œí•„ì— ê³ ì •í•´ë†“ì€ ê²½ìš° 타ì´í‹€ì„ 표시하지 ì•ŠìŒ" font: "í°íŠ¸" fontSerif: "명조체" fontSansSerif: "ê³ ë”•ì²´" - set-eye-catching-image: "ì•„ì´ìºì¹˜ ì´ë¯¸ì§€ë¥¼ ì„¤ì •" - remove-eye-catching-image: "ì•„ì´ìºì¹˜ ì´ë¯¸ì§€ ì‚ì œ" + eyeCatchingImageSet: "ì•„ì´ìºì¹˜ ì´ë¯¸ì§€ë¥¼ ì„¤ì •" + eyeCatchingImageRemove: "ì•„ì´ìºì¹˜ ì´ë¯¸ì§€ë¥¼ ì‚ì œ" chooseBlock: "ë¸”ë¡ ì¶”ê°€" selectType: "종류 ì„ íƒ" enterVariableName: "ë³€ìˆ˜ëª…ì„ ì§€ì •í•´ì£¼ì„¸ìš”" - the-variable-name-is-already-used: "해당 ë³€ìˆ˜ëª…ì€ ì´ë¯¸ 사용중입니다" - content-blocks: "컨í…ì¸ " - input-blocks: "ìž…ë ¥" - special-blocks: "특수" - post-from-post-form: "ì´ ë‚´ìš©ì„ ì˜¬ë¦¬ê¸°" - posted-from-post-form: "게시하였습니다" + variableNameIsAlreadyUsed: "해당 ë³€ìˆ˜ëª…ì€ ì´ë¯¸ 사용중입니다" + contentBlocks: "콘í…ì¸ " + inputBlocks: "ìž…ë ¥" + specialBlocks: "특수" blocks: text: "í…스트" textarea: "í…스트 ì˜ì—" diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index 7d9a70722be9ae03e5df03f3fd485b1e3720e3bb..a484a1c8a296912514868b559773c30633a015bc 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -35,6 +35,8 @@ unpin: "å–消置顶" copyContent: "å¤åˆ¶å†…容" copyLink: "å¤åˆ¶é“¾æŽ¥" delete: "åˆ é™¤" +deleteAndEdit: "åˆ é™¤å’Œç¼–è¾‘" +deleteAndEditConfirm: "è¦åˆ 除æ¤å¸–并å†æ¬¡ç¼–辑å—?对æ¤å¸–的所有回应,转推和回å¤ä¹Ÿå°†è¢«åˆ 除。" addToList: "æ·»åŠ è‡³åˆ—è¡¨" sendMessage: "å‘é€" copyUsername: "å¤åˆ¶ç”¨æˆ·å" @@ -86,7 +88,6 @@ add: "æ·»åŠ " reaction: "å应" reactionSettingDescription: "选择您想è¦å›ºå®šåœ¨å应选择器ä¸çš„å应。" rememberNoteVisibility: "记录公开范围" -renameFile: "é‡å‘½å文件" attachCancel: "åˆ é™¤é™„ä»¶" markAsSensitive: "阅读注æ„" unmarkAsSensitive: "å–æ¶ˆæ ‡è®°ä¸ºæ•æ„Ÿå†…容" @@ -116,6 +117,7 @@ loginFailed: "登录失败" showOnRemote: "转到所在实例显示" general: "常规设置" wallpaper: "å£çº¸" +setWallpaper: "设置å£çº¸" removeWallpaper: "移除å£çº¸" searchWith: "æœç´¢:{q}" youHaveNoLists: "列表为空" @@ -204,10 +206,13 @@ messaging: "èŠå¤©" upload: "ä¸Šä¼ " fromDrive: "从网盘ä¸" fromUrl: "从 URL" +uploadFromUrl: "从网å€ä¸Šä¼ " +uploadFromUrlDescription: "è¦ä¸Šä¼ 的文件的URL" +uploadFromUrlRequested: "è¯·æ±‚ä¸Šä¼ " +uploadFromUrlMayTakeTime: "ä¸Šä¼ å®Œæˆå¯èƒ½éœ€è¦ä¸€äº›æ—¶é—´ã€‚" explore: "å‘现" games: "Misskey游æˆ" messageRead: "已读" -recentUsedEmojis: "最近使用的Emoji表情" noMoreHistory: "没有更多的历å²è®°å½•" startMessaging: "开始èŠå¤©" nUsersRead: "{n}人已读" @@ -223,17 +228,30 @@ yearsOld: "{age}å²" registeredDate: "注册于" location: "ä½ç½®" theme: "主题" +themeForLightMode: "在轻便模å¼ä¸‹ä½¿ç”¨çš„主题" +themeForDarkMode: "在黑暗模å¼ä¸‹ä½¿ç”¨çš„主题" +light: "轻便" +dark: "黑暗" lightThemes: "亮色主题" darkThemes: "暗色主题" +syncDeviceDarkMode: "将黑暗模å¼ä¸Žè®¾å¤‡è®¾ç½®åŒæ¥" drive: "网盘" +fileName: "文件å称" selectFile: "选择文件" selectFiles: "选择文件" -renameFolder: "é‡å‘½å文件夹" +renameFile: "é‡å‘½å文件" +folderName: "文件夹å称" createFolder: "创建文件夹" +renameFolder: "é‡å‘½å文件夹" deleteFolder: "åˆ é™¤æ–‡ä»¶å¤¹" addFile: "æ·»åŠ æ–‡ä»¶" emptyDrive: "驱动器为空" emptyFolder: "空文件夹" +unableToDelete: "æ— æ³•åˆ é™¤" +inputNewFileName: "请输入新文件å" +inputNewFolderName: "请输入新文件å" +circularReferenceFolder: "ç›®æ ‡æ–‡ä»¶å¤¹æ˜¯æ‚¨è¦ç§»åŠ¨çš„文件夹的å文件夹。" +hasChildFilesOrFolders: "æ¤æ–‡ä»¶å¤¹ä¸ä¸ºç©ºï¼Œæ— æ³•åˆ é™¤ã€‚" copyUrl: "å¤åˆ¶é“¾æŽ¥" rename: "é‡å‘½å" avatar: "头åƒ" @@ -387,13 +405,14 @@ strongPassword: "密ç 强度:强" passwordMatched: "密ç 一致" passwordNotMatched: "密ç ä¸ä¸€è‡´" signinWith: "以{x}登录" +signinFailed: "æ— æ³•ç™»å½•ã€‚è¯·æ£€æŸ¥æ‚¨çš„ç”¨æˆ·å和密ç 。" tapSecurityKey: "点击安全密钥" or: "或者" uiLanguage: "显示è¯è¨€" groupInvited: "群组招待" aboutX: "关于 {x}" useOsNativeEmojis: "使用OS原生Emoji" -noGroups: "没有组" +youHaveNoGroups: "没有组" joinOrCreateGroup: "åŠ å…¥æˆ–è€…åˆ›å»ºç¾¤ç»„" noHistory: "没有历å²è®°å½•" disableAnimatedMfm: "ç¦ç”¨MFM动画" @@ -445,6 +464,8 @@ none: "空" volume: "音é‡" details: "详情" chooseEmoji: "选择表情符å·" +unableToProcess: "æ“ä½œæ— æ³•å®Œæˆ" +recentUsed: "最近使用" _sfx: note: "帖å" noteMy: "我的笔记" @@ -651,45 +672,39 @@ _pages: newPage: "创建页é¢" editPage: "编辑页é¢" readPage: "查看æº" - page-created: "页é¢å·²åˆ›å»º" - page-updated: "页é¢å·²æ›´æ–°" - name-already-exists: "该页é¢URLå·²å˜åœ¨" - title-invalid-name: "æ— æ•ˆçš„é¡µé¢URL" - text-invalid-name: "请确认该项ä¸ä¸ºç©º" + created: "页é¢å·²åˆ›å»º" + updated: "页é¢å·²æ›´æ–°" + deleted: "该页é¢å·²è¢«åˆ 除" + nameAlreadyExists: "该页é¢URLå·²å˜åœ¨" + invalidNameTitle: "æ— æ•ˆçš„é¡µé¢URL" + invalidNameText: "请确认该项ä¸ä¸ºç©º" editThisPage: "编辑æ¤é¡µé¢" viewSource: "查看æºä»£ç " viewPage: "查看页é¢" like: "赞" unlike: "å–消赞" - liked-pages: "喜欢的页é¢" - my-pages: "我的页é¢" + my: "我的页é¢" + liked: "喜欢的页é¢" inspector: "检查器" content: "页é¢å†…容" variables: "å˜é‡" - variables-info: "您å¯ä»¥ä½¿ç”¨å˜é‡åˆ›å»ºåŠ¨æ€é¡µé¢ã€‚在文本ä¸é€šè¿‡<b>{å˜é‡å}</b>的写法æ¥åµŒå…¥å˜é‡å€¼ã€‚例如在文本<b>Hello { thing } world!</b>ä¸ï¼Œå¦‚æžœå˜é‡(thing)的值为<b>ai</b>,那么该文本会æˆä¸º<b>Hello ai world!</b>。" - variables-info2: "å› ä¸ºå˜é‡çš„计算(计算å˜é‡å€¼)是从上到下执行的,所以ä¸èƒ½åœ¨å˜é‡ä¸å¼•ç”¨ä¸‹é¢çš„å˜é‡ã€‚例如从上到下ä¾æ¬¡å®šä¹‰äº†<b>A,B,C</b>3个å˜é‡ï¼Œé‚£ä¹ˆ<b>C</b>ä¸å¯ä»¥å¼•ç”¨<b>A</b>或<b>B</b>,但是<b>A</b>æ— æ³•å¼•ç”¨<b>B</b>或<b>C</b>。" - variables-info3: "为了接收æ¥è‡ªç”¨æˆ·çš„输入,页é¢ä¸Šè®¾æœ‰â€œç”¨æˆ·è¾“å…¥â€å—,在“å˜é‡å称â€ä¸è®¾ç½®è¦åœ¨å…¶ä¸ä¿å˜è¾“入值的å˜é‡å(å˜é‡ä¼šè‡ªåŠ¨åˆ›å»º)。您å¯ä»¥ä½¿ç”¨è¯¥å˜é‡æ‰§è¡Œæ“作以å“应用户输入。" - variables-info4: "通过使用函数,您å¯ä»¥å°†æ•°å€¼è®¡ç®—过程组åˆæˆå¯é‡ç”¨çš„å½¢å¼ã€‚è¦åˆ›å»ºå‡½æ•°ï¼Œéœ€è¦åˆ›å»ºä¸€ä¸ªâ€œå‡½æ•°â€ç±»åž‹çš„å˜é‡ã€‚ä½ å¯ä»¥å°†å‡½æ•°è®¾å®šä¸ºæ§½å‡½æ•°(å‚æ•°)çš„æ ¼å¼ï¼Œæ§½å‡½æ•°çš„值å¯ä½œä¸ºå‡½æ•°ä¸çš„å˜é‡ä½¿ç”¨ã€‚å¦å¤–,AiScriptæ ‡å‡†ä¸è¿˜æœ‰ä¸€äº›å‡½æ•°ä¼šå°†å‡½æ•°ä½œä¸ºå‚æ•°(称为高阶函数)。\n除了已ç»é¢„先定义的函数外,您也å¯ä»¥å°†å®ƒä»¬è®¾ç½®ä¸ºè¿™äº›é«˜é˜¶å‡½æ•°çš„槽函数。" - more-details: "详细说明" title: "æ ‡é¢˜" url: "页é¢URL" summary: "页é¢æ‘˜è¦" alignCenter: "å±…ä¸" - hide-title-when-pinned: "置顶时éšè—æ ‡é¢˜" + hideTitleWhenPinned: "置顶时éšè—æ ‡é¢˜" font: "å—体" fontSerif: "衬线å—体" fontSansSerif: "æ— è¡¬çº¿å—体" - set-eye-catching-image: "设置å°é¢å›¾ç‰‡" - remove-eye-catching-image: "åˆ é™¤å°é¢å›¾ç‰‡" + eyeCatchingImageSet: "设置å°é¢å›¾ç‰‡" + eyeCatchingImageRemove: "åˆ é™¤å°é¢å›¾ç‰‡" chooseBlock: "æ·»åŠ å—" selectType: "选择类型" enterVariableName: "请输入å˜é‡å" - the-variable-name-is-already-used: "å˜é‡å已使用" - content-blocks: "内容" - input-blocks: "输入" - special-blocks: "特殊" - post-from-post-form: "å‘布æ¤å†…容" - posted-from-post-form: "å·²å‘布" + variableNameIsAlreadyUsed: "å˜é‡å已使用" + contentBlocks: "内容" + inputBlocks: "输入" + specialBlocks: "特殊" blocks: text: "文本" textarea: "文本区域" diff --git a/locales/zh-TW.yml b/locales/zh-TW.yml index 3f7f1126cdcd7e4c5c59041797f42d97d4cd8505..6a823876214aae6731fa99184146f7acecf19256 100644 --- a/locales/zh-TW.yml +++ b/locales/zh-TW.yml @@ -82,7 +82,6 @@ sensitive: "æ•æ„Ÿå…§å®¹" add: "新增" reaction: "å應" rememberNoteVisibility: "記ä½ç†è¨˜éš±ç§è¨å®š" -renameFile: "é‡æ–°å‘½å檔案" attachCancel: "移除附件" markAsSensitive: "標記為æ•æ„Ÿå…§å®¹" unmarkAsSensitive: "å–消標記為æ•æ„Ÿå…§å®¹" @@ -175,7 +174,6 @@ fromUrl: "從URL" explore: "探索" games: "Misskey éŠæˆ²" messageRead: "已讀" -recentUsedEmojis: "最近使用的表情符號" noMoreHistory: "沒有更多æ·å²ç´€éŒ„" startMessaging: "開始傳é€è¨Šæ¯" nUsersRead: "{n}人已讀" @@ -193,8 +191,9 @@ darkThemes: "ç°æš—主題" drive: "雲端硬碟" selectFile: "é¸æ“‡æª”案" selectFiles: "é¸æ“‡æª”案" -renameFolder: "é‡æ–°å‘½å資料夾" +renameFile: "é‡æ–°å‘½å檔案" createFolder: "新增資料夾" +renameFolder: "é‡æ–°å‘½å資料夾" deleteFolder: "刪除資料夾" addFile: "æ·»åŠ æª”æ¡ˆ" emptyDrive: "雲端硬碟為空" diff --git a/package.json b/package.json index ea1abef392236e2ce6f31f24c2bec660d9344b95..199fedc446492d6dae7c126af26f4f5dd8edda40 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "misskey", "author": "syuilo <syuilotan@yahoo.co.jp>", - "version": "12.23.0", + "version": "12.24.0", "codename": "indigo", "repository": { "type": "git", diff --git a/src/client/app.vue b/src/client/app.vue index 1e9fd6c0a95b25d49364df1c73e2aae3fbb063ea..b47c092ed2e317546476985f98743e08c5b63098 100644 --- a/src/client/app.vue +++ b/src/client/app.vue @@ -43,7 +43,6 @@ <button class="item _button account" @click="openAccountMenu" v-if="$store.getters.isSignedIn"> <mk-avatar :user="$store.state.i" class="avatar"/><mk-acct class="text" :user="$store.state.i"/> </button> - <div class="divider"></div> <button class="item _button index active" @click="top()" v-if="$route.name === 'index'"> <fa :icon="faHome" fixed-width/><span class="text">{{ $store.getters.isSignedIn ? $t('timeline') : $t('home') }}</span> </button> @@ -164,7 +163,6 @@ import { v4 as uuid } from 'uuid'; import i18n from './i18n'; import { host, instanceName } from './config'; import { search } from './scripts/search'; -import { isDeviceDarkmode } from './scripts/is-device-darkmode'; import MkToast from './components/toast.vue'; const DESKTOP_THRESHOLD = 1100; @@ -225,10 +223,6 @@ export default Vue.extend({ }, created() { - if (this.$store.state.device.syncDeviceDarkMode) { - this.$store.commit('device/set', { key: 'darkMode', value: isDeviceDarkmode() }); - } - if (this.$store.getters.isSignedIn) { this.connection = this.$root.stream.useSharedConnection('main'); this.connection.on('notification', this.onNotification); @@ -622,12 +616,12 @@ export default Vue.extend({ .mk-app { $header-height: 60px; $nav-width: 250px; - $nav-icon-only-width: 74px; + $nav-icon-only-width: 80px; $main-width: 650px; $ui-font-size: 1em; $nav-icon-only-threshold: 1300px; - $nav-hide-threshold: 700px; - $side-hide-threshold: 1100px; + $nav-hide-threshold: 650px; + $side-hide-threshold: 1070px; min-height: 100vh; box-sizing: border-box; @@ -822,8 +816,6 @@ export default Vue.extend({ z-index: 1001; width: $nav-width; height: 100vh; - padding: 16px 0; - padding-bottom: calc(3.7rem + 24px); box-sizing: border-box; overflow: auto; background: var(--navBg); @@ -836,13 +828,21 @@ export default Vue.extend({ @media (max-width: $nav-icon-only-threshold) and (min-width: $nav-hide-threshold + 1px) { width: $nav-icon-only-width; - padding: 8px 0; - padding-bottom: calc(3.7rem + 24px); > .divider { margin: 8px auto; width: calc(100% - 32px); } + + > .item { + &:first-child { + margin-bottom: 8px; + } + + &:last-child { + margin-top: 8px; + } + } } > .item { @@ -892,15 +892,25 @@ export default Vue.extend({ color: var(--navActive); } + &:first-child { + position: sticky; + z-index: 1; + top: 0; + padding-top: 8px; + padding-bottom: 8px; + margin-bottom: 16px; + background: var(--navBg); + border-bottom: solid 1px var(--divider); + } + &:last-child { - position: fixed; + position: sticky; bottom: 0; - width: inherit; padding-top: 8px; padding-bottom: 8px; + margin-top: 16px; background: var(--navBg); border-top: solid 1px var(--divider); - border-right: solid 1px var(--divider); } @media (max-width: $nav-icon-only-threshold) and (min-width: $nav-hide-threshold + 1px) { diff --git a/src/client/assets/unread.svg b/src/client/assets/unread.svg new file mode 100644 index 0000000000000000000000000000000000000000..8c3cc9f4758c0be0f6f5a12c2929cfa2204acbf8 Binary files /dev/null and b/src/client/assets/unread.svg differ diff --git a/src/client/components/analog-clock.vue b/src/client/components/analog-clock.vue index b68926678015a75c6070ddf70883cea3fa6cf9c6..81c6598c7a38bf97100fe1772b71035c8f9a9758 100644 --- a/src/client/components/analog-clock.vue +++ b/src/client/components/analog-clock.vue @@ -38,13 +38,6 @@ import Vue from 'vue'; import * as tinycolor from 'tinycolor2'; export default Vue.extend({ - props: { - smooth: { - type: Boolean, - default: false - } - }, - data() { return { now: new Date(), @@ -83,9 +76,6 @@ export default Vue.extend({ return tinycolor(this.computedStyle.getPropertyValue('--accent')).toHexString(); }, - ms(): number { - return this.now.getMilliseconds() * (this.smooth ? 1 : 0); - }, s(): number { return this.now.getSeconds(); }, @@ -97,13 +87,13 @@ export default Vue.extend({ }, hAngle(): number { - return Math.PI * (this.h % 12 + (this.m + (this.s + this.ms / 1000) / 60) / 60) / 6; + return Math.PI * (this.h % 12 + (this.m + this.s / 60) / 60) / 6; }, mAngle(): number { - return Math.PI * (this.m + (this.s + this.ms / 1000) / 60) / 30; + return Math.PI * (this.m + this.s / 60) / 30; }, sAngle(): number { - return Math.PI * (this.s + this.ms / 1000) / 30; + return Math.PI * this.s / 30; }, graduations(): any { @@ -121,7 +111,7 @@ export default Vue.extend({ const update = () => { if (this.enabled) { this.tick(); - requestAnimationFrame(update); + setTimeout(update, 1000); } }; update(); diff --git a/src/client/components/link.vue b/src/client/components/link.vue index f4e07c1627245d0858f9c5e9039e1bde896105aa..11de688520223a3ce8dfd42247903f949c905335 100644 --- a/src/client/components/link.vue +++ b/src/client/components/link.vue @@ -13,7 +13,7 @@ import Vue from 'vue'; import { faExternalLinkSquareAlt } from '@fortawesome/free-solid-svg-icons'; import { url as local } from '../config'; -import XUrlPreview from './url-preview-popup.vue'; +import MkUrlPreview from './url-preview-popup.vue'; export default Vue.extend({ props: { @@ -44,7 +44,7 @@ export default Vue.extend({ if (!document.body.contains(this.$el)) return; if (this.preview) return; - this.preview = new XUrlPreview({ + this.preview = new MkUrlPreview({ parent: this, propsData: { url: this.url, diff --git a/src/client/components/note.vue b/src/client/components/note.vue index b3126e06731339c53c7d84527833ac65d63ae2a4..48e37c33d3c2c34f69f2d17654da1fca31c3229a 100644 --- a/src/client/components/note.vue +++ b/src/client/components/note.vue @@ -49,7 +49,7 @@ <x-media-list :media-list="appearNote.files"/> </div> <x-poll v-if="appearNote.poll" :note="appearNote" ref="pollViewer"/> - <x-url-preview v-for="url in urls" :url="url" :key="url" :compact="true" class="url-preview"/> + <mk-url-preview v-for="url in urls" :url="url" :key="url" :compact="true" class="url-preview"/> <div class="renote" v-if="appearNote.renote"><x-note-preview :note="appearNote.renote"/></div> </div> </div> @@ -97,7 +97,7 @@ import XReactionsViewer from './reactions-viewer.vue'; import XMediaList from './media-list.vue'; import XCwButton from './cw-button.vue'; import XPoll from './poll.vue'; -import XUrlPreview from './url-preview.vue'; +import MkUrlPreview from './url-preview.vue'; import MkReactionPicker from './reaction-picker.vue'; import pleaseLogin from '../scripts/please-login'; import { focusPrev, focusNext } from '../scripts/focus'; @@ -115,7 +115,7 @@ export default Vue.extend({ XMediaList, XCwButton, XPoll, - XUrlPreview, + MkUrlPreview, }, props: { diff --git a/src/client/components/url-preview-popup.vue b/src/client/components/url-preview-popup.vue index 26fdbf44a9032808849d83dd2271449c2f8cf2ba..938566e9e20f3a047d5ce2429a473cb1ea8a2b9a 100644 --- a/src/client/components/url-preview-popup.vue +++ b/src/client/components/url-preview-popup.vue @@ -1,19 +1,19 @@ <template> <div class="fgmtyycl _panel" :style="{ top: top + 'px', left: left + 'px' }"> - <x-url-preview :url="url"/> + <mk-url-preview :url="url"/> </div> </template> <script lang="ts"> import Vue from 'vue'; import i18n from '../i18n'; -import XUrlPreview from './url-preview.vue'; +import MkUrlPreview from './url-preview.vue'; export default Vue.extend({ i18n, components: { - XUrlPreview + MkUrlPreview }, props: { diff --git a/src/client/components/url.vue b/src/client/components/url.vue index df16bc9c24360fad7dc3ea6b779d5393ad4f2390..409bb128f6d84fc7ce2fba11f3886dbcb479a4e5 100644 --- a/src/client/components/url.vue +++ b/src/client/components/url.vue @@ -23,7 +23,7 @@ import Vue from 'vue'; import { faExternalLinkSquareAlt } from '@fortawesome/free-solid-svg-icons'; import { toUnicode as decodePunycode } from 'punycode'; import { url as local } from '../config'; -import XUrlPreview from './url-preview-popup.vue'; +import MkUrlPreview from './url-preview-popup.vue'; export default Vue.extend({ props: { @@ -70,7 +70,7 @@ export default Vue.extend({ if (!document.body.contains(this.$el)) return; if (this.preview) return; - this.preview = new XUrlPreview({ + this.preview = new MkUrlPreview({ parent: this, propsData: { url: this.url, diff --git a/src/client/init.ts b/src/client/init.ts index f1790ac4d9af559c3ae460b96880f01f156342ce..d7b693e4c8903f9ea30c24e03a8607034597efbb 100644 --- a/src/client/init.ts +++ b/src/client/init.ts @@ -144,6 +144,12 @@ os.init(async () => { } }, false) + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', mql => { + if (os.store.state.device.syncDeviceDarkMode) { + os.store.commit('device/set', { key: 'darkMode', value: mql.matches }); + } + }); + if ('Notification' in window && os.store.getters.isSignedIn) { // 許å¯ã‚’å¾—ã¦ã„ãªã‹ã£ãŸã‚‰ãƒªã‚¯ã‚¨ã‚¹ãƒˆ if (Notification.permission === 'default') { diff --git a/src/client/pages/messaging.vue b/src/client/pages/messaging/index.vue similarity index 97% rename from src/client/pages/messaging.vue rename to src/client/pages/messaging/index.vue index 47d761d89511af1bdc1c06f191f8b0f3a8ce48fb..702979a0987116221b0b3642cef0ab123add4092 100644 --- a/src/client/pages/messaging.vue +++ b/src/client/pages/messaging/index.vue @@ -42,10 +42,10 @@ <script lang="ts"> import Vue from 'vue'; import { faUser, faUsers, faComments, faPlus } from '@fortawesome/free-solid-svg-icons'; -import i18n from '../i18n'; -import getAcct from '../../misc/acct/render'; -import MkButton from '../components/ui/button.vue'; -import MkUserSelect from '../components/user-select.vue'; +import i18n from '../../i18n'; +import getAcct from '../../../misc/acct/render'; +import MkButton from '../../components/ui/button.vue'; +import MkUserSelect from '../../components/user-select.vue'; export default Vue.extend({ i18n, diff --git a/src/client/pages/messaging-room.form.vue b/src/client/pages/messaging/messaging-room.form.vue similarity index 95% rename from src/client/pages/messaging-room.form.vue rename to src/client/pages/messaging/messaging-room.form.vue index 72e2632772a473679e630ac52f96955fd27d1bef..0cd3dfcc8580a395d331a7a51f980ffeaebf4acf 100644 --- a/src/client/pages/messaging-room.form.vue +++ b/src/client/pages/messaging/messaging-room.form.vue @@ -27,14 +27,14 @@ import Vue from 'vue'; import { faPaperPlane, faPhotoVideo, faLaughSquint } from '@fortawesome/free-solid-svg-icons'; import insertTextAtCursor from 'insert-text-at-cursor'; import * as autosize from 'autosize'; -import i18n from '../i18n'; -import { formatTimeString } from '../../misc/format-time-string'; -import { selectFile } from '../scripts/select-file'; +import i18n from '../../i18n'; +import { formatTimeString } from '../../../misc/format-time-string'; +import { selectFile } from '../../scripts/select-file'; export default Vue.extend({ i18n, components: { - XUploader: () => import('../components/uploader.vue').then(m => m.default), + XUploader: () => import('../../components/uploader.vue').then(m => m.default), }, props: { user: { @@ -221,7 +221,7 @@ export default Vue.extend({ }, async insertEmoji(ev) { - const vm = this.$root.new(await import('../components/emoji-picker.vue').then(m => m.default), { + const vm = this.$root.new(await import('../../components/emoji-picker.vue').then(m => m.default), { source: ev.currentTarget || ev.target }).$once('chosen', emoji => { insertTextAtCursor(this.$refs.text, emoji); diff --git a/src/client/pages/messaging-room.message.vue b/src/client/pages/messaging/messaging-room.message.vue similarity index 95% rename from src/client/pages/messaging-room.message.vue rename to src/client/pages/messaging/messaging-room.message.vue index f26ef449b261e06ccd5259ce4a45270f1afc7f21..4988b70a2242fb31e3646d78e43af2cef0917f5a 100644 --- a/src/client/pages/messaging-room.message.vue +++ b/src/client/pages/messaging/messaging-room.message.vue @@ -21,7 +21,7 @@ </div> </div> <div></div> - <mk-url-preview v-for="url in urls" :url="url" :key="url"/> + <mk-url-preview v-for="url in urls" :url="url" :key="url" style="margin: 8px 0;"/> <footer> <template v-if="isGroup"> <span class="read" v-if="message.reads.length > 0">{{ $t('messageRead') }} {{ message.reads.length }}</span> @@ -38,12 +38,16 @@ <script lang="ts"> import Vue from 'vue'; -import i18n from '../i18n'; -import { parse } from '../../mfm/parse'; -import { unique } from '../../prelude/array'; +import i18n from '../../i18n'; +import { parse } from '../../../mfm/parse'; +import { unique } from '../../../prelude/array'; +import MkUrlPreview from '../../components/url-preview.vue'; export default Vue.extend({ i18n, + components: { + MkUrlPreview + }, props: { message: { required: true @@ -223,10 +227,6 @@ export default Vue.extend({ } } - > .mk-url-preview { - margin: 8px 0; - } - > footer { display: block; margin: 2px 0 0 0; diff --git a/src/client/pages/messaging-room.vue b/src/client/pages/messaging/messaging-room.vue similarity index 98% rename from src/client/pages/messaging-room.vue rename to src/client/pages/messaging/messaging-room.vue index 5fca8c0ff34df4c996494624417f316ddc0224c0..0a20c56c292623308a2a7bccd6572e1a126c2e45 100644 --- a/src/client/pages/messaging-room.vue +++ b/src/client/pages/messaging/messaging-room.vue @@ -37,12 +37,12 @@ <script lang="ts"> import Vue from 'vue'; import { faArrowCircleDown, faFlag, faUsers, faInfoCircle } from '@fortawesome/free-solid-svg-icons'; -import i18n from '../i18n'; -import XList from '../components/date-separated-list.vue'; +import i18n from '../../i18n'; +import XList from '../../components/date-separated-list.vue'; import XMessage from './messaging-room.message.vue'; import XForm from './messaging-room.form.vue'; -import { url } from '../config'; -import parseAcct from '../../misc/acct/parse'; +import { url } from '../../config'; +import parseAcct from '../../../misc/acct/parse'; export default Vue.extend({ i18n, diff --git a/src/client/pages/preferences/index.vue b/src/client/pages/preferences/index.vue index 7cf6f4b4b2c5009ebb3b092a2775db0a30d2c2f3..2b1b3083a4569c40a9dfb501d8fed63173a850db 100644 --- a/src/client/pages/preferences/index.vue +++ b/src/client/pages/preferences/index.vue @@ -3,6 +3,8 @@ <portal to="icon"><fa :icon="faCog"/></portal> <portal to="title">{{ $t('clinetSettings') }}</portal> + <router-link v-if="$store.getters.isSignedIn" class="_panel _buttonPrimary" to="/my/settings" style="margin-bottom: var(--margin);">{{ $t('accountSettings') }}</router-link> + <x-theme/> <section class="_card"> diff --git a/src/client/router.ts b/src/client/router.ts index 3b2bbe9c808c45c72982d846ad6c98d9468c4ae3..83445fea7e8a5f0d5da0d464cf59aa869b5f7b95 100644 --- a/src/client/router.ts +++ b/src/client/router.ts @@ -31,9 +31,9 @@ export const router = new VueRouter({ { path: '/my/favorites', component: page('favorites') }, { path: '/my/messages', component: page('messages') }, { path: '/my/mentions', component: page('mentions') }, - { path: '/my/messaging', name: 'messaging', component: page('messaging') }, - { path: '/my/messaging/:user', component: page('messaging-room') }, - { path: '/my/messaging/group/:group', component: page('messaging-room') }, + { path: '/my/messaging', name: 'messaging', component: page('messaging/index') }, + { path: '/my/messaging/:user', component: page('messaging/messaging-room') }, + { path: '/my/messaging/group/:group', component: page('messaging/messaging-room') }, { path: '/my/drive', name: 'drive', component: page('drive') }, { path: '/my/drive/folder/:folder', component: page('drive') }, { path: '/my/pages', name: 'pages', component: page('pages') }, diff --git a/src/client/scripts/is-device-darkmode.ts b/src/client/scripts/is-device-darkmode.ts index 21c26823c7e5f8cbbc96d70581160f11e68b6309..854f38e5175a41d9c80e1ba6709aea525f61f740 100644 --- a/src/client/scripts/is-device-darkmode.ts +++ b/src/client/scripts/is-device-darkmode.ts @@ -1,3 +1,3 @@ export function isDeviceDarkmode() { - return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; + return window.matchMedia('(prefers-color-scheme: dark)').matches; } diff --git a/src/client/style.scss b/src/client/style.scss index fee64c7ca8a10e78173c108c77068a9c1335cfd3..7b509e5b51e5fdb35653535c4e41df76b8f93f94 100644 --- a/src/client/style.scss +++ b/src/client/style.scss @@ -292,7 +292,7 @@ main ._panel { box-shadow: 0 1px 0 0 var(--divider), 0 -1px 0 0 var(--divider); } -._panel._button { +.__panelButton { display: flex; width: 100%; min-height: 48px; @@ -300,6 +300,24 @@ main ._panel { justify-content: center; } +._panel._button { + @extend .__panelButton; +} + +._panel._buttonPrimary { + @extend .__panelButton; + color: var(--accent); + background: var(--panel); + + &:not(:disabled):hover { + background: var(--panel); + } + + &:not(:disabled):active { + background: var(--panel); + } +} + ._card { @extend ._panel;