浏览代码

feat: add inlang to make the contribution of translations easier (#2262)

* feat: add inlang.config.js

* inlang: update translations

* inlang: update translations

* inlang: update translations

* inlang: update translations

* inlang: update translations

* inlang: update translations

* inlang: update translations

* inlang: update translations

* inlang: update translations

---------

Co-authored-by: NilsJacobsen <>
Nils Jacobsen 2 年之前
父节点
当前提交
d5ccc20e04

+ 156 - 147
frontend/appflowy_flutter/assets/translations/de-DE.json

@@ -1,150 +1,159 @@
 {
-    "appName": "AppFlowy",
-    "defaultUsername": "Ich",
-    "welcomeText": "Willkommen bei @:appName",
-    "githubStarText": "GitHub Star vergeben",
-    "subscribeNewsletterText": "Abonniere den Newsletter",
-    "letsGoButtonText": "Los geht's",
-    "title": "Titel",
-    "signUp": {
-      "buttonText": "Registrieren",
-      "title": "Registriere dich bei @:appName",
-      "getStartedText": "Erste Schritte",
-      "emptyPasswordError": "Passwort darf nicht leer sein",
-      "repeatPasswordEmptyError": "Passwortwiederholung darf nicht leer sein",
-      "unmatchedPasswordError": "Passwörter stimmen nicht überein",
-      "alreadyHaveAnAccount": "Bereits registriert?",
-      "emailHint": "E-Mail",
-      "passwordHint": "Passwort",
-      "repeatPasswordHint": "Wiederhole Passwort"
-    },
-    "signIn": {
-      "loginTitle": "Bei @:appName einloggen",
-      "loginButtonText": "Anmelden",
-      "buttonText": "Anmelden",
-      "forgotPassword": "Passwort vergessen?",
-      "emailHint": "E-Mail",
-      "passwordHint": "Passwort",
-      "dontHaveAnAccount": "Du besitzt noch kein Konto?",
-      "repeatPasswordEmptyError": "Passwortwiederholung darf nicht leer sein",
-      "unmatchedPasswordError": "Passwörter stimmen nicht überein"
-    },
-    "workspace": {
-      "create": "Arbeitsbereich erstellen",
-      "hint": "Arbeitsbereich",
-      "notFoundError": "Arbeitsbereich nicht gefunden"
-    },
-    "shareAction": {
-      "buttonText": "Teilen",
-      "workInProgress": "Demnächst verfügbar",
-      "markdown": "Markdown",
-      "copyLink": "Link kopieren"
-    },
-    "disclosureAction": {
-      "rename": "Umbenennen",
-      "delete": "Löschen",
-      "duplicate": "Duplizieren"
-    },
-    "blankPageTitle": "Leere Seite",
-    "newPageText": "Neue Seite",
-    "trash": {
-      "text": "Papierkorb",
-      "restoreAll": "Alles wiederherstellen",
-      "deleteAll": "Alles löschen",
-      "pageHeader": {
-        "fileName": "Dateiname",
-        "lastModified": "Letzte Änderung",
-        "created": "Erstellt"
-      }
-    },
-    "deletePagePrompt": {
-      "text": "Diese Seite ist im Papierkorb",
-      "restore": "Seite wiederherstellen",
-      "deletePermanent": "Dauerhaft löschen"
-    },
-    "dialogCreatePageNameHint": "Seitenname",
-    "questionBubble": {
-      "whatsNew": "Was gibt es Neues?",
-      "help": "Hilfe & Support",
-      "debug": {
-        "name": "Debug-Informationen",
-        "success": "Debug-Informationen in die Zwischenablage kopiert!",
-        "fail": "Debug-Informationen können nicht in die Zwischenablage kopiert werden"
-      }
-    },
-    "menuAppHeader": {
-      "addPageTooltip": "Schnell eine Seite innerhalb hinzufügen",
-      "defaultNewPageName": "Unbenannt",
-      "renameDialog": "Umbenennen"
-    },
-    "toolbar": {
-      "undo": "Rückgängig",
-      "redo": "Wiederherstellen",
-      "bold": "Fett",
-      "italic": "Kursiv",
-      "underline": "Unterstreichen",
-      "strike": "Durchstreichen",
-      "numList": "Nummerierte Liste",
-      "bulletList": "Aufzählung",
-      "checkList": "Checkliste",
-      "inlineCode": "Inline-Code",
-      "quote": "Zitat",
-      "header": "Überschrift",
-      "highlight": "Hervorhebung"
-    },
-    "tooltip": {
-      "lightMode": "In den hellen Modus wechseln",
-      "darkMode": "In den dunklen Modus wechseln"
-    },
-    "contactsPage": {
-      "title": "Kontakte",
-      "whatsHappening": "Was geschieht diese Woche?",
-      "addContact": "Kontakt hinzufügen",
-      "editContact": "Kontakt bearbeiten"
-    },
-    "button": {
-      "OK": "OK",
-      "Cancel": "Abbrechen",
-      "signIn": "Anmelden",
-      "signOut": "Abmelden",
-      "complete": "Fertig",
-      "save": "Speichern"
-    },
-    "label": {
-      "welcome": "Willkommen!",
-      "firstName": "Vorname",
-      "middleName": "Zweiter Vorname",
-      "lastName": "Nachname",
-      "stepX": "Schritt {X}"
-    },
-    "oAuth": {
-      "err": {
-        "failedTitle": "Keine Verbindung zu Ihrem Konto möglich.",
-        "failedMsg": "Bitte vergewissern Sie sich, dass Sie den Anmeldevorgang in Ihrem Browser abgeschlossen haben."
-      },
-      "google": {
-        "title": "GOOGLE ANMELDUNG",
-        "instruction1": "Um Ihre Google-Kontakte zu importieren, müssen Sie diese Anwendung über Ihren Webbrowser autorisieren.",
-        "instruction2": "Kopieren Sie diesen Code in Ihre Zwischenablage, indem Sie auf das Symbol klicken oder den Text auswählen:",
-        "instruction3": "Rufen Sie den folgenden Link in Ihrem Webbrowser auf, und geben Sie den obigen Code ein:",
-        "instruction4": "Klicken Sie unten auf die Schaltfläche, wenn Sie die Anmeldung abgeschlossen haben:"
-      }
-    },
-    "settings": {
-      "title": "Einstellungen",
-      "menu": {
-        "appearance": "Aussehen",
-        "language": "Sprache",
-        "open": "Einstellungen öffnen"
-      },
-      "appearance": {
-        "lightLabel": "Heller Modus",
-        "darkLabel": "Dunkler Modus"
-      }
-    },
-    "sideBar": {
-      "openSidebar": "Open sidebar",
-      "closeSidebar": "Close sidebar"
+  "appName": "AppFlowy",
+  "defaultUsername": "Ich",
+  "welcomeText": "Willkommen bei @:appName",
+  "githubStarText": "GitHub Star vergeben",
+  "subscribeNewsletterText": "Abonniere den Newsletter",
+  "letsGoButtonText": "Los geht's",
+  "title": "Titel",
+  "signUp": {
+    "buttonText": "Registrieren",
+    "title": "Registriere dich bei @:appName",
+    "getStartedText": "Erste Schritte",
+    "emptyPasswordError": "Passwort darf nicht leer sein",
+    "repeatPasswordEmptyError": "Passwortwiederholung darf nicht leer sein",
+    "unmatchedPasswordError": "Passwörter stimmen nicht überein",
+    "alreadyHaveAnAccount": "Bereits registriert?",
+    "emailHint": "E-Mail",
+    "passwordHint": "Passwort",
+    "repeatPasswordHint": "Wiederhole Passwort"
+  },
+  "signIn": {
+    "loginTitle": "Bei @:appName einloggen",
+    "loginButtonText": "Anmelden",
+    "buttonText": "Anmelden",
+    "forgotPassword": "Passwort vergessen?",
+    "emailHint": "E-Mail",
+    "passwordHint": "Passwort",
+    "dontHaveAnAccount": "Du besitzt noch kein Konto?",
+    "repeatPasswordEmptyError": "Passwortwiederholung darf nicht leer sein",
+    "unmatchedPasswordError": "Passwörter stimmen nicht überein"
+  },
+  "workspace": {
+    "create": "Arbeitsbereich erstellen",
+    "hint": "Arbeitsbereich",
+    "notFoundError": "Arbeitsbereich nicht gefunden"
+  },
+  "shareAction": {
+    "buttonText": "Teilen",
+    "workInProgress": "Demnächst verfügbar",
+    "markdown": "Markdown",
+    "copyLink": "Link kopieren"
+  },
+  "disclosureAction": {
+    "rename": "Umbenennen",
+    "delete": "Löschen",
+    "duplicate": "Duplizieren"
+  },
+  "blankPageTitle": "Leere Seite",
+  "newPageText": "Neue Seite",
+  "trash": {
+    "text": "Papierkorb",
+    "restoreAll": "Alles wiederherstellen",
+    "deleteAll": "Alles löschen",
+    "pageHeader": {
+      "fileName": "Dateiname",
+      "lastModified": "Letzte Änderung",
+      "created": "Erstellt"
+    }
+  },
+  "deletePagePrompt": {
+    "text": "Diese Seite ist im Papierkorb",
+    "restore": "Seite wiederherstellen",
+    "deletePermanent": "Dauerhaft löschen"
+  },
+  "dialogCreatePageNameHint": "Seitenname",
+  "questionBubble": {
+    "whatsNew": "Was gibt es Neues?",
+    "help": "Hilfe & Support",
+    "debug": {
+      "name": "Debug-Informationen",
+      "success": "Debug-Informationen in die Zwischenablage kopiert!",
+      "fail": "Debug-Informationen können nicht in die Zwischenablage kopiert werden"
+    },
+    "shortcuts": "Abkürzungen"
+  },
+  "menuAppHeader": {
+    "addPageTooltip": "Schnell eine Seite innerhalb hinzufügen",
+    "defaultNewPageName": "Unbenannt",
+    "renameDialog": "Umbenennen"
+  },
+  "toolbar": {
+    "undo": "Rückgängig",
+    "redo": "Wiederherstellen",
+    "bold": "Fett",
+    "italic": "Kursiv",
+    "underline": "Unterstreichen",
+    "strike": "Durchstreichen",
+    "numList": "Nummerierte Liste",
+    "bulletList": "Aufzählung",
+    "checkList": "Checkliste",
+    "inlineCode": "Inline-Code",
+    "quote": "Zitat",
+    "header": "Überschrift",
+    "highlight": "Hervorhebung",
+    "color": "Farbe"
+  },
+  "tooltip": {
+    "lightMode": "In den hellen Modus wechseln",
+    "darkMode": "In den dunklen Modus wechseln",
+    "openAsPage": "Als Seite öffnen"
+  },
+  "contactsPage": {
+    "title": "Kontakte",
+    "whatsHappening": "Was geschieht diese Woche?",
+    "addContact": "Kontakt hinzufügen",
+    "editContact": "Kontakt bearbeiten"
+  },
+  "button": {
+    "OK": "OK",
+    "Cancel": "Abbrechen",
+    "signIn": "Anmelden",
+    "signOut": "Abmelden",
+    "complete": "Fertig",
+    "save": "Speichern"
+  },
+  "label": {
+    "welcome": "Willkommen!",
+    "firstName": "Vorname",
+    "middleName": "Zweiter Vorname",
+    "lastName": "Nachname",
+    "stepX": "Schritt {X}"
+  },
+  "oAuth": {
+    "err": {
+      "failedTitle": "Keine Verbindung zu Ihrem Konto möglich.",
+      "failedMsg": "Bitte vergewissern Sie sich, dass Sie den Anmeldevorgang in Ihrem Browser abgeschlossen haben."
+    },
+    "google": {
+      "title": "GOOGLE ANMELDUNG",
+      "instruction1": "Um Ihre Google-Kontakte zu importieren, müssen Sie diese Anwendung über Ihren Webbrowser autorisieren.",
+      "instruction2": "Kopieren Sie diesen Code in Ihre Zwischenablage, indem Sie auf das Symbol klicken oder den Text auswählen:",
+      "instruction3": "Rufen Sie den folgenden Link in Ihrem Webbrowser auf, und geben Sie den obigen Code ein:",
+      "instruction4": "Klicken Sie unten auf die Schaltfläche, wenn Sie die Anmeldung abgeschlossen haben:"
+    }
+  },
+  "settings": {
+    "title": "Einstellungen",
+    "menu": {
+      "appearance": "Aussehen",
+      "language": "Sprache",
+      "open": "Einstellungen öffnen"
+    },
+    "appearance": {
+      "lightLabel": "Heller Modus",
+      "darkLabel": "Dunkler Modus"
     }
+  },
+  "sideBar": {
+    "openSidebar": "Open sidebar",
+    "closeSidebar": "Close sidebar"
+  },
+  "moreAction": {
+    "small": "klein",
+    "medium": "mittel",
+    "large": "groß",
+    "fontSize": "Schriftgröße",
+    "import": "Importieren"
   }
-  
+}

+ 3 - 3
frontend/appflowy_flutter/assets/translations/en.json

@@ -385,8 +385,8 @@
         "couldNotFetchImage": "Could not fetch image",
         "imageSavingFailed": "Image Saving Failed",
         "addIcon": "Add Icon",
-        "coverRemoveAlert" : "It will be removed from cover after it is deleted.",
-        "alertDialogConfirmation" : "Are you sure, you want to continue?"
+        "coverRemoveAlert": "It will be removed from cover after it is deleted.",
+        "alertDialogConfirmation": "Are you sure, you want to continue?"
       }
     }
   },
