Translations cleaning / workflows (#10125)
This commit is contained in:
48
.github/workflows/i18n-compile.yaml
vendored
Normal file
48
.github/workflows/i18n-compile.yaml
vendored
Normal file
@ -0,0 +1,48 @@
|
||||
name: 'Compile translations'
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ['i18n']
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
compile_translations:
|
||||
name: Compile translations
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
token: ${{ github.token }}
|
||||
ref: i18n
|
||||
|
||||
- name: Install dependencies
|
||||
uses: ./.github/workflows/actions/yarn-install
|
||||
|
||||
- name: Build twenty-shared
|
||||
run: npx nx build twenty-shared
|
||||
|
||||
- name: Compile translations
|
||||
id: compile_translations
|
||||
run: |
|
||||
npx nx run twenty-server:lingui:compile
|
||||
npx nx run twenty-emails:lingui:compile
|
||||
npx nx run twenty-front:lingui:compile
|
||||
|
||||
- name: Check and commit compiled files
|
||||
run: |
|
||||
git config --global user.name 'github-actions'
|
||||
git config --global user.email 'github-actions@twenty.com'
|
||||
git add .
|
||||
if ! git diff --staged --quiet --exit-code; then
|
||||
git commit -m "chore: compile translations"
|
||||
git push origin HEAD:i18n
|
||||
fi
|
||||
71
.github/workflows/i18n-force-pull.yml
vendored
71
.github/workflows/i18n-force-pull.yml
vendored
@ -1,71 +0,0 @@
|
||||
# This is similar to the "Pull Translations" workflow, but without the conditional check to allow us to
|
||||
# forcefully pull down translations from Crowdin and create a PR regardless if all the translations are fulfilled.
|
||||
#
|
||||
# Intended to be used when we manually update translations in Crowdin UI and want to pull those down when
|
||||
# they already exist.
|
||||
|
||||
name: 'Force pull translations'
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
workflow_call:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
pull_translations:
|
||||
name: Force pull translations
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
token: ${{ github.token }}
|
||||
ref: ${{ github.head_ref || github.ref_name }}
|
||||
|
||||
- name: Install dependencies
|
||||
uses: ./.github/workflows/actions/yarn-install
|
||||
|
||||
- name: Build twenty-shared
|
||||
run: npx nx build twenty-shared
|
||||
|
||||
- name: Pull translations from Crowdin
|
||||
uses: crowdin/github-action@v2
|
||||
with:
|
||||
upload_sources: false
|
||||
upload_translations: false
|
||||
download_translations: true
|
||||
export_only_approved: false
|
||||
localization_branch_name: chore/translations
|
||||
commit_message: 'chore: add translations'
|
||||
pull_request_title: 'chore: add translations'
|
||||
base_url: 'https://twenty.api.crowdin.com'
|
||||
|
||||
env:
|
||||
# A classic GitHub Personal Access Token with the 'repo' scope selected (the user should have write access to the repository).
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
|
||||
# A numeric ID, found at https://crowdin.com/project/<projectName>/tools/api
|
||||
CROWDIN_PROJECT_ID: '1'
|
||||
|
||||
# Visit https://crowdin.com/settings#api-key to create this token
|
||||
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||
|
||||
- name: Compile and commit updated translations
|
||||
run: |
|
||||
git fetch origin chore/translations
|
||||
git checkout chore/translations
|
||||
npx nx run twenty-server:lingui:compile
|
||||
npx nx run twenty-emails:lingui:compile
|
||||
npx nx run twenty-front:lingui:compile
|
||||
git config --global user.name 'Crowdin Bot'
|
||||
git config --global user.email 'support+bot@crowdin.com'
|
||||
git add .
|
||||
git commit -m "chore: compile translations"
|
||||
git push origin chore/translations
|
||||
35
.github/workflows/i18n-pull.yaml
vendored
35
.github/workflows/i18n-pull.yaml
vendored
@ -1,4 +1,5 @@
|
||||
# Pull down translations from Crowdin every two hours or when triggered manually.
|
||||
# When force_pull input is true, translations will be pulled regardless of compilation status.
|
||||
|
||||
name: 'Pull translations'
|
||||
|
||||
@ -6,7 +7,19 @@ on:
|
||||
schedule:
|
||||
- cron: '0 */2 * * *' # Every two hours.
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
force_pull:
|
||||
description: 'Force pull translations regardless of compilation status'
|
||||
required: false
|
||||
type: boolean
|
||||
default: false
|
||||
workflow_call:
|
||||
inputs:
|
||||
force_pull:
|
||||
description: 'Force pull translations regardless of compilation status'
|
||||
required: false
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||
@ -43,16 +56,16 @@ jobs:
|
||||
continue-on-error: true
|
||||
|
||||
- name: Pull translations from Crowdin
|
||||
if: steps.compile_translations.outcome == 'failure'
|
||||
if: inputs.force_pull || steps.compile_translations.outcome == 'failure'
|
||||
uses: crowdin/github-action@v2
|
||||
with:
|
||||
upload_sources: false
|
||||
upload_translations: false
|
||||
download_translations: true
|
||||
export_only_approved: false
|
||||
localization_branch_name: chore/translations
|
||||
commit_message: 'chore: add translations'
|
||||
pull_request_title: 'chore: add translations'
|
||||
localization_branch_name: i18n
|
||||
commit_message: 'i18n - translations'
|
||||
pull_request_title: 'i18n - translations'
|
||||
base_url: 'https://twenty.api.crowdin.com'
|
||||
auto_approve_imported: false
|
||||
import_eq_suggestions: false
|
||||
@ -72,17 +85,3 @@ jobs:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
CROWDIN_PROJECT_ID: '1'
|
||||
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||
|
||||
- name: Compile and commit updated translations
|
||||
if: steps.compile_translations.outcome == 'failure'
|
||||
run: |
|
||||
git fetch origin chore/translations
|
||||
git checkout chore/translations
|
||||
npx nx run twenty-server:lingui:compile
|
||||
npx nx run twenty-emails:lingui:compile
|
||||
npx nx run twenty-front:lingui:compile
|
||||
git config --global user.name 'Crowdin Bot'
|
||||
git config --global user.email 'support+bot@crowdin.com'
|
||||
git add .
|
||||
git commit -m "chore: compile translations"
|
||||
git push origin chore/translations
|
||||
@ -1,4 +1,4 @@
|
||||
name: 'Extract and upload translations'
|
||||
name: 'Extract translations when there is a push to main, and upload them to Crowdin'
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
@ -21,7 +21,13 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
token: ${{ github.token }}
|
||||
ref: ${{ github.head_ref || github.ref_name }}
|
||||
ref: i18n
|
||||
|
||||
- name: Merge main into i18n
|
||||
run: |
|
||||
git fetch origin main
|
||||
git checkout i18n
|
||||
git merge main
|
||||
|
||||
- name: Install dependencies
|
||||
uses: ./.github/workflows/actions/yarn-install
|
||||
@ -36,31 +42,27 @@ jobs:
|
||||
npx nx run twenty-front:lingui:extract
|
||||
|
||||
- name: Check and commit any files created
|
||||
id: check_changes
|
||||
run: |
|
||||
git config --global user.name 'github-actions'
|
||||
git config --global user.email 'github-actions@twenty.com'
|
||||
git add .
|
||||
if ! git diff --staged --quiet --exit-code; then
|
||||
git commit -m "chore: extract translations"
|
||||
git push origin HEAD:${{ github.head_ref || github.ref_name }}
|
||||
git push origin HEAD:i18n
|
||||
echo "changes_detected=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "changes_detected=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Compile translations
|
||||
id: compile_translations
|
||||
run: |
|
||||
npx nx run twenty-server:lingui:compile
|
||||
npx nx run twenty-emails:lingui:compile
|
||||
npx nx run twenty-front:lingui:compile
|
||||
continue-on-error: true
|
||||
|
||||
- name: Upload missing translations
|
||||
if: ${{ steps.compile_translations.outcome == 'failure' }}
|
||||
if: steps.check_changes.outputs.changes_detected == 'true'
|
||||
uses: crowdin/github-action@v2
|
||||
with:
|
||||
upload_sources: true
|
||||
upload_translations: true
|
||||
download_translations: false
|
||||
localization_branch_name: chore/translations
|
||||
localization_branch_name: i18n
|
||||
base_url: 'https://twenty.api.crowdin.com'
|
||||
env:
|
||||
# A numeric ID, found at https://crowdin.com/project/<projectName>/tools/api
|
||||
@ -68,3 +70,9 @@ jobs:
|
||||
|
||||
# Visit https://crowdin.com/settings#api-key to create this token
|
||||
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||
|
||||
- name: Create a pull request
|
||||
if: steps.check_changes.outputs.changes_detected == 'true'
|
||||
run: gh pr create -B main -H i18n --title 'i18n - translations' --body 'Created by Github action' || true
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@ -5,17 +5,36 @@ import { PropsWithChildren } from 'react';
|
||||
|
||||
import { BaseHead } from 'src/components/BaseHead';
|
||||
import { Logo } from 'src/components/Logo';
|
||||
import { APP_LOCALES } from 'twenty-shared';
|
||||
import { APP_LOCALES, SOURCE_LOCALE } from 'twenty-shared';
|
||||
import { messages as afMessages } from '../locales/generated/af-ZA';
|
||||
import { messages as arMessages } from '../locales/generated/ar-SA';
|
||||
import { messages as caMessages } from '../locales/generated/ca-ES';
|
||||
import { messages as csMessages } from '../locales/generated/cs-CZ';
|
||||
import { messages as daMessages } from '../locales/generated/da-DK';
|
||||
import { messages as deMessages } from '../locales/generated/de-DE';
|
||||
import { messages as elMessages } from '../locales/generated/el-GR';
|
||||
import { messages as enMessages } from '../locales/generated/en';
|
||||
import { messages as esMessages } from '../locales/generated/es-ES';
|
||||
import { messages as fiMessages } from '../locales/generated/fi-FI';
|
||||
import { messages as frMessages } from '../locales/generated/fr-FR';
|
||||
import { messages as heMessages } from '../locales/generated/he-IL';
|
||||
import { messages as huMessages } from '../locales/generated/hu-HU';
|
||||
import { messages as itMessages } from '../locales/generated/it-IT';
|
||||
import { messages as jaMessages } from '../locales/generated/ja-JP';
|
||||
import { messages as koMessages } from '../locales/generated/ko-KR';
|
||||
import { messages as nlMessages } from '../locales/generated/nl-NL';
|
||||
import { messages as noMessages } from '../locales/generated/no-NO';
|
||||
import { messages as plMessages } from '../locales/generated/pl-PL';
|
||||
import { messages as pseudoEnMessages } from '../locales/generated/pseudo-en';
|
||||
import { messages as ptBRMessages } from '../locales/generated/pt-BR';
|
||||
import { messages as ptPTMessages } from '../locales/generated/pt-PT';
|
||||
import { messages as roMessages } from '../locales/generated/ro-RO';
|
||||
import { messages as ruMessages } from '../locales/generated/ru-RU';
|
||||
import { messages as srMessages } from '../locales/generated/sr-Cyrl';
|
||||
import { messages as svMessages } from '../locales/generated/sv-SE';
|
||||
import { messages as trMessages } from '../locales/generated/tr-TR';
|
||||
import { messages as ukMessages } from '../locales/generated/uk-UA';
|
||||
import { messages as viMessages } from '../locales/generated/vi-VN';
|
||||
import { messages as zhHansMessages } from '../locales/generated/zh-CN';
|
||||
import { messages as zhHantMessages } from '../locales/generated/zh-TW';
|
||||
|
||||
@ -23,17 +42,37 @@ type BaseEmailProps = PropsWithChildren<{
|
||||
width?: number;
|
||||
locale: keyof typeof APP_LOCALES;
|
||||
}>;
|
||||
|
||||
const messages: Record<keyof typeof APP_LOCALES, Messages> = {
|
||||
en: enMessages,
|
||||
'pseudo-en': pseudoEnMessages,
|
||||
'fr-FR': frMessages,
|
||||
'ko-KR': koMessages,
|
||||
'af-ZA': afMessages,
|
||||
'ar-SA': arMessages,
|
||||
'ca-ES': caMessages,
|
||||
'cs-CZ': csMessages,
|
||||
'da-DK': daMessages,
|
||||
'de-DE': deMessages,
|
||||
'it-IT': itMessages,
|
||||
'el-GR': elMessages,
|
||||
'es-ES': esMessages,
|
||||
'fi-FI': fiMessages,
|
||||
'fr-FR': frMessages,
|
||||
'he-IL': heMessages,
|
||||
'hu-HU': huMessages,
|
||||
'it-IT': itMessages,
|
||||
'ja-JP': jaMessages,
|
||||
'pt-PT': ptPTMessages,
|
||||
'ko-KR': koMessages,
|
||||
'nl-NL': nlMessages,
|
||||
'no-NO': noMessages,
|
||||
'pl-PL': plMessages,
|
||||
'pt-BR': ptBRMessages,
|
||||
'pt-PT': ptPTMessages,
|
||||
'ro-RO': roMessages,
|
||||
'ru-RU': ruMessages,
|
||||
'sr-Cyrl': srMessages,
|
||||
'sv-SE': svMessages,
|
||||
'tr-TR': trMessages,
|
||||
'uk-UA': ukMessages,
|
||||
'vi-VN': viMessages,
|
||||
'zh-CN': zhHansMessages,
|
||||
'zh-TW': zhHantMessages,
|
||||
};
|
||||
@ -44,7 +83,7 @@ const messages: Record<keyof typeof APP_LOCALES, Messages> = {
|
||||
},
|
||||
);
|
||||
|
||||
i18n.activate('en');
|
||||
i18n.activate(SOURCE_LOCALE);
|
||||
|
||||
export const BaseEmail = ({ children, width, locale }: BaseEmailProps) => {
|
||||
i18n.activate(locale);
|
||||
|
||||
1
packages/twenty-emails/src/locales/generated/af-ZA.ts
Normal file
1
packages/twenty-emails/src/locales/generated/af-ZA.ts
Normal file
@ -0,0 +1 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Aanvaar uitnodiging\"],\"Yxj+Uc\":[\"Alle data in hierdie werkruimte is permanent verwyder.\"],\"RPHFhC\":[\"Bevestig jou e-posadres\"],\"nvkBPN\":[\"Konnekteer met Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Liewe \",[\"userName\"]],\"tGme7M\":[\"het jou genooi om aan te sluit by 'n werkruimte genaamd \"],\"uzTaYi\":[\"Hallo\"],\"eE1nG1\":[\"As jy nie hierdie verandering geïnisieer het nie, kontak asseblief jou werkruimte-eienaar dadelik.\"],\"Gz91L8\":[\"As jy wil voortgaan om Twenty te gebruik, moet asseblief jou intekening binne die volgende \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\" opdateer.\"],\"0weyko\":[\"As jy Twenty weer wil gebruik, kan jy 'n nuwe werkruimte skep.\"],\"7JuhZQ\":[\"Dit blyk dat jou werkruimte <0>\",[\"workspaceDisplayName\"],\"</0> vir \",[\"daysSinceInactive\"],\" dae opgeskort is.\"],\"PviVyk\":[\"Sluit aan by jou span op Twenty\"],\"ogtYkT\":[\"Wagwoord opgedateer\"],\"OfhWJH\":[\"Stel terug\"],\"RE5NiU\":[\"Stel jou wagwoord terug 🗝\"],\"7yDt8q\":[\"Dankie dat jy registreer het vir 'n rekening op Twenty! Voordat ons begin, moet ons net bevestig dat dit jy is. Klik bo om jou e-posadres te verifieer.\"],\"igorB1\":[\"Die werkruimte sal gedeaktiveer word in \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\", en al sy data sal verwyder word.\"],\"7OEHy1\":[\"Dit is 'n bevestiging dat die wagwoord vir jou rekening (\",[\"email\"],\") suksesvol verander is op \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Hierdie skakel is slegs geldig vir die volgende \",[\"duration\"],\". Indien die skakel nie werk nie, kan jy die aanmeldverifiëringskakel direk gebruik:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Opdateer jou intekening\"],\"wCKkSr\":[\"Verifieer E-pos\"],\"KFmFrQ\":[\"Jou werkruimte <0>\",[\"workspaceDisplayName\"],\"</0> is verwyder aangesien jou intekening \",[\"inactiveDaysBeforeDelete\"],\" dae gelede verval het.\"]}")as Messages;
|
||||
1
packages/twenty-emails/src/locales/generated/ar-SA.ts
Normal file
1
packages/twenty-emails/src/locales/generated/ar-SA.ts
Normal file
@ -0,0 +1 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"قبول الدعوة\"],\"Yxj+Uc\":[\"تم حذف جميع البيانات في هذه الواجهة بشكل دائم.\"],\"RPHFhC\":[\"تأكد من عنوان بريدك الإلكتروني\"],\"nvkBPN\":[\"الاتصال بـ Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"عزيزي \",[\"userName\"]],\"tGme7M\":[\"لقد دُعيت للإنضمام إلى مساحة عمل تسمى \"],\"uzTaYi\":[\"مرحبًا\"],\"eE1nG1\":[\"إذا لم تكن قد بدأت هذا التغيير، يرجى الاتصال بمالك مساحة العمل الخاصة بك على الفور.\"],\"Gz91L8\":[\"إذا كنت ترغب في الاستمرار في استخدام Twenty، يُرجى تحديث اشتراكك خلال الأيام \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\" القادمة.\"],\"0weyko\":[\"إذا كنت ترغب في استخدام Twenty مرة أخرى، يمكنك إنشاء مساحة عمل جديدة.\"],\"7JuhZQ\":[\"يبدو أن مساحة عملك <0>\",[\"workspaceDisplayName\"],\"</0> قد تم تعليقها لمدة \",[\"daysSinceInactive\"],\" أيام.\"],\"PviVyk\":[\"انضم إلى فريقك في Twenty\"],\"ogtYkT\":[\"تم تحديث كلمة المرور\"],\"OfhWJH\":[\"إعادة تعيين\"],\"RE5NiU\":[\"إعادة تعيين كلمة مرورك 🗝\"],\"7yDt8q\":[\"شكراً لتسجيلك لحساب على Twenty! قبل أن نبدأ، نحتاج فقط إلى التأكد من أن هذا أنت. انقر أعلاه للتحقق من عنوان بريدك الإلكتروني.\"],\"igorB1\":[\"سيتم تعطيل مساحة العمل في غضون \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\"، وسيتم حذف كل بياناتها.\"],\"7OEHy1\":[\"هذا تأكيد أن كلمة مرور حسابك (\",[\"email\"],\") قد تم تغييرها بنجاح في \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"هذا الرابط صالح فقط للمدة \",[\"duration\"],\" القادمة. إذا لم يعمل الرابط، يمكنك استخدام رابط التحقق من تسجيل الدخول مباشرة:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"تحديث الاشتراك\"],\"wCKkSr\":[\"تحقق من البريد الإلكتروني\"],\"KFmFrQ\":[\"تم حذف مساحة العمل <0>\",[\"workspaceDisplayName\"],\"</0> كون اشتراكك قد انتهى منذ \",[\"inactiveDaysBeforeDelete\"],\" أيام.\"]}")as Messages;
|
||||
1
packages/twenty-emails/src/locales/generated/ca-ES.ts
Normal file
1
packages/twenty-emails/src/locales/generated/ca-ES.ts
Normal file
@ -0,0 +1 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Accept invite\"],\"Yxj+Uc\":[\"All data in this workspace has been permanently deleted.\"],\"RPHFhC\":[\"Confirm your email address\"],\"nvkBPN\":[\"Connect to Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Dear \",[\"userName\"]],\"tGme7M\":[\"has invited you to join a workspace called \"],\"uzTaYi\":[\"Hello\"],\"eE1nG1\":[\"If you did not initiate this change, please contact your workspace owner immediately.\"],\"Gz91L8\":[\"If you wish to continue using Twenty, please update your subscription within the next \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\".\"],\"0weyko\":[\"If you wish to use Twenty again, you can create a new workspace.\"],\"7JuhZQ\":[\"It appears that your workspace <0>\",[\"workspaceDisplayName\"],\"</0> has been suspended for \",[\"daysSinceInactive\"],\" days.\"],\"PviVyk\":[\"Join your team on Twenty\"],\"ogtYkT\":[\"Password updated\"],\"OfhWJH\":[\"Reset\"],\"RE5NiU\":[\"Reset your password 🗝\"],\"7yDt8q\":[\"Thanks for registering for an account on Twenty! Before we get started, we just need to confirm that this is you. Click above to verify your email address.\"],\"igorB1\":[\"The workspace will be deactivated in \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\", and all its data will be deleted.\"],\"7OEHy1\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Update your subscription\"],\"wCKkSr\":[\"Verify Email\"],\"KFmFrQ\":[\"Your workspace <0>\",[\"workspaceDisplayName\"],\"</0> has been deleted as your subscription expired \",[\"inactiveDaysBeforeDelete\"],\" days ago.\"]}")as Messages;
|
||||
1
packages/twenty-emails/src/locales/generated/cs-CZ.ts
Normal file
1
packages/twenty-emails/src/locales/generated/cs-CZ.ts
Normal file
@ -0,0 +1 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Přijměte pozvánku\"],\"Yxj+Uc\":[\"Všechna data v tomto pracovním prostoru byla trvale odstraněna.\"],\"RPHFhC\":[\"Potvrďte svou e-mailovou adresu\"],\"nvkBPN\":[\"Připojte se k Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Vážený \",[\"userName\"]],\"tGme7M\":[\"vás pozval do pracovního prostoru s názvem \"],\"uzTaYi\":[\"Dobrý den\"],\"eE1nG1\":[\"Pokud jste tuto změnu neiniciovali, prosím, okamžitě kontaktujte majitele vašeho pracovního prostoru.\"],\"Gz91L8\":[\"Pokud si přejete dále používat Twenty, prosím, aktualizujte své předplatné během příštích \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\".\"],\"0weyko\":[\"Pokud si přejete znovu použít Twenty, můžete vytvořit nový pracovní prostor.\"],\"7JuhZQ\":[\"Zdá se, že váš pracovní prostor <0>\",[\"workspaceDisplayName\"],\"</0> byl pozastaven na dobu \",[\"daysSinceInactive\"],\" dní.\"],\"PviVyk\":[\"Připojte se k svému týmu na Twenty\"],\"ogtYkT\":[\"Heslo bylo aktualizováno\"],\"OfhWJH\":[\"Obnovit\"],\"RE5NiU\":[\"Obnovte své heslo 🗝\"],\"7yDt8q\":[\"Děkujeme za registraci účtu na Twenty! Než začneme, musíme potvrdit, že jste to vy. Klikněte výše k ověření vaší e-mailové adresy.\"],\"igorB1\":[\"Pracovní prostor bude deaktivován za \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\" a všechna jeho data budou smazána.\"],\"7OEHy1\":[\"Toto je potvrzení, že heslo k vašemu účtu (\",[\"email\"],\") bylo úspěšně změněno \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Tento odkaz je platný pouze následující \",[\"duration\"],\". Pokud odkaz nefunguje, můžete přímo použít odkaz pro ověření přihlášení:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Aktualizujte své předplatné\"],\"wCKkSr\":[\"Ověřit e-mail\"],\"KFmFrQ\":[\"Váš pracovní prostor <0>\",[\"workspaceDisplayName\"],\"</0> byl odstraněn, protože vaše předplatné vypršelo před \",[\"inactiveDaysBeforeDelete\"],\" dny.\"]}")as Messages;
|
||||
1
packages/twenty-emails/src/locales/generated/da-DK.ts
Normal file
1
packages/twenty-emails/src/locales/generated/da-DK.ts
Normal file
@ -0,0 +1 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Accepter invitation\"],\"Yxj+Uc\":[\"Alle data i dette arbejdsområde er blevet permanent slettet.\"],\"RPHFhC\":[\"Bekræft din e-mailadresse\"],\"nvkBPN\":[\"Forbind til Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Kære \",[\"userName\"]],\"tGme7M\":[\"har inviteret dig til at deltage i et arbejdsområde kaldet \"],\"uzTaYi\":[\"Hej\"],\"eE1nG1\":[\"Hvis du ikke har initieret denne ændring, bedes du straks kontakte ejeren af dit arbejdsområde.\"],\"Gz91L8\":[\"Hvis du ønsker at fortsætte med at bruge Twenty, opdater da dit abonnement inden for de næste \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\".\"],\"0weyko\":[\"Hvis du ønsker at bruge Twenty igen, kan du oprette et nyt arbejdsområde.\"],\"7JuhZQ\":[\"Det ser ud til, at dit arbejdsområde <0>\",[\"workspaceDisplayName\"],\"</0> er blevet suspenderet i \",[\"daysSinceInactive\"],\" dage.\"],\"PviVyk\":[\"Deltag i dit team på Twenty\"],\"ogtYkT\":[\"Adgangskode opdateret\"],\"OfhWJH\":[\"Nulstil\"],\"RE5NiU\":[\"Nulstil din adgangskode 🗝\"],\"7yDt8q\":[\"Tak fordi du har registreret en konto på Twenty! Før vi starter, skal vi bare bekræfte, at det er dig. Klik ovenfor for at bekræfte din e-mailadresse.\"],\"igorB1\":[\"Arbejdsområdet vil blive deaktiveret om \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\", og alle dens data vil blive slettet.\"],\"7OEHy1\":[\"Dette er en bekræftelse på, at adgangskoden til din konto (\",[\"email\"],\") er blevet ændret den \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Dette link er kun gyldigt i de næste \",[\"duration\"],\". Hvis linket ikke fungerer, kan du bruge loginbekræftelseslinket direkte:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Opdater dit abonnement\"],\"wCKkSr\":[\"Bekræft e-mail\"],\"KFmFrQ\":[\"Dit arbejdsområde <0>\",[\"workspaceDisplayName\"],\"</0> er blevet slettet, da dit abonnement udløb for \",[\"inactiveDaysBeforeDelete\"],\" dage siden.\"]}")as Messages;
|
||||
1
packages/twenty-emails/src/locales/generated/el-GR.ts
Normal file
1
packages/twenty-emails/src/locales/generated/el-GR.ts
Normal file
@ -0,0 +1 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Αποδοχή πρόσκλησης\"],\"Yxj+Uc\":[\"Όλα τα δεδομένα σε αυτόν τον χώρο εργασίας έχουν διαγραφεί μόνιμα.\"],\"RPHFhC\":[\"Επιβεβαιώστε τη διεύθυνση email σας\"],\"nvkBPN\":[\"Συνδεθείτε στο Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Αγαπητέ/ή \",[\"userName\"]],\"tGme7M\":[\"σας έχει προσκαλέσει να συμμετάσχετε σε έναν χώρο εργασίας με την ονομασία \"],\"uzTaYi\":[\"Γεια σας\"],\"eE1nG1\":[\"Εάν δεν έχετε προβεί εσείς σε αυτήν την αλλαγή, παρακαλώ επικοινωνήστε άμεσα με τον ιδιοκτήτη του χώρου εργασίας σας.\"],\"Gz91L8\":[\"Εάν επιθυμείτε να συνεχίστε να χρησιμοποιείτε το Twenty, παρακαλούμε ενημερώστε την συνδρομή σας εντός των επόμενων \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\".\"],\"0weyko\":[\"Εάν επιθυμείτε να χρησιμοποιήσετε ξανά το Twenty, μπορείτε να δημιουργήσετε ένα νέο χώρο εργασίας.\"],\"7JuhZQ\":[\"Φαίνεται ότι ο χώρος εργασίας σας <0>\",[\"workspaceDisplayName\"],\"</0> έχει ανασταλεί για \",[\"daysSinceInactive\"],\" ημέρες.\"],\"PviVyk\":[\"Συμμετέχετε στην ομάδα σας στο Twenty\"],\"ogtYkT\":[\"Ο κωδικός έχει ενημερωθεί\"],\"OfhWJH\":[\"Επαναφορά\"],\"RE5NiU\":[\"Επαναφέρετε τον κωδικό σας 🗝\"],\"7yDt8q\":[\"Σας ευχαριστούμε που εγγραφήκατε για έναν λογαριασμό στο Twenty! Πριν ξεκινήσουμε, πρέπει μόνο να επιβεβαιώσουμε ότι αυτός είστε εσείς. Κάντε κλικ παραπάνω για να επαληθεύσετε τη διεύθυνση email σας.\"],\"igorB1\":[\"Ο χώρος εργασίας θα απενεργοποιηθεί σε \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\", και όλα τα δεδομένα του θα διαγραφούν.\"],\"7OEHy1\":[\"Αυτό είναι ένα επιβεβαίωση ότι ο κωδικός για τον λογαριασμό σας (\",[\"email\"],\") άλλαξε με επιτυχία στις \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Αυτός ο σύνδεσμος ισχύει μόνο για τις επόμενες \",[\"duration\"],\". Εάν ο σύνδεσμος δεν λειτουργεί, μπορείτε να χρησιμοποιήσετε τον σύνδεσμο επαλήθευσης σύνδεσης απευθείας:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Ενημερώστε τη συνδρομή σας\"],\"wCKkSr\":[\"Επαληθεύστε το Email\"],\"KFmFrQ\":[\"Ο χώρος εργασίας σας <0>\",[\"workspaceDisplayName\"],\"</0> έχει διαγραφεί καθώς η συνδρομή σας έληξε \",[\"inactiveDaysBeforeDelete\"],\" ημέρες πριν.\"]}")as Messages;
|
||||
1
packages/twenty-emails/src/locales/generated/fi-FI.ts
Normal file
1
packages/twenty-emails/src/locales/generated/fi-FI.ts
Normal file
@ -0,0 +1 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Hyväksy kutsu\"],\"Yxj+Uc\":[\"Kaikki tiedot tässä työtilassa on pysyvästi poistettu.\"],\"RPHFhC\":[\"Vahvista sähköpostiosoitteesi\"],\"nvkBPN\":[\"Yhdistä Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Hyvä \",[\"userName\"]],\"tGme7M\":[\"on kutsunut sinut liittymään työtilaan nimeltä \"],\"uzTaYi\":[\"Hei\"],\"eE1nG1\":[\"Jos et itse aloittanut tätä muutosta, ota heti yhteyttä työtilasi omistajaan.\"],\"Gz91L8\":[\"Jos haluat jatkaa Twenty:n käyttöä, päivitä tilauksesi seuraavan \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\" kuluessa.\"],\"0weyko\":[\"Jos haluat käyttää Twentyä uudelleen, voit luoda uuden työtilan.\"],\"7JuhZQ\":[\"Vaikuttaa siltä, että työtilasi <0>\",[\"workspaceDisplayName\"],\"</0> on ollut jäädytettynä \",[\"daysSinceInactive\"],\" päivää.\"],\"PviVyk\":[\"Liity tiimiisi Twentyssä\"],\"ogtYkT\":[\"Salasana päivitetty\"],\"OfhWJH\":[\"Nollaa\"],\"RE5NiU\":[\"Nollaa salasanasi 🗝\"],\"7yDt8q\":[\"Kiitos, että rekisteröidyit Twenty:n käyttäjäksi! Ennen kuin aloitamme, meidän täytyy vahvistaa, että kyseessä on sinä. Klikkaa yllä vahvistaaksesi sähköpostiosoitteesi.\"],\"igorB1\":[\"Työtila poistetaan käytöstä \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\" kuluttua, ja kaikki sen tiedot poistetaan.\"],\"7OEHy1\":[\"Tämä on vahvistus siitä, että tilisi (\",[\"email\"],\") salasana on vaihdettu onnistuneesti \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Tämä linkki on voimassa vain seuraavat \",[\"duration\"],\". Jos linkki ei toimi, voit käyttää suoraan kirjautumisen varmennuslinkkiä:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Päivitä tilauksesi\"],\"wCKkSr\":[\"Vahvista sähköposti\"],\"KFmFrQ\":[\"Työtilasi <0>\",[\"workspaceDisplayName\"],\"</0> on poistettu, koska tilauksesi vanheni \",[\"inactiveDaysBeforeDelete\"],\" päivää sitten.\"]}")as Messages;
|
||||
1
packages/twenty-emails/src/locales/generated/he-IL.ts
Normal file
1
packages/twenty-emails/src/locales/generated/he-IL.ts
Normal file
@ -0,0 +1 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Accept invite\"],\"Yxj+Uc\":[\"All data in this workspace has been permanently deleted.\"],\"RPHFhC\":[\"Confirm your email address\"],\"nvkBPN\":[\"Connect to Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Dear \",[\"userName\"]],\"tGme7M\":[\"has invited you to join a workspace called \"],\"uzTaYi\":[\"Hello\"],\"eE1nG1\":[\"If you did not initiate this change, please contact your workspace owner immediately.\"],\"Gz91L8\":[\"If you wish to continue using Twenty, please update your subscription within the next \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\".\"],\"0weyko\":[\"If you wish to use Twenty again, you can create a new workspace.\"],\"7JuhZQ\":[\"It appears that your workspace <0>\",[\"workspaceDisplayName\"],\"</0> has been suspended for \",[\"daysSinceInactive\"],\" days.\"],\"PviVyk\":[\"Join your team on Twenty\"],\"ogtYkT\":[\"Password updated\"],\"OfhWJH\":[\"Reset\"],\"RE5NiU\":[\"Reset your password 🗝\"],\"7yDt8q\":[\"Thanks for registering for an account on Twenty! Before we get started, we just need to confirm that this is you. Click above to verify your email address.\"],\"igorB1\":[\"The workspace will be deactivated in \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\", and all its data will be deleted.\"],\"7OEHy1\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Update your subscription\"],\"wCKkSr\":[\"Verify Email\"],\"KFmFrQ\":[\"Your workspace <0>\",[\"workspaceDisplayName\"],\"</0> has been deleted as your subscription expired \",[\"inactiveDaysBeforeDelete\"],\" days ago.\"]}")as Messages;
|
||||
1
packages/twenty-emails/src/locales/generated/hu-HU.ts
Normal file
1
packages/twenty-emails/src/locales/generated/hu-HU.ts
Normal file
@ -0,0 +1 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Meghívó elfogadása\"],\"Yxj+Uc\":[\"A munkaterület minden adata végérvényesen törlésre került.\"],\"RPHFhC\":[\"Erősítse meg email címét\"],\"nvkBPN\":[\"Csatlakozás a Twentyhez\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Kedves \",[\"userName\"]],\"tGme7M\":[\"meghívta Önt, hogy csatlakozzon egy munkaterülethez, amelynek a neve: \"],\"uzTaYi\":[\"Üdvözlöm\"],\"eE1nG1\":[\"Amennyiben Ön nem kezdeményezte ezt a változtatást, kérjük azonnal lépjen kapcsolatba a munkaterület tulajdonosával.\"],\"Gz91L8\":[\"Amennyiben szeretné folytatni a Twenty használatát, kérjük frissítse előfizetését a következő \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\" időszakban.\"],\"0weyko\":[\"Ha újra szeretné használni a Twenty-t, létrehozhat egy új munkaterületet.\"],\"7JuhZQ\":[\"Úgy tűnik, hogy a munkaterülete <0>\",[\"workspaceDisplayName\"],\"</0> felfüggesztésre került \",[\"daysSinceInactive\"],\" napja.\"],\"PviVyk\":[\"Csatlakozzon a csapatához a Twentyn\"],\"ogtYkT\":[\"Jelszó frissítve\"],\"OfhWJH\":[\"Visszaállítás\"],\"RE5NiU\":[\"Jelszó visszaállítása 🗝\"],\"7yDt8q\":[\"Köszönjük, hogy regisztrált a Twenty szolgáltatására! Mielőtt elkezdenénk, csak meg kell erősítenünk, hogy ez Ön. Kattintson a fenti hivatkozásra email címének megerősítéséhez.\"],\"igorB1\":[\"A munkaterület \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\" múlva lesz deaktiválva, és minden adat törlésre kerül.\"],\"7OEHy1\":[\"Ez egy megerősítés arról, hogy fiókja jelszavát (\",[\"email\"],\") sikeresen megváltoztatták \",[\"formattedDate\"],\" napján.\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Ez a hivatkozás csak a következő \",[\"duration\"],\" ideig érvényes. Ha a hivatkozás nem működik, használhatja közvetlenül a belépés ellenőrző hivatkozását:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Előfizetés frissítése\"],\"wCKkSr\":[\"Email ellenőrzése\"],\"KFmFrQ\":[\"Munkaterülete <0>\",[\"workspaceDisplayName\"],\"</0> törlésre került, mivel előfizetése \",[\"inactiveDaysBeforeDelete\"],\" nappal ezelőtt lejárt.\"]}")as Messages;
|
||||
1
packages/twenty-emails/src/locales/generated/nl-NL.ts
Normal file
1
packages/twenty-emails/src/locales/generated/nl-NL.ts
Normal file
@ -0,0 +1 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Uitnodiging accepteren\"],\"Yxj+Uc\":[\"Alle gegevens in deze werkruimte zijn definitief verwijderd.\"],\"RPHFhC\":[\"Bevestig uw e-mailadres\"],\"nvkBPN\":[\"Verbinden met Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Beste \",[\"userName\"]],\"tGme7M\":[\"heeft u uitgenodigd om deel te nemen aan een werkruimte genaamd \"],\"uzTaYi\":[\"Hallo\"],\"eE1nG1\":[\"Als u deze wijziging niet heeft geïnitieerd, neem dan onmiddellijk contact op met de eigenaar van uw werkruimte.\"],\"Gz91L8\":[\"Als u Twenty wilt blijven gebruiken, werk dan uw abonnement bij binnen de komende \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\".\"],\"0weyko\":[\"Als u Twenty opnieuw wilt gebruiken, kunt u een nieuwe werkruimte aanmaken.\"],\"7JuhZQ\":[\"Het lijkt erop dat uw werkruimte <0>\",[\"workspaceDisplayName\"],\"</0> al voor \",[\"daysSinceInactive\"],\" dagen is opgeschort.\"],\"PviVyk\":[\"Sluit je aan bij je team op Twenty\"],\"ogtYkT\":[\"Wachtwoord bijgewerkt\"],\"OfhWJH\":[\"Resetten\"],\"RE5NiU\":[\"Reset uw wachtwoord 🗝\"],\"7yDt8q\":[\"Bedankt voor uw registratie voor een account op Twenty! Voordat we beginnen, moeten we gewoon bevestigen dat dit u bent. Klik hierboven om uw e-mailadres te verifiëren.\"],\"igorB1\":[\"De werkruimte wordt gedeactiveerd in \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\", en alle gegevens zullen worden verwijderd.\"],\"7OEHy1\":[\"Dit is een bevestiging dat het wachtwoord voor uw account (\",[\"email\"],\") succesvol is gewijzigd op \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Deze link is slechts geldig voor de komende \",[\"duration\"],\". Als de link niet werkt, kunt u direct de inlogverificatielink gebruiken:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Werk uw abonnement bij\"],\"wCKkSr\":[\"E-mail verifiëren\"],\"KFmFrQ\":[\"Uw werkruimte <0>\",[\"workspaceDisplayName\"],\"</0> is verwijderd omdat uw abonnement \",[\"inactiveDaysBeforeDelete\"],\" dagen geleden is verlopen.\"]}")as Messages;
|
||||
1
packages/twenty-emails/src/locales/generated/no-NO.ts
Normal file
1
packages/twenty-emails/src/locales/generated/no-NO.ts
Normal file
@ -0,0 +1 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Godta invitasjon\"],\"Yxj+Uc\":[\"Alle data i dette arbeidsområdet har blitt permanent slettet.\"],\"RPHFhC\":[\"Bekreft e-postadressen din\"],\"nvkBPN\":[\"Koble til Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Kjære \",[\"userName\"]],\"tGme7M\":[\"har invitert deg til å bli med i et arbeidsområde kalt \"],\"uzTaYi\":[\"Hei\"],\"eE1nG1\":[\"Hvis du ikke initierte denne endringen, vennligst kontakt eieren av arbeidsområdet ditt umiddelbart.\"],\"Gz91L8\":[\"Hvis du ønsker å fortsette å bruke Twenty, vennligst oppdater abonnementet ditt innen de neste \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\".\"],\"0weyko\":[\"Hvis du ønsker å bruke Twenty igjen, kan du opprette et nytt arbeidsområde.\"],\"7JuhZQ\":[\"Det ser ut til at ditt arbeidsområde <0>\",[\"workspaceDisplayName\"],\"</0> har blitt suspendert i \",[\"daysSinceInactive\"],\" dager.\"],\"PviVyk\":[\"Bli med teamet ditt på Twenty\"],\"ogtYkT\":[\"Passord oppdatert\"],\"OfhWJH\":[\"Tilbakestill\"],\"RE5NiU\":[\"Tilbakestill passordet ditt 🗝\"],\"7yDt8q\":[\"Takk for at du registrerte deg for en konto på Twenty! Før vi begynner, vi må bare bekrefte at dette er deg. Klikk ovenfor for å verifisere e-postadressen din.\"],\"igorB1\":[\"Arbeidsområdet vil bli deaktivert om \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\", og alle dens data vil bli slettet.\"],\"7OEHy1\":[\"Dette er en bekreftelse på at passordet for kontoen din (\",[\"email\"],\") ble vellykket endret den \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Denne lenken er kun gyldig i de neste \",[\"duration\"],\". Hvis lenken ikke fungerer, kan du bruke verifiseringslenken for innlogging direkte:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Oppdater abonnementet ditt\"],\"wCKkSr\":[\"Verifiser e-post\"],\"KFmFrQ\":[\"Ditt arbeidsområde <0>\",[\"workspaceDisplayName\"],\"</0> har blitt slettet da ditt abonnement utløp for \",[\"inactiveDaysBeforeDelete\"],\" dager siden.\"]}")as Messages;
|
||||
1
packages/twenty-emails/src/locales/generated/pl-PL.ts
Normal file
1
packages/twenty-emails/src/locales/generated/pl-PL.ts
Normal file
@ -0,0 +1 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Zaakceptuj zaproszenie\"],\"Yxj+Uc\":[\"Wszystkie dane w tej przestrzeni roboczej zostały trwale usunięte.\"],\"RPHFhC\":[\"Potwierdź swój adres email\"],\"nvkBPN\":[\"Połącz z Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Szanowny \",[\"userName\"]],\"tGme7M\":[\"zaprosił Cię do przyłączenia się do przestrzeni roboczej o nazwie \"],\"uzTaYi\":[\"Witaj\"],\"eE1nG1\":[\"Jeśli to nie Ty zainicjowałeś tę zmianę, skontaktuj się niezwłocznie z właścicielem przestrzeni roboczej.\"],\"Gz91L8\":[\"Jeśli chcesz kontynuować korzystanie z Twenty, proszę zaktualizuj swoją subskrypcję w ciągu następnych \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\".\"],\"0weyko\":[\"Jeśli chcesz ponownie korzystać z Twenty, możesz utworzyć nową przestrzeń roboczą.\"],\"7JuhZQ\":[\"Wygląda na to, że Twoja przestrzeń robocza <0>\",[\"workspaceDisplayName\"],\"</0> została zawieszona na \",[\"daysSinceInactive\"],\" dni.\"],\"PviVyk\":[\"Dołącz do swojego zespołu w Twenty\"],\"ogtYkT\":[\"Hasło zaktualizowane\"],\"OfhWJH\":[\"Zresetuj\"],\"RE5NiU\":[\"Zresetuj swoje hasło 🗝\"],\"7yDt8q\":[\"Dziękujemy za rejestrację konta w Twenty! Zanim zaczniemy, musimy tylko potwierdzić, że to Ty. Kliknij powyżej, aby zweryfikować swój adres email.\"],\"igorB1\":[\"Przestrzeń robocza zostanie deaktywowana za \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\", a wszystkie jej dane zostaną usunięte.\"],\"7OEHy1\":[\"To jest potwierdzenie, że hasło do Twojego konta (\",[\"email\"],\") zostało pomyślnie zmienione \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Ten link jest ważny tylko przez \",[\"duration\"],\". Jeśli link nie działa, można bezpośrednio użyć linku weryfikacyjnego logowania:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Zaktualizuj swoją subskrypcję\"],\"wCKkSr\":[\"Zweryfikuj Email\"],\"KFmFrQ\":[\"Twoja przestrzeń robocza <0>\",[\"workspaceDisplayName\"],\"</0> została usunięta, ponieważ Twoja subskrypcja wygasła \",[\"inactiveDaysBeforeDelete\"],\" dni temu.\"]}")as Messages;
|
||||
1
packages/twenty-emails/src/locales/generated/ro-RO.ts
Normal file
1
packages/twenty-emails/src/locales/generated/ro-RO.ts
Normal file
@ -0,0 +1 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Acceptați invitația\"],\"Yxj+Uc\":[\"Toate datele din acest spațiu de lucru au fost șterse permanent.\"],\"RPHFhC\":[\"Confirmați adresa de email\"],\"nvkBPN\":[\"Conectați-vă la Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Dragă \",[\"userName\"]],\"tGme7M\":[\"v-a invitat să vă alăturați unui spațiu de lucru numit \"],\"uzTaYi\":[\"Salut\"],\"eE1nG1\":[\"Dacă nu ați inițiat această schimbare, vă rugăm să contactați imediat proprietarul spațiului de lucru.\"],\"Gz91L8\":[\"Dacă doriți să continuați utilizarea Twenty, vă rugăm să vă actualizați abonamentul în următoarele \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\".\"],\"0weyko\":[\"Dacă doriți să folosiți din nou Twenty, puteți crea un spațiu de lucru nou.\"],\"7JuhZQ\":[\"Se pare că spațiul dvs. de lucru <0>\",[\"workspaceDisplayName\"],\"</0> a fost suspendat de \",[\"daysSinceInactive\"],\" zile.\"],\"PviVyk\":[\"Alăturați-vă echipei pe Twenty\"],\"ogtYkT\":[\"Parola a fost actualizată\"],\"OfhWJH\":[\"Resetează\"],\"RE5NiU\":[\"Resetați-vă parola 🗝\"],\"7yDt8q\":[\"Vă mulțumim că v-ați înregistrat pentru un cont pe Twenty! Înainte de a începe, trebuie doar să confirmăm că acesta sunteți dvs. Faceți clic mai sus pentru a verifica adresa de email.\"],\"igorB1\":[\"Spațiul de lucru va fi dezactivat în \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\", iar toate datele sale vor fi șterse.\"],\"7OEHy1\":[\"Aceasta este o confirmare că parola contului dvs. (\",[\"email\"],\") a fost schimbată cu succes la data de \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Acest link este valabil doar pentru următoarele \",[\"duration\"],\". Dacă linkul nu funcționează, puteți folosi direct linkul de verificare a autentificării:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Actualizați abonamentul\"],\"wCKkSr\":[\"Verificați Email\"],\"KFmFrQ\":[\"Spațiul dvs. de lucru <0>\",[\"workspaceDisplayName\"],\"</0> a fost șters, deoarece abonamentul a expirat cu \",[\"inactiveDaysBeforeDelete\"],\" zile în urmă.\"]}")as Messages;
|
||||
1
packages/twenty-emails/src/locales/generated/ru-RU.ts
Normal file
1
packages/twenty-emails/src/locales/generated/ru-RU.ts
Normal file
@ -0,0 +1 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Принять приглашение\"],\"Yxj+Uc\":[\"Все данные в этом рабочем пространстве были окончательно удалены.\"],\"RPHFhC\":[\"Подтвердите ваш адрес электронной почты\"],\"nvkBPN\":[\"Подключиться к Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Уважаемый \",[\"userName\"]],\"tGme7M\":[\"пригласил вас присоединиться к рабочему пространству под названием \"],\"uzTaYi\":[\"Здравствуйте\"],\"eE1nG1\":[\"Если вы не инициировали это изменение, немедленно свяжитесь с владельцем вашего рабочего пространства.\"],\"Gz91L8\":[\"Если вы хотите продолжить использование Twenty, пожалуйста, обновите вашу подписку в течение следующих \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\".\"],\"0weyko\":[\"Если вы захотите снова использовать Twenty, вы сможете создать новое рабочее пространство.\"],\"7JuhZQ\":[\"Похоже, что ваше рабочее пространство <0>\",[\"workspaceDisplayName\"],\"</0> было приостановлено на \",[\"daysSinceInactive\"],\" \",[\"daysSinceInactive\",\"plural\",{\"one\":[\"день\"],\"few\":[\"дня\"],\"many\":[\"дней\"],\"other\":[\"дня\"]}],\".\"],\"PviVyk\":[\"Присоединяйтесь к вашей команде на Twenty\"],\"ogtYkT\":[\"Пароль обновлен\"],\"OfhWJH\":[\"Сбросить\"],\"RE5NiU\":[\"Сбросьте ваш пароль 🗝\"],\"7yDt8q\":[\"Спасибо за регистрацию в аккаунте Twenty! Прежде чем начать, нам нужно убедиться, что это вы. Кликните выше, чтобы подтвердить ваш адрес электронной почты.\"],\"igorB1\":[\"Рабочее пространство будет деактивировано через \",[\"remainingDays\"],\" \",[\"remainingDays\",\"plural\",{\"one\":[\"день\"],\"few\":[\"дня\"],\"many\":[\"дней\"],\"other\":[\"дней\"]}],\", и все его данные будут удалены.\"],\"7OEHy1\":[\"Это подтверждение того, что пароль для вашего аккаунта (\",[\"email\"],\") был успешно изменен \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Эта ссылка действительна только в течение следующих \",[\"duration\"],\". Если ссылка не работает, вы можете использовать ссылку для подтверждения входа напрямую:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Обновите вашу подписку\"],\"wCKkSr\":[\"Подтвердить электронную почту\"],\"KFmFrQ\":[\"Ваше рабочее пространство <0>\",[\"workspaceDisplayName\"],\"</0> было удалено, так как ваша подписка истекла \",[\"inactiveDaysBeforeDelete\"],\" \",[\"inactiveDaysBeforeDelete\",\"plural\",{\"one\":[\"день\"],\"few\":[\"дня\"],\"many\":[\"дней\"],\"other\":[\"дней\"]}],\" назад.\"]}")as Messages;
|
||||
1
packages/twenty-emails/src/locales/generated/sr-Cyrl.ts
Normal file
1
packages/twenty-emails/src/locales/generated/sr-Cyrl.ts
Normal file
@ -0,0 +1 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Прихвати позив\"],\"Yxj+Uc\":[\"Сви подаци у овом радном простору су трајно избрисани.\"],\"RPHFhC\":[\"Потврдите вашу е-адресу\"],\"nvkBPN\":[\"Повежите се са Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Поштовани \",[\"userName\"]],\"tGme7M\":[\"вас је позвао да се придружите радном простору под називом \"],\"uzTaYi\":[\"Здраво\"],\"eE1nG1\":[\"Ако ову промену нисте покренули ви, молимо вас да одмах контактирате власника вашег радног простора.\"],\"Gz91L8\":[\"Ако желите наставити коришћење Twenty, молимо вас да освежите вашу претплату у наредних \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\".\"],\"0weyko\":[\"Ако желите поново користити Twenty, можете створити нови радни простор.\"],\"7JuhZQ\":[\"Чини се да је ваш радни простор <0>\",[\"workspaceDisplayName\"],\"</0> суспендован већ \",[\"daysSinceInactive\"],\" дана.\"],\"PviVyk\":[\"Придружите се свом тиму на Twenty\"],\"ogtYkT\":[\"Шифра је освежена\"],\"OfhWJH\":[\"Ресетуј\"],\"RE5NiU\":[\"Ресетујте вашу шифру 🗝\"],\"7yDt8q\":[\"Хвала вам што сте се регистровали за налог на Twenty! Прије него што почнемо, само требамо да потврдимо да сте то ви. Кликните изнад да потврдите вашу е-адресу.\"],\"igorB1\":[\"Радни простор ће бити деактивиран за \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\", и сви његови подаци ће бити избрисани.\"],\"7OEHy1\":[\"Ово је потврда да је шифра вашег налога (\",[\"email\"],\") успешно промењена на \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Овај линк је валидан само следећих \",[\"duration\"],\". Ако линк не функционише, моћи ћете директно користити линк за верификацију пријаве:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Освежите вашу претплату\"],\"wCKkSr\":[\"Потврдите е-адресу\"],\"KFmFrQ\":[\"Ваш радни простор <0>\",[\"workspaceDisplayName\"],\"</0> је избрисан пошто је ваша претплата истекла пре \",[\"inactiveDaysBeforeDelete\"],\" дана.\"]}")as Messages;
|
||||
1
packages/twenty-emails/src/locales/generated/sv-SE.ts
Normal file
1
packages/twenty-emails/src/locales/generated/sv-SE.ts
Normal file
@ -0,0 +1 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Acceptera inbjudan\"],\"Yxj+Uc\":[\"Alla data i det här arbetsutrymmet har raderats permanent.\"],\"RPHFhC\":[\"Bekräfta din e-postadress\"],\"nvkBPN\":[\"Anslut till Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Kära \",[\"userName\"]],\"tGme7M\":[\"har bjudit in dig till ett arbetsutrymme som heter \"],\"uzTaYi\":[\"Hej\"],\"eE1nG1\":[\"Om du inte initierade denna förändring, vänligen kontakta ägaren av ditt arbetsutrymme omedelbart.\"],\"Gz91L8\":[\"Om du vill fortsätta använda Twenty, vänligen uppdatera din prenumeration inom de nästa \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\".\"],\"0weyko\":[\"Om du vill använda Twenty igen kan du skapa ett nytt arbetsutrymme.\"],\"7JuhZQ\":[\"Det verkar som att ditt arbetsutrymme <0>\",[\"workspaceDisplayName\"],\"</0> har varit inaktivt i \",[\"daysSinceInactive\"],\" dagar.\"],\"PviVyk\":[\"Gå med i ditt team på Twenty\"],\"ogtYkT\":[\"Lösenordet uppdaterat\"],\"OfhWJH\":[\"Återställ\"],\"RE5NiU\":[\"Återställ ditt lösenord 🗝\"],\"7yDt8q\":[\"Tack för att du registrerade ett konto på Twenty! Innan vi börjar behöver vi bara bekräfta att det är du. Klicka ovan för att verifiera din e-postadress.\"],\"igorB1\":[\"Arbetsutrymmet kommer att inaktiveras om \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\", och all dess data kommer att raderas.\"],\"7OEHy1\":[\"Det här är en bekräftelse på att lösenordet för ditt konto (\",[\"email\"],\") har ändrats framgångsrikt den \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Den här länken är bara giltig under de nästa \",[\"duration\"],\". Om länken inte fungerar kan du använda länken för inloggningsverifiering direkt:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Uppdatera din prenumeration\"],\"wCKkSr\":[\"Verifiera e-post\"],\"KFmFrQ\":[\"Ditt arbetsutrymme <0>\",[\"workspaceDisplayName\"],\"</0> har raderats eftersom din prenumeration gick ut för \",[\"inactiveDaysBeforeDelete\"],\" dagar sedan.\"]}")as Messages;
|
||||
1
packages/twenty-emails/src/locales/generated/tr-TR.ts
Normal file
1
packages/twenty-emails/src/locales/generated/tr-TR.ts
Normal file
@ -0,0 +1 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Daveti kabul et\"],\"Yxj+Uc\":[\"Bu çalışma alanındaki tüm veriler kalıcı olarak silindi.\"],\"RPHFhC\":[\"E-posta adresinizi onaylayın\"],\"nvkBPN\":[\"Twenty'e bağlan\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Sevgili \",[\"userName\"]],\"tGme7M\":[\"seni \"],\"uzTaYi\":[\"Merhaba\"],\"eE1nG1\":[\"Bu değişikliği başlatmadıysanız, lütfen hemen çalışma alanı sahibinizle iletişime geçin.\"],\"Gz91L8\":[\"Twenty kullanmaya devam etmek istiyorsanız, lütfen aboneliğinizi önümüzdeki \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\" içinde güncelleyin.\"],\"0weyko\":[\"Twenty'yi tekrar kullanmak isterseniz, yeni bir çalışma alanı oluşturabilirsiniz.\"],\"7JuhZQ\":[\"<0>\",[\"workspaceDisplayName\"],\"</0> çalışma alanınızın \",[\"daysSinceInactive\"],\" gün boyunca askıya alındığı görülüyor.\"],\"PviVyk\":[\"Takımına Twenty üzerinden katıl\"],\"ogtYkT\":[\"Şifre güncellendi\"],\"OfhWJH\":[\"Sıfırla\"],\"RE5NiU\":[\"Şifreni sıfırla 🗝\"],\"7yDt8q\":[\"Twenty hesabı için kayıt olduğunuz için teşekkürler! Başlamadan önce, bu işlemin sizin tarafınızdan yapıldığını doğrulamamız gerekiyor. E-posta adresinizi doğrulamak için yukarıdaki bağlantıya tıklayın.\"],\"igorB1\":[\"Çalışma alanı \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\" içinde devre dışı bırakılacak ve tüm verileri silinecektir.\"],\"7OEHy1\":[\"Hesabınızın (\",[\"email\"],\") şifresinin \",[\"formattedDate\"],\" tarihinde başarıyla değiştirildiğine dair bir doğrulama bu.\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Bu bağlantı sadece \",[\"duration\"],\" boyunca geçerlidir. Bağlantı çalışmazsa, doğrudan giriş doğrulama bağlantısını kullanabilirsiniz:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Aboneliğini güncelle\"],\"wCKkSr\":[\"E-postayı Doğrula\"],\"KFmFrQ\":[\"<0>\",[\"workspaceDisplayName\"],\"</0> çalışma alanınız aboneliğinizin bitmesinin ardından \",[\"inactiveDaysBeforeDelete\"],\" gün önce silindi.\"]}")as Messages;
|
||||
1
packages/twenty-emails/src/locales/generated/uk-UA.ts
Normal file
1
packages/twenty-emails/src/locales/generated/uk-UA.ts
Normal file
@ -0,0 +1 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Прийняти запрошення\"],\"Yxj+Uc\":[\"Всі дані в цьому робочому просторі були назавжди видалені.\"],\"RPHFhC\":[\"Підтвердіть свою адресу електронної пошти\"],\"nvkBPN\":[\"Підключитися до Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Шановний \",[\"userName\"]],\"tGme7M\":[\"запрошує вас приєднатися до робочого простору під назвою \"],\"uzTaYi\":[\"Привіт\"],\"eE1nG1\":[\"Якщо ви не починали цю зміну, будь ласка, негайно зверніться до власника вашого робочого простору.\"],\"Gz91L8\":[\"Якщо ви бажаєте продовжити користування Twenty, будь ласка, оновіть свою підписку протягом наступних \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\".\"],\"0weyko\":[\"Якщо ви бажаєте знову використовувати Twenty, ви можете створити новий робочий простір.\"],\"7JuhZQ\":[\"Схоже, що ваш робочий простір <0>\",[\"workspaceDisplayName\"],\"</0> був призупинений на \",[\"daysSinceInactive\"],\" днів.\"],\"PviVyk\":[\"Приєднуйтесь до своєї команди на Twenty\"],\"ogtYkT\":[\"Пароль оновлено\"],\"OfhWJH\":[\"Скинути\"],\"RE5NiU\":[\"Скинути ваш пароль 🗝\"],\"7yDt8q\":[\"Дякуємо за реєстрацію облікового запису на Twenty! Перш ніж розпочати, нам просто потрібно підтвердити, що це ви. Натисніть вище, щоб підтвердити свою адресу електронної пошти.\"],\"igorB1\":[\"Робочий простір буде деактивовано через \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\", і всі його дані будуть видалені.\"],\"7OEHy1\":[\"Це підтвердження того, що пароль для вашого облікового запису (\",[\"email\"],\") було успішно змінено \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Це посилання дійсне протягом наступних \",[\"duration\"],\". Якщо посилання не працює, ви можете напряму використовувати посилання для перевірки логіна:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Оновіть свою підписку\"],\"wCKkSr\":[\"Підтвердіть Email\"],\"KFmFrQ\":[\"Ваш робочий простір <0>\",[\"workspaceDisplayName\"],\"</0> було видалено, оскільки ваша підписка закінчилась \",[\"inactiveDaysBeforeDelete\"],\" днів тому.\"]}")as Messages;
|
||||
1
packages/twenty-emails/src/locales/generated/vi-VN.ts
Normal file
1
packages/twenty-emails/src/locales/generated/vi-VN.ts
Normal file
@ -0,0 +1 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Chấp nhận lời mời\"],\"Yxj+Uc\":[\"Tất cả dữ liệu trong không gian làm việc này đã bị xóa vĩnh viễn.\"],\"RPHFhC\":[\"Xác nhận địa chỉ email của bạn\"],\"nvkBPN\":[\"Kết nối với Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Kính gửi \",[\"userName\"]],\"tGme7M\":[\"đã mời bạn tham gia một không gian làm việc có tên là \"],\"uzTaYi\":[\"Xin chào\"],\"eE1nG1\":[\"Nếu bạn không khởi xướng việc thay đổi này, vui lòng liên hệ ngay với chủ sở hữu của không gian làm việc của bạn.\"],\"Gz91L8\":[\"Nếu bạn muốn tiếp tục sử dụng Twenty, vui lòng cập nhật gói đăng ký của bạn trong vòng \",[\"remainingDays\"],\" ngày kế tiếp.\"],\"0weyko\":[\"Nếu bạn muốn sử dụng Twenty lại, bạn có thể tạo một không gian làm việc mới.\"],\"7JuhZQ\":[\"Có vẻ như không gian làm việc của bạn <0>\",[\"workspaceDisplayName\"],\"</0> đã bị đình chỉ vì \",[\"daysSinceInactive\"],\" ngày.\"],\"PviVyk\":[\"Tham gia vào đội ngũ của bạn trên Twenty\"],\"ogtYkT\":[\"Mật khẩu đã được cập nhật\"],\"OfhWJH\":[\"Đặt lại\"],\"RE5NiU\":[\"Đặt lại mật khẩu của bạn 🗝\"],\"7yDt8q\":[\"Cảm ơn bạn đã đăng ký tài khoản trên Twenty! Trước khi chúng ta bắt đầu, chúng ta chỉ cần xác nhận đây có phải là bạn không. Nhấp vào phía trên để xác minh địa chỉ email của bạn.\"],\"igorB1\":[\"Không gian làm việc sẽ bị ngừng hoạt động trong \",[\"remainingDays\"],\" ngày tới, và tất cả dữ liệu của nó sẽ bị xóa bỏ.\"],\"7OEHy1\":[\"Đây là xác nhận rằng mật khẩu cho tài khoản của bạn (\",[\"email\"],\") đã được thay đổi thành công vào \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Liên kết này chỉ có hiệu lực trong thời gian \",[\"duration\"],\" kế tiếp. Nếu liên kết không hoạt động, bạn có thể sử dụng liên kết xác minh đăng nhập trực tiếp:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Cập nhật gói đăng ký của bạn\"],\"wCKkSr\":[\"Xác minh Email\"],\"KFmFrQ\":[\"Không gian làm việc của bạn <0>\",[\"workspaceDisplayName\"],\"</0> đã bị xóa bỏ vì gói đăng ký của bạn đã hết hạn từ \",[\"inactiveDaysBeforeDelete\"],\" ngày trước.\"]}")as Messages;
|
||||
@ -16,7 +16,7 @@ import { detectTimeZone } from '@/localization/utils/detectTimeZone';
|
||||
import { getDateFormatFromWorkspaceDateFormat } from '@/localization/utils/getDateFormatFromWorkspaceDateFormat';
|
||||
import { getTimeFormatFromWorkspaceTimeFormat } from '@/localization/utils/getTimeFormatFromWorkspaceTimeFormat';
|
||||
import { ColorScheme } from '@/workspace-member/types/WorkspaceMember';
|
||||
import { APP_LOCALES, isDefined } from 'twenty-shared';
|
||||
import { APP_LOCALES, isDefined, SOURCE_LOCALE } from 'twenty-shared';
|
||||
import { WorkspaceMember } from '~/generated-metadata/graphql';
|
||||
import { useGetCurrentUserQuery } from '~/generated/graphql';
|
||||
import { dynamicActivate } from '~/utils/i18n/dynamicActivate';
|
||||
@ -70,7 +70,8 @@ export const UserProviderEffect = () => {
|
||||
return {
|
||||
...workspaceMember,
|
||||
colorScheme: (workspaceMember.colorScheme as ColorScheme) ?? 'Light',
|
||||
locale: (workspaceMember.locale as keyof typeof APP_LOCALES) ?? 'en',
|
||||
locale:
|
||||
(workspaceMember.locale as keyof typeof APP_LOCALES) ?? SOURCE_LOCALE,
|
||||
};
|
||||
};
|
||||
|
||||
@ -94,7 +95,7 @@ export const UserProviderEffect = () => {
|
||||
});
|
||||
|
||||
dynamicActivate(
|
||||
(workspaceMember.locale as keyof typeof APP_LOCALES) ?? 'en',
|
||||
(workspaceMember.locale as keyof typeof APP_LOCALES) ?? SOURCE_LOCALE,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -65,33 +65,85 @@ export const LocalePicker = () => {
|
||||
label: string;
|
||||
value: (typeof APP_LOCALES)[keyof typeof APP_LOCALES];
|
||||
}> = [
|
||||
{
|
||||
label: t`Afrikaans`,
|
||||
value: APP_LOCALES['af-ZA'],
|
||||
},
|
||||
{
|
||||
label: t`Arabic`,
|
||||
value: APP_LOCALES['ar-SA'],
|
||||
},
|
||||
{
|
||||
label: t`Catalan`,
|
||||
value: APP_LOCALES['ca-ES'],
|
||||
},
|
||||
{
|
||||
label: t`Chinese — Simplified`,
|
||||
value: APP_LOCALES['zh-CN'],
|
||||
},
|
||||
{
|
||||
label: t`Chinese — Traditional`,
|
||||
value: APP_LOCALES['zh-TW'],
|
||||
},
|
||||
{
|
||||
label: t`Czech`,
|
||||
value: APP_LOCALES['cs-CZ'],
|
||||
},
|
||||
{
|
||||
label: t`Danish`,
|
||||
value: APP_LOCALES['da-DK'],
|
||||
},
|
||||
{
|
||||
label: t`Dutch`,
|
||||
value: APP_LOCALES['nl-NL'],
|
||||
},
|
||||
{
|
||||
label: t`English`,
|
||||
value: APP_LOCALES.en,
|
||||
},
|
||||
{
|
||||
label: t`Finnish`,
|
||||
value: APP_LOCALES['fi-FI'],
|
||||
},
|
||||
{
|
||||
label: t`French`,
|
||||
value: APP_LOCALES['fr-FR'],
|
||||
},
|
||||
{
|
||||
label: t`Spanish`,
|
||||
value: APP_LOCALES['es-ES'],
|
||||
},
|
||||
{
|
||||
label: t`German`,
|
||||
value: APP_LOCALES['de-DE'],
|
||||
},
|
||||
{
|
||||
label: t`Greek`,
|
||||
value: APP_LOCALES['el-GR'],
|
||||
},
|
||||
{
|
||||
label: t`Hebrew`,
|
||||
value: APP_LOCALES['he-IL'],
|
||||
},
|
||||
{
|
||||
label: t`Hungarian`,
|
||||
value: APP_LOCALES['hu-HU'],
|
||||
},
|
||||
{
|
||||
label: t`Italian`,
|
||||
value: APP_LOCALES['it-IT'],
|
||||
},
|
||||
{
|
||||
label: t`Japanese`,
|
||||
value: APP_LOCALES['ja-JP'],
|
||||
},
|
||||
{
|
||||
label: t`Korean`,
|
||||
value: APP_LOCALES['ko-KR'],
|
||||
},
|
||||
{
|
||||
label: t`Japanese`,
|
||||
value: APP_LOCALES['ja-JP'],
|
||||
label: t`Norwegian`,
|
||||
value: APP_LOCALES['no-NO'],
|
||||
},
|
||||
{
|
||||
label: t`Polish`,
|
||||
value: APP_LOCALES['pl-PL'],
|
||||
},
|
||||
{
|
||||
label: t`Portuguese — Portugal`,
|
||||
@ -102,12 +154,36 @@ export const LocalePicker = () => {
|
||||
value: APP_LOCALES['pt-BR'],
|
||||
},
|
||||
{
|
||||
label: t`Chinese — Simplified`,
|
||||
value: APP_LOCALES['zh-CN'],
|
||||
label: t`Romanian`,
|
||||
value: APP_LOCALES['ro-RO'],
|
||||
},
|
||||
{
|
||||
label: t`Chinese — Traditional`,
|
||||
value: APP_LOCALES['zh-TW'],
|
||||
label: t`Russian`,
|
||||
value: APP_LOCALES['ru-RU'],
|
||||
},
|
||||
{
|
||||
label: t`Serbian (Cyrillic)`,
|
||||
value: APP_LOCALES['sr-Cyrl'],
|
||||
},
|
||||
{
|
||||
label: t`Spanish`,
|
||||
value: APP_LOCALES['es-ES'],
|
||||
},
|
||||
{
|
||||
label: t`Swedish`,
|
||||
value: APP_LOCALES['sv-SE'],
|
||||
},
|
||||
{
|
||||
label: t`Turkish`,
|
||||
value: APP_LOCALES['tr-TR'],
|
||||
},
|
||||
{
|
||||
label: t`Ukrainian`,
|
||||
value: APP_LOCALES['uk-UA'],
|
||||
},
|
||||
{
|
||||
label: t`Vietnamese`,
|
||||
value: APP_LOCALES['vi-VN'],
|
||||
},
|
||||
];
|
||||
if (isDebugMode) {
|
||||
|
||||
@ -1,12 +1,13 @@
|
||||
import { i18n } from '@lingui/core';
|
||||
import { I18nProvider } from '@lingui/react';
|
||||
import { Decorator } from '@storybook/react';
|
||||
import { SOURCE_LOCALE } from 'twenty-shared';
|
||||
import { messages as enMessages } from '../../locales/generated/en';
|
||||
|
||||
i18n.load({
|
||||
en: enMessages,
|
||||
[SOURCE_LOCALE]: enMessages,
|
||||
});
|
||||
i18n.activate('en');
|
||||
i18n.activate(SOURCE_LOCALE);
|
||||
|
||||
export const I18nFrontDecorator: Decorator = (Story) => {
|
||||
return (
|
||||
|
||||
@ -27,6 +27,7 @@ import { PrefetchDataProvider } from '@/prefetch/components/PrefetchDataProvider
|
||||
import { WorkspaceProviderEffect } from '@/workspace/components/WorkspaceProviderEffect';
|
||||
import { i18n } from '@lingui/core';
|
||||
import { I18nProvider } from '@lingui/react';
|
||||
import { SOURCE_LOCALE } from 'twenty-shared';
|
||||
import { IconsProvider } from 'twenty-ui';
|
||||
import { dynamicActivate } from '~/utils/i18n/dynamicActivate';
|
||||
import { FullHeightStorybookLayout } from '../FullHeightStorybookLayout';
|
||||
@ -67,7 +68,7 @@ const ApolloStorybookDevLogEffect = () => {
|
||||
return <></>;
|
||||
};
|
||||
|
||||
await dynamicActivate('en');
|
||||
await dynamicActivate(SOURCE_LOCALE);
|
||||
|
||||
const Providers = () => {
|
||||
return (
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
import { i18n } from '@lingui/core';
|
||||
import { APP_LOCALES } from 'twenty-shared';
|
||||
import { APP_LOCALES, SOURCE_LOCALE } from 'twenty-shared';
|
||||
|
||||
export const dynamicActivate = async (locale: keyof typeof APP_LOCALES) => {
|
||||
if (!Object.values(APP_LOCALES).includes(locale)) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.warn(`Invalid locale "${locale}", defaulting to "en"`);
|
||||
locale = 'en';
|
||||
locale = SOURCE_LOCALE;
|
||||
}
|
||||
const { messages } = await import(`../../locales/generated/${locale}.ts`);
|
||||
i18n.load(locale, messages);
|
||||
|
||||
@ -1,5 +1,10 @@
|
||||
import { fromNavigator, fromStorage, fromUrl } from '@lingui/detect-locale';
|
||||
import { APP_LOCALES, isDefined, isValidLocale } from 'twenty-shared';
|
||||
import {
|
||||
APP_LOCALES,
|
||||
isDefined,
|
||||
isValidLocale,
|
||||
SOURCE_LOCALE,
|
||||
} from 'twenty-shared';
|
||||
import { dynamicActivate } from '~/utils/i18n/dynamicActivate';
|
||||
|
||||
export const initialI18nActivate = () => {
|
||||
@ -22,7 +27,7 @@ export const initialI18nActivate = () => {
|
||||
} else if (isDefined(navigatorLocale) && isValidLocale(navigatorLocale)) {
|
||||
// TODO: remove when we're ready to launch
|
||||
// locale = navigatorLocale;
|
||||
locale = 'en';
|
||||
locale = SOURCE_LOCALE;
|
||||
}
|
||||
|
||||
dynamicActivate(locale);
|
||||
|
||||
@ -2,6 +2,7 @@ import { UseFilters, UseGuards } from '@nestjs/common';
|
||||
import { Args, Context, Mutation, Query, Resolver } from '@nestjs/graphql';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
|
||||
import { SOURCE_LOCALE } from 'twenty-shared';
|
||||
import { Repository } from 'typeorm';
|
||||
|
||||
import { ApiKeyTokenInput } from 'src/engine/core-modules/auth/dto/api-key-token.input';
|
||||
@ -348,7 +349,7 @@ export class AuthResolver {
|
||||
return await this.resetPasswordService.sendEmailPasswordResetLink(
|
||||
resetToken,
|
||||
emailPasswordResetInput.email,
|
||||
context.req.headers['x-locale'] || 'en',
|
||||
context.req.headers['x-locale'] || SOURCE_LOCALE,
|
||||
);
|
||||
}
|
||||
|
||||
@ -366,7 +367,7 @@ export class AuthResolver {
|
||||
await this.authService.updatePassword(
|
||||
id,
|
||||
newPassword,
|
||||
context.req.headers['x-locale'] || 'en',
|
||||
context.req.headers['x-locale'] || SOURCE_LOCALE,
|
||||
);
|
||||
|
||||
return await this.resetPasswordService.invalidatePasswordResetToken(id);
|
||||
|
||||
@ -2,7 +2,7 @@ import { Injectable, NestMiddleware } from '@nestjs/common';
|
||||
|
||||
import { i18n } from '@lingui/core';
|
||||
import { NextFunction, Request, Response } from 'express';
|
||||
import { APP_LOCALES } from 'twenty-shared';
|
||||
import { APP_LOCALES, SOURCE_LOCALE } from 'twenty-shared';
|
||||
|
||||
@Injectable()
|
||||
export class I18nMiddleware implements NestMiddleware {
|
||||
@ -12,7 +12,7 @@ export class I18nMiddleware implements NestMiddleware {
|
||||
if (locale && Object.values(APP_LOCALES).includes(locale)) {
|
||||
i18n.activate(locale);
|
||||
} else {
|
||||
i18n.activate('en');
|
||||
i18n.activate(SOURCE_LOCALE);
|
||||
}
|
||||
|
||||
next();
|
||||
|
||||
@ -1,18 +1,37 @@
|
||||
import { Injectable, OnModuleInit } from '@nestjs/common';
|
||||
|
||||
import { i18n } from '@lingui/core';
|
||||
import { APP_LOCALES } from 'twenty-shared';
|
||||
import { APP_LOCALES, SOURCE_LOCALE } from 'twenty-shared';
|
||||
|
||||
import { messages as afMessages } from 'src/engine/core-modules/i18n/locales/generated/af-ZA';
|
||||
import { messages as arMessages } from 'src/engine/core-modules/i18n/locales/generated/ar-SA';
|
||||
import { messages as caMessages } from 'src/engine/core-modules/i18n/locales/generated/ca-ES';
|
||||
import { messages as csMessages } from 'src/engine/core-modules/i18n/locales/generated/cs-CZ';
|
||||
import { messages as daMessages } from 'src/engine/core-modules/i18n/locales/generated/da-DK';
|
||||
import { messages as deMessages } from 'src/engine/core-modules/i18n/locales/generated/de-DE';
|
||||
import { messages as elMessages } from 'src/engine/core-modules/i18n/locales/generated/el-GR';
|
||||
import { messages as enMessages } from 'src/engine/core-modules/i18n/locales/generated/en';
|
||||
import { messages as esMessages } from 'src/engine/core-modules/i18n/locales/generated/es-ES';
|
||||
import { messages as fiMessages } from 'src/engine/core-modules/i18n/locales/generated/fi-FI';
|
||||
import { messages as frMessages } from 'src/engine/core-modules/i18n/locales/generated/fr-FR';
|
||||
import { messages as heMessages } from 'src/engine/core-modules/i18n/locales/generated/he-IL';
|
||||
import { messages as huMessages } from 'src/engine/core-modules/i18n/locales/generated/hu-HU';
|
||||
import { messages as itMessages } from 'src/engine/core-modules/i18n/locales/generated/it-IT';
|
||||
import { messages as jaMessages } from 'src/engine/core-modules/i18n/locales/generated/ja-JP';
|
||||
import { messages as koMessages } from 'src/engine/core-modules/i18n/locales/generated/ko-KR';
|
||||
import { messages as nlMessages } from 'src/engine/core-modules/i18n/locales/generated/nl-NL';
|
||||
import { messages as noMessages } from 'src/engine/core-modules/i18n/locales/generated/no-NO';
|
||||
import { messages as plMessages } from 'src/engine/core-modules/i18n/locales/generated/pl-PL';
|
||||
import { messages as pseudoEnMessages } from 'src/engine/core-modules/i18n/locales/generated/pseudo-en';
|
||||
import { messages as ptBRMessages } from 'src/engine/core-modules/i18n/locales/generated/pt-BR';
|
||||
import { messages as ptPTMessages } from 'src/engine/core-modules/i18n/locales/generated/pt-PT';
|
||||
import { messages as roMessages } from 'src/engine/core-modules/i18n/locales/generated/ro-RO';
|
||||
import { messages as ruMessages } from 'src/engine/core-modules/i18n/locales/generated/ru-RU';
|
||||
import { messages as srMessages } from 'src/engine/core-modules/i18n/locales/generated/sr-Cyrl';
|
||||
import { messages as svMessages } from 'src/engine/core-modules/i18n/locales/generated/sv-SE';
|
||||
import { messages as trMessages } from 'src/engine/core-modules/i18n/locales/generated/tr-TR';
|
||||
import { messages as ukMessages } from 'src/engine/core-modules/i18n/locales/generated/uk-UA';
|
||||
import { messages as viMessages } from 'src/engine/core-modules/i18n/locales/generated/vi-VN';
|
||||
import { messages as zhHansMessages } from 'src/engine/core-modules/i18n/locales/generated/zh-CN';
|
||||
import { messages as zhHantMessages } from 'src/engine/core-modules/i18n/locales/generated/zh-TW';
|
||||
|
||||
@ -22,14 +41,33 @@ export class I18nService implements OnModuleInit {
|
||||
const messages: Record<keyof typeof APP_LOCALES, any> = {
|
||||
en: enMessages,
|
||||
'pseudo-en': pseudoEnMessages,
|
||||
'fr-FR': frMessages,
|
||||
'ko-KR': koMessages,
|
||||
'af-ZA': afMessages,
|
||||
'ar-SA': arMessages,
|
||||
'ca-ES': caMessages,
|
||||
'cs-CZ': csMessages,
|
||||
'da-DK': daMessages,
|
||||
'de-DE': deMessages,
|
||||
'it-IT': itMessages,
|
||||
'el-GR': elMessages,
|
||||
'es-ES': esMessages,
|
||||
'fi-FI': fiMessages,
|
||||
'fr-FR': frMessages,
|
||||
'he-IL': heMessages,
|
||||
'hu-HU': huMessages,
|
||||
'it-IT': itMessages,
|
||||
'ja-JP': jaMessages,
|
||||
'pt-PT': ptPTMessages,
|
||||
'ko-KR': koMessages,
|
||||
'nl-NL': nlMessages,
|
||||
'no-NO': noMessages,
|
||||
'pl-PL': plMessages,
|
||||
'pt-BR': ptBRMessages,
|
||||
'pt-PT': ptPTMessages,
|
||||
'ro-RO': roMessages,
|
||||
'ru-RU': ruMessages,
|
||||
'sr-Cyrl': srMessages,
|
||||
'sv-SE': svMessages,
|
||||
'tr-TR': trMessages,
|
||||
'uk-UA': ukMessages,
|
||||
'vi-VN': viMessages,
|
||||
'zh-CN': zhHansMessages,
|
||||
'zh-TW': zhHantMessages,
|
||||
};
|
||||
@ -40,7 +78,7 @@ export class I18nService implements OnModuleInit {
|
||||
},
|
||||
);
|
||||
|
||||
i18n.activate('en');
|
||||
i18n.activate(SOURCE_LOCALE);
|
||||
}
|
||||
|
||||
async onModuleInit() {
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -2,7 +2,7 @@
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
|
||||
import { TypeOrmQueryService } from '@ptc-org/nestjs-query-typeorm';
|
||||
import { isDefined } from 'twenty-shared';
|
||||
import { isDefined, SOURCE_LOCALE } from 'twenty-shared';
|
||||
import { Repository } from 'typeorm';
|
||||
|
||||
import { TypeORMService } from 'src/database/typeorm/typeorm.service';
|
||||
@ -78,7 +78,7 @@ export class UserWorkspaceService extends TypeOrmQueryService<UserWorkspace> {
|
||||
user.id,
|
||||
user.email,
|
||||
user.defaultAvatarUrl ?? '',
|
||||
user.locale ?? 'en',
|
||||
user.locale ?? SOURCE_LOCALE,
|
||||
],
|
||||
);
|
||||
const workspaceMember = await workspaceDataSource?.query(
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
import { EntityManager } from 'typeorm';
|
||||
|
||||
import { DEMO_SEED_USER_IDS } from 'src/database/typeorm-seeds/core/demo/users';
|
||||
import { SOURCE_LOCALE } from 'twenty-shared';
|
||||
|
||||
export const DEMO_SEED_WORKSPACE_MEMBER_IDS = {
|
||||
NOAH: '20202020-0687-4c41-b707-ed1bfca972a2',
|
||||
@ -30,7 +31,7 @@ export const seedWorkspaceMemberWithDemoData = async (
|
||||
id: DEMO_SEED_WORKSPACE_MEMBER_IDS.NOAH,
|
||||
nameFirstName: 'Noah',
|
||||
nameLastName: 'A',
|
||||
locale: 'en',
|
||||
locale: SOURCE_LOCALE,
|
||||
colorScheme: 'Light',
|
||||
userEmail: 'noah@demo.dev',
|
||||
userId: DEMO_SEED_USER_IDS.NOAH,
|
||||
@ -39,7 +40,7 @@ export const seedWorkspaceMemberWithDemoData = async (
|
||||
id: DEMO_SEED_WORKSPACE_MEMBER_IDS.HUGO,
|
||||
nameFirstName: 'Hugo',
|
||||
nameLastName: 'I',
|
||||
locale: 'en',
|
||||
locale: SOURCE_LOCALE,
|
||||
colorScheme: 'Light',
|
||||
userEmail: 'hugo@demo.dev',
|
||||
userId: DEMO_SEED_USER_IDS.HUGO,
|
||||
@ -48,7 +49,7 @@ export const seedWorkspaceMemberWithDemoData = async (
|
||||
id: DEMO_SEED_WORKSPACE_MEMBER_IDS.TIM,
|
||||
nameFirstName: 'Tim',
|
||||
nameLastName: 'Apple',
|
||||
locale: 'en',
|
||||
locale: SOURCE_LOCALE,
|
||||
colorScheme: 'Light',
|
||||
userEmail: 'tim@apple.dev',
|
||||
userId: DEMO_SEED_USER_IDS.TIM,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { registerEnumType } from '@nestjs/graphql';
|
||||
|
||||
import { msg } from '@lingui/core/macro';
|
||||
import { APP_LOCALES, FieldMetadataType } from 'twenty-shared';
|
||||
import { APP_LOCALES, FieldMetadataType, SOURCE_LOCALE } from 'twenty-shared';
|
||||
|
||||
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
|
||||
|
||||
@ -107,7 +107,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity {
|
||||
label: msg`Language`,
|
||||
description: msg`Preferred language`,
|
||||
icon: 'IconLanguage',
|
||||
defaultValue: "'en'",
|
||||
defaultValue: `'${SOURCE_LOCALE}'`,
|
||||
})
|
||||
locale: keyof typeof APP_LOCALES;
|
||||
|
||||
|
||||
@ -1,14 +0,0 @@
|
||||
export const APP_LOCALES = {
|
||||
en: 'en',
|
||||
'fr-FR': 'fr-FR',
|
||||
'de-DE': 'de-DE',
|
||||
'it-IT': 'it-IT',
|
||||
'es-ES': 'es-ES',
|
||||
'ko-KR': 'ko-KR',
|
||||
'ja-JP': 'ja-JP',
|
||||
'pt-PT': 'pt-PT',
|
||||
'pt-BR': 'pt-BR',
|
||||
'zh-CN': 'zh-CN',
|
||||
'zh-TW': 'zh-TW',
|
||||
'pseudo-en': 'pseudo-en',
|
||||
} as const;
|
||||
@ -1,5 +1,5 @@
|
||||
export * from './FieldForTotalCountAggregateOperation';
|
||||
export * from './Locales';
|
||||
export * from './SettingsFeatures';
|
||||
export * from './TwentyCompaniesBaseUrl';
|
||||
export * from './TwentyIconsBaseUrl';
|
||||
export * from './SettingsFeatures';
|
||||
|
||||
|
||||
35
packages/twenty-shared/src/i18n/constants/AppLocales.ts
Normal file
35
packages/twenty-shared/src/i18n/constants/AppLocales.ts
Normal file
@ -0,0 +1,35 @@
|
||||
import { SOURCE_LOCALE } from 'src/i18n/constants/SourceLocale';
|
||||
|
||||
export const APP_LOCALES = {
|
||||
[SOURCE_LOCALE]: SOURCE_LOCALE,
|
||||
'pseudo-en': 'pseudo-en',
|
||||
'af-ZA': 'af-ZA',
|
||||
'ar-SA': 'ar-SA',
|
||||
'ca-ES': 'ca-ES',
|
||||
'cs-CZ': 'cs-CZ',
|
||||
'da-DK': 'da-DK',
|
||||
'de-DE': 'de-DE',
|
||||
'el-GR': 'el-GR',
|
||||
'es-ES': 'es-ES',
|
||||
'fi-FI': 'fi-FI',
|
||||
'fr-FR': 'fr-FR',
|
||||
'he-IL': 'he-IL',
|
||||
'hu-HU': 'hu-HU',
|
||||
'it-IT': 'it-IT',
|
||||
'ja-JP': 'ja-JP',
|
||||
'ko-KR': 'ko-KR',
|
||||
'nl-NL': 'nl-NL',
|
||||
'no-NO': 'no-NO',
|
||||
'pl-PL': 'pl-PL',
|
||||
'pt-BR': 'pt-BR',
|
||||
'pt-PT': 'pt-PT',
|
||||
'ro-RO': 'ro-RO',
|
||||
'ru-RU': 'ru-RU',
|
||||
'sr-Cyrl': 'sr-Cyrl',
|
||||
'sv-SE': 'sv-SE',
|
||||
'tr-TR': 'tr-TR',
|
||||
'uk-UA': 'uk-UA',
|
||||
'vi-VN': 'vi-VN',
|
||||
'zh-CN': 'zh-CN',
|
||||
'zh-TW': 'zh-TW',
|
||||
} as const;
|
||||
@ -0,0 +1 @@
|
||||
export const SOURCE_LOCALE = 'en';
|
||||
3
packages/twenty-shared/src/i18n/index.ts
Normal file
3
packages/twenty-shared/src/i18n/index.ts
Normal file
@ -0,0 +1,3 @@
|
||||
export * from './constants/AppLocales';
|
||||
export * from './constants/SourceLocale';
|
||||
|
||||
@ -1,4 +1,6 @@
|
||||
export * from './constants';
|
||||
export * from './i18n';
|
||||
export * from './types';
|
||||
export * from './utils';
|
||||
export * from './workspace';
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { APP_LOCALES } from 'src/constants/Locales';
|
||||
import { APP_LOCALES } from 'src/i18n/constants/AppLocales';
|
||||
|
||||
export const isValidLocale = (
|
||||
value: string | null,
|
||||
|
||||
Reference in New Issue
Block a user