@@ -413,4 +413,4 @@
       "layoutDateField": "Layout calendar by"
     }
   }
-}
+}

+ 1 - 1
frontend/appflowy_flutter/assets/translations/eu-ES.json

@@ -330,4 +330,4 @@
       "nextMonth": "Hurrengo hilabetea"
     }
   }
-}
+}

+ 3 - 3
frontend/appflowy_flutter/assets/translations/pt-BR.json

@@ -39,7 +39,7 @@
     "workInProgress": "Em breve",
     "markdown": "Marcador",
     "copyLink": "Copiar link"
-    },
+  },
   "moreAction": {
     "small": "pequeno",
     "medium": "médio",
@@ -177,7 +177,7 @@
         "system": "Adaptar-se ao sistema"
       },
       "theme": "Tema"
-  },
+    },
     "files": {
       "defaultLocation": "Onde os seus dados ficam armazenados",
       "doubleTapToCopy": "Clique duas vezes para copiar o caminho",
@@ -320,7 +320,7 @@
       "pannelTitle": "Escolha uma opção ou crie uma",
       "searchOption": "Procurar uma opção"
     },
-        "checklist": {
+    "checklist": {
       "panelTitle": "Adicionar um item"
     },
     "menuName": "Grade"

+ 146 - 147
frontend/appflowy_flutter/assets/translations/pt-PT.json

@@ -1,150 +1,149 @@
 {
-    "appName": "AppFlowy",
-    "defaultUsername": "Me",
-    "welcomeText": "Bem vindo ao @:appName",
-    "githubStarText": "Star on GitHub",
-    "subscribeNewsletterText": "Inscreve-te ao Newsletter",
-    "letsGoButtonText": "Bora",
-    "title": "Título",
-    "signUp": {
-      "buttonText": "Inscreve-te",
-      "title": "Inscreve-te ao @:appName",
-      "getStartedText": "Começar",
-      "emptyPasswordError": "A palavra-passe não pode estar em branco.",
-      "repeatPasswordEmptyError": "Confirmar a palavra-passe não pode estar em branco.",
-      "unmatchedPasswordError": "As palavras-passes não coincidem.",
-      "alreadyHaveAnAccount": "Já possuis uma conta?",
-      "emailHint": "Email",
-      "passwordHint": "Password",
-      "repeatPasswordHint": "Confirma a tua password"
-    },
-    "signIn": {
-      "loginTitle": "Entre no @:appName",
-      "loginButtonText": "Login",
-      "buttonText": "Entre",
-      "forgotPassword": "Esqueceste-te da tua palavra-passe?",
-      "emailHint": "Email",
-      "passwordHint": "Palavra-passe",
-      "dontHaveAnAccount": "Não possuis uma conta?",
-      "repeatPasswordEmptyError": "Confirmar a palavra-passe não pode estar em branco.",
-      "unmatchedPasswordError": "As palavras-passes não conferem."
-    },
-    "workspace": {
-      "create": "Cria um ambiente de trabalho",
-      "hint": "ambiente de trabalho",
-      "notFoundError": "Ambiente de trabalho não encontrada"
-    },
-    "shareAction": {
-      "buttonText": "Partilhar",
-      "workInProgress": "Em breve",
-      "markdown": "Markdown",
-      "copyLink": "Copiar o link"
-    },
-    "disclosureAction": {
-      "rename": "Renomear",
-      "delete": "Apagar",
-      "duplicate": "Duplicar"
-    },
-    "blankPageTitle": "Página em branco",
-    "newPageText": "Nova página",
-    "trash": {
-      "text": "Lixo",
-      "restoreAll": "Restaurar todos",
-      "deleteAll": "Apagar todos",
-      "pageHeader": {
-        "fileName": "Nome do ficheiro",
-        "lastModified": "Última modificação",
-        "created": "Criado"
-      }
-    },
-    "deletePagePrompt": {
-      "text": "Esta página está no lixo",
-      "restore": "Restaurar a página",
-      "deletePermanent": "Apagar permanentemente"
-    },
-    "dialogCreatePageNameHint": "Nome da página",
-    "questionBubble": {
-      "whatsNew": "O que há de novo?",
-      "help": "Ajuda & Suporte",
-      "debug": {
-        "name": "Informação de depuração",
-        "success": "Copiar informação de depuração para o clipboard!",
-        "fail": "Falha em copiar a informação de depuração para o clipboard"
-      }
-    },
-    "menuAppHeader": {
-      "addPageTooltip": "Adiciona uma nova página.",
-      "defaultNewPageName": "Sem título",
-      "renameDialog": "Renomear"
-    },
-    "toolbar": {
-      "undo": "Desfazer",
-      "redo": "Refazer",
-      "bold": "Negrito",
-      "italic": "Itálico",
-      "underline": "Sublinhado",
-      "strike": "Riscado",
-      "numList": "Lista numerada",
-      "bulletList": "Lista com marcadores",
-      "checkList": "Lista de verificação",
-      "inlineCode": "Embutir código",
-      "quote": "Citação em bloco",
-      "header": "Cabeçalho",
-      "highlight": "Realçar"
-    },
-    "tooltip": {
-      "lightMode": "Mudar para o modo Claro.",
-      "darkMode": "Mudar para o modo Escuro."
-    },
-    "contactsPage": {
-      "title": "Conctatos",
-      "whatsHappening": "O que está a acontecer nesta semana?",
-      "addContact": "Adicionar um conctato",
-      "editContact": "Editar um conctato"
-    },
-    "button": {
-      "OK": "OK",
-      "Cancel": "Cancelar",
-      "signIn": "Entrar",
-      "signOut": "Sair",
-      "complete": "Completar",
-      "save": "Guardar"
-    },
-    "label": {
-      "welcome": "Bem vindo!",
-      "firstName": "Nome",
-      "middleName": "Nome do Meio",
-      "lastName": "Apelido",
-      "stepX": "Passo {X}"
-    },
-    "oAuth": {
-      "err": {
-        "failedTitle": "Erro ao conectar à sua conta.",
-        "failedMsg": "Verifica se concluiste o processo de login no teu navegador."
-      },
-      "google": {
-        "title": "GOOGLE SIGN-IN",
-        "instruction1": "Para importar os teus Conctatos do Google, tens de autorizar esta aplicação usando o teu navegador web.",
-        "instruction2": "Copia este código para a tua área de transferências clicando no ícone ou selecionando o texto:",
-        "instruction3": "Navega até o link a seguir no seu navegador e digite o código acima:",
-        "instruction4": "Clica no botão abaixo ao concluir a inscrição:"
-      }
-    },
-    "settings": {
-      "title": "Definições",
-      "menu": {
-        "appearance": "Aparência",
-        "language": "Idioma",
-        "open": "Abrir as Definições"
-      },
-      "appearance": {
-        "lightLabel": "Modo Claro",
-        "darkLabel": "Modo Escuro"
-      }
-    },
-    "sideBar": {
-      "openSidebar": "Open sidebar",
-      "closeSidebar": "Close sidebar"
+  "appName": "AppFlowy",
+  "defaultUsername": "Me",
+  "welcomeText": "Bem vindo ao @:appName",
+  "githubStarText": "Star on GitHub",
+  "subscribeNewsletterText": "Inscreve-te ao Newsletter",
+  "letsGoButtonText": "Bora",
+  "title": "Título",
+  "signUp": {
+    "buttonText": "Inscreve-te",
+    "title": "Inscreve-te ao @:appName",
+    "getStartedText": "Começar",
+    "emptyPasswordError": "A palavra-passe não pode estar em branco.",
+    "repeatPasswordEmptyError": "Confirmar a palavra-passe não pode estar em branco.",
+    "unmatchedPasswordError": "As palavras-passes não coincidem.",
+    "alreadyHaveAnAccount": "Já possuis uma conta?",
+    "emailHint": "Email",
+    "passwordHint": "Password",
+    "repeatPasswordHint": "Confirma a tua password"
+  },
+  "signIn": {
+    "loginTitle": "Entre no @:appName",
+    "loginButtonText": "Login",
+    "buttonText": "Entre",
+    "forgotPassword": "Esqueceste-te da tua palavra-passe?",
+    "emailHint": "Email",
+    "passwordHint": "Palavra-passe",
+    "dontHaveAnAccount": "Não possuis uma conta?",
+    "repeatPasswordEmptyError": "Confirmar a palavra-passe não pode estar em branco.",
+    "unmatchedPasswordError": "As palavras-passes não conferem."
+  },
+  "workspace": {
+    "create": "Cria um ambiente de trabalho",
+    "hint": "ambiente de trabalho",
+    "notFoundError": "Ambiente de trabalho não encontrada"
+  },
+  "shareAction": {
+    "buttonText": "Partilhar",
+    "workInProgress": "Em breve",
+    "markdown": "Markdown",
+    "copyLink": "Copiar o link"
+  },
+  "disclosureAction": {
+    "rename": "Renomear",
+    "delete": "Apagar",
+    "duplicate": "Duplicar"
+  },
+  "blankPageTitle": "Página em branco",
+  "newPageText": "Nova página",
+  "trash": {
+    "text": "Lixo",
+    "restoreAll": "Restaurar todos",
+    "deleteAll": "Apagar todos",
+    "pageHeader": {
+      "fileName": "Nome do ficheiro",
+      "lastModified": "Última modificação",
+      "created": "Criado"
+    }
+  },
+  "deletePagePrompt": {
+    "text": "Esta página está no lixo",
+    "restore": "Restaurar a página",
+    "deletePermanent": "Apagar permanentemente"
+  },
+  "dialogCreatePageNameHint": "Nome da página",
+  "questionBubble": {
+    "whatsNew": "O que há de novo?",
+    "help": "Ajuda & Suporte",
+    "debug": {
+      "name": "Informação de depuração",
+      "success": "Copiar informação de depuração para o clipboard!",
+      "fail": "Falha em copiar a informação de depuração para o clipboard"
+    }
+  },
+  "menuAppHeader": {
+    "addPageTooltip": "Adiciona uma nova página.",
+    "defaultNewPageName": "Sem título",
+    "renameDialog": "Renomear"
+  },
+  "toolbar": {
+    "undo": "Desfazer",
+    "redo": "Refazer",
+    "bold": "Negrito",
+    "italic": "Itálico",
+    "underline": "Sublinhado",
+    "strike": "Riscado",
+    "numList": "Lista numerada",
+    "bulletList": "Lista com marcadores",
+    "checkList": "Lista de verificação",
+    "inlineCode": "Embutir código",
+    "quote": "Citação em bloco",
+    "header": "Cabeçalho",
+    "highlight": "Realçar"
+  },
+  "tooltip": {
+    "lightMode": "Mudar para o modo Claro.",
+    "darkMode": "Mudar para o modo Escuro."
+  },
+  "contactsPage": {
+    "title": "Conctatos",
+    "whatsHappening": "O que está a acontecer nesta semana?",
+    "addContact": "Adicionar um conctato",
+    "editContact": "Editar um conctato"
+  },
+  "button": {
+    "OK": "OK",
+    "Cancel": "Cancelar",
+    "signIn": "Entrar",
+    "signOut": "Sair",
+    "complete": "Completar",
+    "save": "Guardar"
+  },
+  "label": {
+    "welcome": "Bem vindo!",
+    "firstName": "Nome",
+    "middleName": "Nome do Meio",
+    "lastName": "Apelido",
+    "stepX": "Passo {X}"
+  },
+  "oAuth": {
+    "err": {
+      "failedTitle": "Erro ao conectar à sua conta.",
+      "failedMsg": "Verifica se concluiste o processo de login no teu navegador."
+    },
+    "google": {
+      "title": "GOOGLE SIGN-IN",
+      "instruction1": "Para importar os teus Conctatos do Google, tens de autorizar esta aplicação usando o teu navegador web.",
+      "instruction2": "Copia este código para a tua área de transferências clicando no ícone ou selecionando o texto:",
+      "instruction3": "Navega até o link a seguir no seu navegador e digite o código acima:",
+      "instruction4": "Clica no botão abaixo ao concluir a inscrição:"
+    }
+  },
+  "settings": {
+    "title": "Definições",
+    "menu": {
+      "appearance": "Aparência",
+      "language": "Idioma",
+      "open": "Abrir as Definições"
+    },
+    "appearance": {
+      "lightLabel": "Modo Claro",
+      "darkLabel": "Modo Escuro"
     }
+  },
+  "sideBar": {
+    "openSidebar": "Open sidebar",
+    "closeSidebar": "Close sidebar"
   }
-
+}

+ 348 - 348
frontend/appflowy_flutter/assets/translations/ru-RU.json

@@ -1,348 +1,348 @@
-{
-    "appName": "AppFlowy",
-    "defaultUsername": "Я",
-    "welcomeText": "Добро пожаловать в @:appName",
-    "githubStarText": "Поставить звезду на GitHub",
-    "subscribeNewsletterText": "Подписаться на рассылку",
-    "letsGoButtonText": "Начнём",
-    "title": "Заголовок",
-    "signUp": {
-        "buttonText": "Зарегистрироваться",
-        "title": "Регистрация в @:appName",
-        "getStartedText": "Начать",
-        "emptyPasswordError": "Пароль не может быть пустым",
-        "repeatPasswordEmptyError": "Повтор пароля не может быть пустым",
-        "unmatchedPasswordError": "Пароли не совпадают",
-        "alreadyHaveAnAccount": "Уже есть аккаунт?",
-        "emailHint": "Электронная почта",
-        "passwordHint": "Пароль",
-        "repeatPasswordHint": "Повторите пароль"
-    },
-    "signIn": {
-        "loginTitle": "Войти в @:appName",
-        "loginButtonText": "Войти",
-        "buttonText": "Авторизация",
-        "forgotPassword": "Забыли пароль?",
-        "emailHint": "Электронная почта",
-        "passwordHint": "Пароль",
-        "dontHaveAnAccount": "Нет аккаунта?",
-        "repeatPasswordEmptyError": "Повтор пароля не может быть пустым",
-        "unmatchedPasswordError": "Пароли не совпадают"
-    },
-    "workspace": {
-        "create": "Создать рабочее пространство",
-        "hint": "рабочее пространство",
-        "notFoundError": "Нет такого рабочего пространства"
-    },
-    "shareAction": {
-        "buttonText": "Поделиться",
-        "workInProgress": "В разработке",
-        "markdown": "Markdown",
-        "copyLink": "Скопировать ссылку"
-    },
-    "moreAction": {
-        "small": "маленький",
-        "medium": "средний",
-        "large": "большой",
-        "fontSize": "Размер шрифта"
-    },
-    "disclosureAction": {
-        "rename": "Переименовать",
-        "delete": "Удалить",
-        "duplicate": "Дублировать"
-    },
-    "blankPageTitle": "Пустая страница",
-    "newPageText": "Новая страница",
-    "trash": {
-        "text": "Корзина",
-        "restoreAll": "Восстановить всё",
-        "deleteAll": "Очистить",
-        "pageHeader": {
-            "fileName": "Имя",
-            "lastModified": "Последнее изменение",
-            "created": "Создан"
-        }
-    },
-    "deletePagePrompt": {
-        "text": "Эта страница в Корзине",
-        "restore": "Восстановить страницу",
-        "deletePermanent": "Удалить навсегда"
-    },
-    "dialogCreatePageNameHint": "Имя страницы",
-    "questionBubble": {
-        "whatsNew": "Что нового?",
-        "help": "Помощь",
-        "debug": {
-            "name": "Отладочная информация",
-            "success": "Скопировано в буфер обмена!",
-            "fail": "Не получилось скопировать"
-        }
-    },
-    "menuAppHeader": {
-        "addPageTooltip": "Быстро добавить новую страницу",
-        "defaultNewPageName": "Без заголовка",
-        "renameDialog": "Переименовать"
-    },
-    "toolbar": {
-        "undo": "Отменить",
-        "redo": "Повторить",
-        "bold": "Жирный",
-        "italic": "Курсив",
-        "underline": "Подчёркнутый",
-        "strike": "Зачёркнутый",
-        "numList": "Нумерованный список",
-        "bulletList": "Маркированный список",
-        "checkList": "Список To-Do",
-        "inlineCode": "Код",
-        "quote": "Цитата",
-        "header": "Заголовок",
-        "highlight": "Выделение",
-        "color": "Цвет"
-    },
-    "tooltip": {
-        "lightMode": "Переключить на светлую тему",
-        "darkMode": "Переключить на тёмную тему",
-        "openAsPage": "Открыть как страницу",
-        "addNewRow": "Добавить новую строку",
-        "openMenu": "Открыть меню",
-        "viewDataBase": "Просмотр базы данных",
-        "referencePage": "Ссылаются на {name}"
-    },
-    "sideBar": {
-        "closeSidebar": "Закрыть боковое меню",
-        "openSidebar": "Открыть боковое меню"
-    },
-    "notifications": {
-        "export": {
-            "markdown": "Заметка экспортирована в Markdown",
-            "path": "Документы/flowy"
-        }
-    },
-    "contactsPage": {
-        "title": "Контакты",
-        "whatsHappening": "Какие события на этой неделе?",
-        "addContact": "Добавить контакт",
-        "editContact": "Редактировать контакт"
-    },
-    "button": {
-        "OK": "OK",
-        "Cancel": "Отмена",
-        "signIn": "Войти",
-        "signOut": "Выйти",
-        "complete": "Завершить",
-        "save": "Сохранить"
-    },
-    "label": {
-        "welcome": "Добро пожаловать!",
-        "firstName": "Имя",
-        "middleName": "Отчество",
-        "lastName": "Фамилия",
-        "stepX": "Этап {X}"
-    },
-    "oAuth": {
-        "err": {
-            "failedTitle": "Не удалось подключиться к вашей учетной записи.",
-            "failedMsg": "Убедитесь, что вы завершили вход в своём браузере."
-        },
-        "google": {
-            "title": "Вход через Google",
-            "instruction1": "Чтобы импортировать ваши Google Контакты, вам нужно будет авторизовать приложение через браузер.",
-            "instruction2": "Скопируйте этот код в буфер обмена (нажав кнопку или выделив текст):",
-            "instruction3": "Пройдите по ссылке и введите этот код:",
-            "instruction4": "Нажмите на кнопку ниже, когда завершите вход:"
-        }
-    },
-    "settings": {
-        "title": "Настройки",
-        "menu": {
-            "appearance": "Внешний вид",
-            "language": "Язык",
-            "user": "Пользователь",
-            "files": "Файлы",
-            "open": "Открыть настройки"
-        },
-        "appearance": {
-            "themeMode": {
-                "label": "Режим темы",
-                "light": "Светлая",
-                "dark": "Тёмная",
-                "system": "Системная"
-            },
-            "theme": "Тема"
-        },
-        "files": {
-            "defaultLocation": "Где сейчас хранятся ваши данные",
-            "doubleTapToCopy": "Нажмите дважды, чтобы скопировать путь",
-            "restoreLocation": "Восстановить путь AppFlowy по умолчанию",
-            "customizeLocation": "Открыть другую папку",
-            "restartApp": "Пожалуйста, перезапустите приложение, чтобы изменения вступили в силу.",
-            "exportDatabase": "Экспорт базы данных",
-            "selectFiles": "Выбрать файлы, которые необходимо экспортировать",
-            "createNewFolder": "Создать новую папку",
-            "createNewFolderDesc": "Указать, где хранить свои данные ...",
-            "open": "Открыть",
-            "openFolder": "Открыть существующую папку",
-            "openFolderDesc": "Чтение и запись в существующую папку AppFlowy ...",
-            "folderHintText": "имя папки",
-            "location": "Создание новой папки",
-            "locationDesc": "Выбрать имя папки данных AppFlowy",
-            "browser": "Обзор",
-            "create": "Создать",
-            "folderPath": "Путь к вашей папке",
-            "locationCannotBeEmpty": "Путь не может быть пустым"
-        }
-    },
-    "grid": {
-        "settings": {
-            "filter": "Фильтр",
-            "sort": "Сортировать",
-            "sortBy": "Сортировать по",
-            "Properties": "Свойства",
-            "group": "Группировать",
-            "addFilter": "Добавить фильтр",
-            "deleteFilter": "Удалить фильтр",
-            "filterBy": "Фильтровать по...",
-            "typeAValue": "Введите значение..."
-        },
-        "textFilter": {
-            "contains": "Содержит",
-            "doesNotContain": "Не содержит",
-            "endsWith": "Заканчивается на",
-            "startWith": "Начинается с",
-            "is": "Является",
-            "isNot": "Не является",
-            "isEmpty": "Пусто",
-            "isNotEmpty": "Не пусто",
-            "choicechipPrefix": {
-                "isNot": "Не является",
-                "startWith": "Начинается с",
-                "endWith": "Заканчивается на",
-                "isEmpty": "пусто",
-                "isNotEmpty": "не пусто"
-            }
-        },
-        "checkboxFilter": {
-            "isChecked": "Отмечено",
-            "isUnchecked": "Не отмечено",
-            "choicechipPrefix": {
-                "is": "является"
-            }
-        },
-        "checklistFilter": {
-            "isComplete": "завершено",
-            "isIncomplted": "не завершено"
-        },
-        "singleSelectOptionFilter": {
-            "is": "Является",
-            "isNot": "Не является",
-            "isEmpty": "Пусто",
-            "isNotEmpty": "Не пусто"
-        },
-        "multiSelectOptionFilter": {
-            "contains": "Содержит",
-            "doesNotContain": "Не содержит",
-            "isEmpty": "Пусто",
-            "isNotEmpty": "Не пусто"
-        },
-        "field": {
-            "hide": "Скрыть",
-            "insertLeft": "Вставить слева",
-            "insertRight": "Вставить справа",
-            "duplicate": "Дублировать",
-            "delete": "Удалить",
-            "textFieldName": "Текст",
-            "checkboxFieldName": "Чекбокс",
-            "dateFieldName": "Дата",
-            "numberFieldName": "Число",
-            "singleSelectFieldName": "Выбор",
-            "multiSelectFieldName": "Выбор нескольких",
-            "urlFieldName": "URL",
-            "checklistFieldName": "Контрольный список",
-            "numberFormat": "Формат числа",
-            "dateFormat": "Формат даты",
-            "includeTime": "Время",
-            "dateFormatFriendly": "День Месяц, Год",
-            "dateFormatISO": "Год-Месяц-День",
-            "dateFormatLocal": "Месяц/День/Год",
-            "dateFormatUS": "Год/Месяц/День",
-            "timeFormat": "Форматировать время",
-            "invalidTimeFormat": "Неверный формат",
-            "timeFormatTwelveHour": "12 часов",
-            "timeFormatTwentyFourHour": "24 часа",
-            "addSelectOption": "Добавить вариант",
-            "optionTitle": "Варианты",
-            "addOption": "Добавить",
-            "editProperty": "Редактировать свойство",
-            "newProperty": "Добавить колонку",
-            "deleteFieldPromptMessage": "Вы уверены? Свойство будет удалено"
-        },
-        "sort": {
-            "ascending": "По возрастанию",
-            "descending": "По убыванию",
-            "deleteSort": "Удалить сортировку",
-            "addSort": "Добавить сортировку"
-        },
-        "row": {
-            "duplicate": "Дублировать",
-            "delete": "Удалить",
-            "textPlaceholder": "Пусто",
-            "copyProperty": "Свойство скопировано",
-            "count": "Количество",
-            "newRow": "Новая строка"
-        },
-        "selectOption": {
-            "create": "Создать",
-            "purpleColor": "Фиолетовый",
-            "pinkColor": "Розовый",
-            "lightPinkColor": "Светло-розовый",
-            "orangeColor": "Оранжевый",
-            "yellowColor": "Желтый",
-            "limeColor": "Ярко-зелёный",
-            "greenColor": "Зелёный",
-            "aquaColor": "Бирюзовый",
-            "blueColor": "Синий",
-            "deleteTag": "Удалить вариант",
-            "colorPanelTitle": "Цвета",
-            "panelTitle": "Выберите или создайте вариант",
-            "searchOption": "Поиск"
-        },
-        "checklist": {
-            "panelTitle": "Добавить элемент"
-        },
-        "menuName": "Сетка"
-    },
-    "document": {
-        "menuName": "Документ",
-        "date": {
-            "timeHintTextInTwelveHour": "01:00 PM",
-            "timeHintTextInTwentyFourHour": "13:00"
-        },
-        "slashMenu": {
-            "board": {
-                "selectABoardToLinkTo": "Выбрать доску для связи с"
-            },
-            "grid": {
-                "selectAGridToLinkTo": "Выберите сетку для связи с"
-            }
-        },
-        "plugins": {
-            "referencedBoard": "Связанные доски",
-            "referencedGrid": "Связанные сетки"
-        }
-    },
-    "board": {
-        "column": {
-            "create_new_card": "Создать"
-        },
-        "menuName": "Доска"
-    },
-    "calendar": {
-        "menuName": "Календарь",
-        "navigation": {
-            "today": "Сегодня",
-            "jumpToday": "Перейти к сегодняшнему дню",
-            "previousMonth": "Предыдущий месяц",
-            "nextMonth": "Следующий месяц"
-        }
-    }
-}
+{
+  "appName": "AppFlowy",
+  "defaultUsername": "Я",
+  "welcomeText": "Добро пожаловать в @:appName",
+  "githubStarText": "Поставить звезду на GitHub",
+  "subscribeNewsletterText": "Подписаться на рассылку",
+  "letsGoButtonText": "Начнём",
+  "title": "Заголовок",
+  "signUp": {
+    "buttonText": "Зарегистрироваться",
+    "title": "Регистрация в @:appName",
+    "getStartedText": "Начать",
+    "emptyPasswordError": "Пароль не может быть пустым",
+    "repeatPasswordEmptyError": "Повтор пароля не может быть пустым",
+    "unmatchedPasswordError": "Пароли не совпадают",
+    "alreadyHaveAnAccount": "Уже есть аккаунт?",
+    "emailHint": "Электронная почта",
+    "passwordHint": "Пароль",
+    "repeatPasswordHint": "Повторите пароль"
+  },
+  "signIn": {
+    "loginTitle": "Войти в @:appName",
+    "loginButtonText": "Войти",
+    "buttonText": "Авторизация",
+    "forgotPassword": "Забыли пароль?",
+    "emailHint": "Электронная почта",
+    "passwordHint": "Пароль",
+    "dontHaveAnAccount": "Нет аккаунта?",
+    "repeatPasswordEmptyError": "Повтор пароля не может быть пустым",
+    "unmatchedPasswordError": "Пароли не совпадают"
+  },
+  "workspace": {
+    "create": "Создать рабочее пространство",
+    "hint": "рабочее пространство",
+    "notFoundError": "Нет такого рабочего пространства"
+  },
+  "shareAction": {
+    "buttonText": "Поделиться",
+    "workInProgress": "В разработке",
+    "markdown": "Markdown",
+    "copyLink": "Скопировать ссылку"
+  },
+  "moreAction": {
+    "small": "маленький",
+    "medium": "средний",
+    "large": "большой",
+    "fontSize": "Размер шрифта"
+  },
+  "disclosureAction": {
+    "rename": "Переименовать",
+    "delete": "Удалить",
+    "duplicate": "Дублировать"
+  },
+  "blankPageTitle": "Пустая страница",
+  "newPageText": "Новая страница",
+  "trash": {
+    "text": "Корзина",
+    "restoreAll": "Восстановить всё",
+    "deleteAll": "Очистить",
+    "pageHeader": {
+      "fileName": "Имя",
+      "lastModified": "Последнее изменение",
+      "created": "Создан"
+    }
+  },
+  "deletePagePrompt": {
+    "text": "Эта страница в Корзине",
+    "restore": "Восстановить страницу",
+    "deletePermanent": "Удалить навсегда"
+  },
+  "dialogCreatePageNameHint": "Имя страницы",
+  "questionBubble": {
+    "whatsNew": "Что нового?",
+    "help": "Помощь",
+    "debug": {
+      "name": "Отладочная информация",
+      "success": "Скопировано в буфер обмена!",
+      "fail": "Не получилось скопировать"
+    }
+  },
+  "menuAppHeader": {
+    "addPageTooltip": "Быстро добавить новую страницу",
+    "defaultNewPageName": "Без заголовка",
+    "renameDialog": "Переименовать"
+  },
+  "toolbar": {
+    "undo": "Отменить",
+    "redo": "Повторить",
+    "bold": "Жирный",
+    "italic": "Курсив",
+    "underline": "Подчёркнутый",
+    "strike": "Зачёркнутый",
+    "numList": "Нумерованный список",
+    "bulletList": "Маркированный список",
+    "checkList": "Список To-Do",
+    "inlineCode": "Код",
+    "quote": "Цитата",
+    "header": "Заголовок",
+    "highlight": "Выделение",
+    "color": "Цвет"
+  },
+  "tooltip": {
+    "lightMode": "Переключить на светлую тему",
+    "darkMode": "Переключить на тёмную тему",
+    "openAsPage": "Открыть как страницу",
+    "addNewRow": "Добавить новую строку",
+    "openMenu": "Открыть меню",
+    "viewDataBase": "Просмотр базы данных",
+    "referencePage": "Ссылаются на {name}"
+  },
+  "sideBar": {
+    "closeSidebar": "Закрыть боковое меню",
+    "openSidebar": "Открыть боковое меню"
+  },
+  "notifications": {
+    "export": {
+      "markdown": "Заметка экспортирована в Markdown",
+      "path": "Документы/flowy"
+    }
+  },
+  "contactsPage": {
+    "title": "Контакты",
+    "whatsHappening": "Какие события на этой неделе?",
+    "addContact": "Добавить контакт",
+    "editContact": "Редактировать контакт"
+  },
+  "button": {
+    "OK": "OK",
+    "Cancel": "Отмена",
+    "signIn": "Войти",
+    "signOut": "Выйти",
+    "complete": "Завершить",
+    "save": "Сохранить"
+  },
+  "label": {
+    "welcome": "Добро пожаловать!",
+    "firstName": "Имя",
+    "middleName": "Отчество",
+    "lastName": "Фамилия",
+    "stepX": "Этап {X}"
+  },
+  "oAuth": {
+    "err": {
+      "failedTitle": "Не удалось подключиться к вашей учетной записи.",
+      "failedMsg": "Убедитесь, что вы завершили вход в своём браузере."
+    },
+    "google": {
+      "title": "Вход через Google",
+      "instruction1": "Чтобы импортировать ваши Google Контакты, вам нужно будет авторизовать приложение через браузер.",
+      "instruction2": "Скопируйте этот код в буфер обмена (нажав кнопку или выделив текст):",
+      "instruction3": "Пройдите по ссылке и введите этот код:",
+      "instruction4": "Нажмите на кнопку ниже, когда завершите вход:"
+    }
+  },
+  "settings": {
+    "title": "Настройки",
+    "menu": {
+      "appearance": "Внешний вид",
+      "language": "Язык",
+      "user": "Пользователь",
+      "files": "Файлы",
+      "open": "Открыть настройки"
+    },
+    "appearance": {
+      "themeMode": {
+        "label": "Режим темы",
+        "light": "Светлая",
+        "dark": "Тёмная",
+        "system": "Системная"
+      },
+      "theme": "Тема"
+    },
+    "files": {
+      "defaultLocation": "Где сейчас хранятся ваши данные",
+      "doubleTapToCopy": "Нажмите дважды, чтобы скопировать путь",
+      "restoreLocation": "Восстановить путь AppFlowy по умолчанию",
+      "customizeLocation": "Открыть другую папку",
+      "restartApp": "Пожалуйста, перезапустите приложение, чтобы изменения вступили в силу.",
+      "exportDatabase": "Экспорт базы данных",
+      "selectFiles": "Выбрать файлы, которые необходимо экспортировать",
+      "createNewFolder": "Создать новую папку",
+      "createNewFolderDesc": "Указать, где хранить свои данные ...",
+      "open": "Открыть",
+      "openFolder": "Открыть существующую папку",
+      "openFolderDesc": "Чтение и запись в существующую папку AppFlowy ...",
+      "folderHintText": "имя папки",
+      "location": "Создание новой папки",
+      "locationDesc": "Выбрать имя папки данных AppFlowy",
+      "browser": "Обзор",
+      "create": "Создать",
+      "folderPath": "Путь к вашей папке",
+      "locationCannotBeEmpty": "Путь не может быть пустым"
+    }
+  },
+  "grid": {
+    "settings": {
+      "filter": "Фильтр",
+      "sort": "Сортировать",
+      "sortBy": "Сортировать по",
+      "Properties": "Свойства",
+      "group": "Группировать",
+      "addFilter": "Добавить фильтр",
+      "deleteFilter": "Удалить фильтр",
+      "filterBy": "Фильтровать по...",
+      "typeAValue": "Введите значение..."
+    },
+    "textFilter": {
+      "contains": "Содержит",
+      "doesNotContain": "Не содержит",
+      "endsWith": "Заканчивается на",
+      "startWith": "Начинается с",
+      "is": "Является",
+      "isNot": "Не является",
+      "isEmpty": "Пусто",
+      "isNotEmpty": "Не пусто",
+      "choicechipPrefix": {
+        "isNot": "Не является",
+        "startWith": "Начинается с",
+        "endWith": "Заканчивается на",
+        "isEmpty": "пусто",
+        "isNotEmpty": "не пусто"
+      }
+    },
+    "checkboxFilter": {
+      "isChecked": "Отмечено",
+      "isUnchecked": "Не отмечено",
+      "choicechipPrefix": {
+        "is": "является"
+      }
+    },
+    "checklistFilter": {
+      "isComplete": "завершено",
+      "isIncomplted": "не завершено"
+    },
+    "singleSelectOptionFilter": {
+      "is": "Является",
+      "isNot": "Не является",
+      "isEmpty": "Пусто",
+      "isNotEmpty": "Не пусто"
+    },
+    "multiSelectOptionFilter": {
+      "contains": "Содержит",
+      "doesNotContain": "Не содержит",
+      "isEmpty": "Пусто",
+      "isNotEmpty": "Не пусто"
+    },
+    "field": {
+      "hide": "Скрыть",
+      "insertLeft": "Вставить слева",
+      "insertRight": "Вставить справа",
+      "duplicate": "Дублировать",
+      "delete": "Удалить",
+      "textFieldName": "Текст",
+      "checkboxFieldName": "Чекбокс",
+      "dateFieldName": "Дата",
+      "numberFieldName": "Число",
+      "singleSelectFieldName": "Выбор",
+      "multiSelectFieldName": "Выбор нескольких",
+      "urlFieldName": "URL",
+      "checklistFieldName": "Контрольный список",
+      "numberFormat": "Формат числа",
+      "dateFormat": "Формат даты",
+      "includeTime": "Время",
+      "dateFormatFriendly": "День Месяц, Год",
+      "dateFormatISO": "Год-Месяц-День",
+      "dateFormatLocal": "Месяц/День/Год",
+      "dateFormatUS": "Год/Месяц/День",
+      "timeFormat": "Форматировать время",
+      "invalidTimeFormat": "Неверный формат",
+      "timeFormatTwelveHour": "12 часов",
+      "timeFormatTwentyFourHour": "24 часа",
+      "addSelectOption": "Добавить вариант",
+      "optionTitle": "Варианты",
+      "addOption": "Добавить",
+      "editProperty": "Редактировать свойство",
+      "newProperty": "Добавить колонку",
+      "deleteFieldPromptMessage": "Вы уверены? Свойство будет удалено"
+    },
+    "sort": {
+      "ascending": "По возрастанию",
+      "descending": "По убыванию",
+      "deleteSort": "Удалить сортировку",
+      "addSort": "Добавить сортировку"
+    },
+    "row": {
+      "duplicate": "Дублировать",
+      "delete": "Удалить",
+      "textPlaceholder": "Пусто",
+      "copyProperty": "Свойство скопировано",
+      "count": "Количество",
+      "newRow": "Новая строка"
+    },
+    "selectOption": {
+      "create": "Создать",
+      "purpleColor": "Фиолетовый",
+      "pinkColor": "Розовый",
+      "lightPinkColor": "Светло-розовый",
+      "orangeColor": "Оранжевый",
+      "yellowColor": "Желтый",
+      "limeColor": "Ярко-зелёный",
+      "greenColor": "Зелёный",
+      "aquaColor": "Бирюзовый",
+      "blueColor": "Синий",
+      "deleteTag": "Удалить вариант",
+      "colorPanelTitle": "Цвета",
+      "panelTitle": "Выберите или создайте вариант",
+      "searchOption": "Поиск"
+    },
+    "checklist": {
+      "panelTitle": "Добавить элемент"
+    },
+    "menuName": "Сетка"
+  },
+  "document": {
+    "menuName": "Документ",
+    "date": {
+      "timeHintTextInTwelveHour": "01:00 PM",
+      "timeHintTextInTwentyFourHour": "13:00"
+    },
+    "slashMenu": {
+      "board": {
+        "selectABoardToLinkTo": "Выбрать доску для связи с"
+      },
+      "grid": {
+        "selectAGridToLinkTo": "Выберите сетку для связи с"
+      }
+    },
+    "plugins": {
+      "referencedBoard": "Связанные доски",
+      "referencedGrid": "Связанные сетки"
+    }
+  },
+  "board": {
+    "column": {
+      "create_new_card": "Создать"
+    },
+    "menuName": "Доска"
+  },
+  "calendar": {
+    "menuName": "Календарь",
+    "navigation": {
+      "today": "Сегодня",
+      "jumpToday": "Перейти к сегодняшнему дню",
+      "previousMonth": "Предыдущий месяц",
+      "nextMonth": "Следующий месяц"
+    }
+  }
+}

+ 29 - 0
inlang.config.js

@@ -0,0 +1,29 @@
+
+// @ts-check
+
+/**
+ * @type { import("@inlang/core/config").DefineConfig }
+ */
+export async function defineConfig(env) {
+  const plugin = await env.$import(
+    "https://cdn.jsdelivr.net/gh/samuelstroschein/[email protected]/dist/index.js"
+  );
+
+  const { default: standardLintRules } = await env.$import(
+    "https://cdn.jsdelivr.net/gh/inlang/[email protected]/dist/index.js"
+  );
+
+  const pluginConfig = {
+    pathPattern: "./frontend/appflowy_flutter/assets/translations/{language}.json",
+  };
+
+  return {
+    referenceLanguage: "en",
+    languages: await plugin.getLanguages({ ...env, pluginConfig }),
+    readResources: (args) => plugin.readResources({ ...args, ...env, pluginConfig }),
+    writeResources: (args) => plugin.writeResources({ ...args, ...env, pluginConfig }),
+    lint: {
+      rules: [standardLintRules()],
+    },
+  };
+}