Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fc6aafd3c6 | ||
|
|
8076ff5b82 | ||
|
|
4257f30f12 | ||
|
|
28a1354928 | ||
|
|
a2d2db441f | ||
|
|
a4882089b1 | ||
|
|
f2828883ad | ||
|
|
1333c64d98 | ||
|
|
e1054b0474 | ||
|
|
457c6ed113 | ||
|
|
93c2ba153b | ||
|
|
b6e8103df7 | ||
|
|
ea850f323a | ||
|
|
fa5f758228 | ||
|
|
8694840b92 | ||
|
|
fba9ae6dfe | ||
|
|
cc29c25176 | ||
|
|
de1489aabb | ||
|
|
efab98a8f8 | ||
|
|
0b7024c94a | ||
|
|
5250d5c8d6 | ||
|
|
87083cb414 | ||
|
|
251a7b126b | ||
|
|
33e0794da9 | ||
|
|
3ce3793129 | ||
|
|
aa2f3438fa | ||
|
|
24873d0c1d | ||
|
|
83434deb22 | ||
|
|
826889715b | ||
|
|
f8b9e4d780 | ||
|
|
8512904c0a | ||
|
|
cf5649a1df | ||
|
|
fba4192d4b | ||
|
|
16bd0425e0 | ||
|
|
fd750c7c0e | ||
|
|
8112c3aab3 | ||
|
|
8a2a004fb5 | ||
|
|
53042cc9dc | ||
|
|
dd0ea2366f | ||
|
|
18a89b5152 | ||
|
|
19da80d2e4 | ||
|
|
3fe12cd8b5 | ||
|
|
dd1ac4deee | ||
|
|
e4150ff3cb | ||
|
|
caf44207fd | ||
|
|
1ba0c24071 | ||
|
|
21c3edf8d6 | ||
|
|
a7b75c61e8 | ||
|
|
f40aafb89f | ||
|
|
42e060ac74 | ||
|
|
b112d06f66 | ||
|
|
56874bf84b | ||
|
|
d2881bb4a2 | ||
|
|
1401f80081 | ||
|
|
71dbd1d66b | ||
|
|
6e7956b990 | ||
|
|
0469aba90b | ||
|
|
e457ade362 | ||
|
|
6023bda579 | ||
|
|
9e9ba73a43 | ||
|
|
d89474d43b | ||
|
|
b5e6600c73 | ||
|
|
3ad110da33 | ||
|
|
587281a541 | ||
|
|
b6901a49bf | ||
|
|
e1b99a6f39 | ||
|
|
4d78f5f97f | ||
|
|
ab277476a8 | ||
|
|
c95a84c8e5 | ||
|
|
78e10b2da5 | ||
|
|
bf704bd1bc | ||
|
|
b1c0613514 | ||
|
|
db8a60fe6f | ||
|
|
b7cfe89b14 | ||
|
|
4c2c9e4273 | ||
|
|
981b1bd767 | ||
|
|
53c6ddb2ad | ||
|
|
6f78a51da4 | ||
|
|
43af5ceb5e | ||
|
|
c23942ce6f | ||
|
|
8bd7b78825 | ||
|
|
797bb0559a | ||
|
|
dee779179b | ||
|
|
c40baf036c | ||
|
|
d3922a7f5b | ||
|
|
3c189688d0 | ||
|
|
aa399ca91e | ||
|
|
5c23b52c0d | ||
|
|
7bab6cab41 | ||
|
|
9da2a74d9e | ||
|
|
d6ae4d59f0 | ||
|
|
f30070c2c9 | ||
|
|
e1ce98825b | ||
|
|
e8db0176a1 | ||
|
|
6c2d64dcb2 | ||
|
|
8b10059e1b | ||
|
|
16fb4d406b | ||
|
|
8f2dddaa5f | ||
|
|
0249cf3b34 | ||
|
|
9a69cd0b61 | ||
|
|
704b18af30 | ||
|
|
0be700f376 | ||
|
|
8a3f8ef324 | ||
|
|
d4deca45e8 | ||
|
|
15eb96337f | ||
|
|
85d94822b3 | ||
|
|
69a00eaaf6 | ||
|
|
abecdbafc1 | ||
|
|
8f7a82f177 | ||
|
|
4a123a8eac | ||
|
|
ace515eea7 | ||
|
|
b5a1d1a895 | ||
|
|
721a34864f | ||
|
|
e2b2697fcc | ||
|
|
0de8140b3a | ||
|
|
27f542e132 | ||
|
|
897684f995 | ||
|
|
162c6bcaa3 | ||
|
|
82fa71c2cd | ||
|
|
04f9c5a5de | ||
|
|
3018e3ac89 | ||
|
|
2a8defe262 | ||
|
|
9da5cca82a | ||
|
|
fe98deef4e | ||
|
|
03800ce6d0 | ||
|
|
1794b3a611 | ||
|
|
e8488e1da0 | ||
|
|
c8011da4d7 | ||
|
|
446919bc72 | ||
|
|
637a7f0e64 | ||
|
|
d34ec7b253 | ||
|
|
04168e720c | ||
|
|
0cccb80221 | ||
|
|
e6bb3d4d51 | ||
|
|
5a8006f1dd | ||
|
|
b8406820ee | ||
|
|
3e1b5d23f5 | ||
|
|
bc8f71fab5 | ||
|
|
a86317eb71 | ||
|
|
ee5aa2393d | ||
|
|
d69932c6c4 | ||
|
|
6f5118c677 | ||
|
|
f8f11894e8 | ||
|
|
1844c39a99 | ||
|
|
35c6cb4f4a | ||
|
|
63a165666a | ||
|
|
b8d5f6d4b0 | ||
|
|
4e4c0ddd3c | ||
|
|
1802c30995 | ||
|
|
5b1091b19e | ||
|
|
cc6043be9f | ||
|
|
145ddba721 | ||
|
|
db88c93eff | ||
|
|
41674129c3 | ||
|
|
b84a31cb8a | ||
|
|
4a4ce9a6fe | ||
|
|
a7e6564017 | ||
|
|
7bd68ad176 | ||
|
|
2b77f598b2 | ||
|
|
9f4e8c046f | ||
|
|
e23688cb41 | ||
|
|
b6c079f050 | ||
|
|
5d9cd257ae | ||
|
|
025e50645d | ||
|
|
9e0402e691 | ||
|
|
1834b38d04 | ||
|
|
bd3ec6d5e3 | ||
|
|
fe6d0241a8 | ||
|
|
c6203d8928 | ||
|
|
8582bcccf5 | ||
|
|
11fb8e0284 | ||
|
|
b25ee28c12 | ||
|
|
46bbf02431 | ||
|
|
c6be260fec | ||
|
|
ccdc2835a2 | ||
|
|
b6e344e7be | ||
|
|
ab63214efa | ||
|
|
f121c94d4a | ||
|
|
2f7f28a574 | ||
|
|
6521d19238 | ||
|
|
c1d421de06 | ||
|
|
dd1d9c32c3 | ||
|
|
a049cd4a25 | ||
|
|
6611fbf9ac | ||
|
|
17474a0e1e | ||
|
|
3d90eb4eb9 | ||
|
|
89abf3db4f | ||
|
|
8b5c259c36 | ||
|
|
ea93ac6348 | ||
|
|
95eba07f6e | ||
|
|
6bc18960c9 | ||
|
|
07b25a2aad | ||
|
|
20895f1129 | ||
|
|
17b7e703b4 | ||
|
|
ff59658d39 | ||
|
|
f403c551d7 | ||
|
|
d4db399933 | ||
|
|
0226dec717 | ||
|
|
6451b7b5e3 | ||
|
|
69da046812 | ||
|
|
c798cccba7 | ||
|
|
59ae978ee3 | ||
|
|
26504f02a3 | ||
|
|
361b7682dd | ||
|
|
a627eff5c2 | ||
|
|
f365caa365 | ||
|
|
8fa09e21ec | ||
|
|
241d8820d7 | ||
|
|
e1f6c61651 | ||
|
|
6142e193ce | ||
|
|
10e140495c | ||
|
|
609e06fd14 | ||
|
|
2308091b13 | ||
|
|
6b184cc641 | ||
|
|
59e8e0633b | ||
|
|
ad2357a6fd | ||
|
|
27256c960e | ||
|
|
9353e777ea | ||
|
|
bb40bc9929 | ||
|
|
5e43839efb | ||
|
|
752eb93836 | ||
|
|
7eec64b6e0 | ||
|
|
cfae440a02 | ||
|
|
144a326709 | ||
|
|
4a4e65fe4a | ||
|
|
8c9fcfe5a4 | ||
|
|
0df07a766a | ||
|
|
256a5c1a2b | ||
|
|
1240d39f56 | ||
|
|
a062a17229 | ||
|
|
8abec309e0 | ||
|
|
bea75b9532 | ||
|
|
183dc40916 | ||
|
|
010b7663c4 | ||
|
|
5e905180c8 | ||
|
|
bc57e98949 | ||
|
|
7488c6727a | ||
|
|
2bc9691021 | ||
|
|
2b14cd5649 | ||
|
|
c03438a02e | ||
|
|
e94065fb44 | ||
|
|
55eadf1ab4 | ||
|
|
76bbffc315 | ||
|
|
da1413c5a1 | ||
|
|
c6afb0d1ba | ||
|
|
e47c19e86f | ||
|
|
6e92b19e01 | ||
|
|
9a2f7d8b71 | ||
|
|
44bf393b06 | ||
|
|
44d4e4efaf | ||
|
|
3357f93415 | ||
|
|
e6422ad08a | ||
|
|
8e6b175f34 | ||
|
|
51ea241a1c | ||
|
|
8385e2d08b | ||
|
|
7e07b3f7e9 | ||
|
|
1d4fc5ff4a | ||
|
|
e74c8723d0 | ||
|
|
aa5da92555 | ||
|
|
366106bb2b | ||
|
|
9cbc2e3df0 | ||
|
|
bc81853095 | ||
|
|
023d071103 | ||
|
|
b2012229f4 | ||
|
|
a26b3f54d6 | ||
|
|
a24e96ae0e | ||
|
|
f6e4cd45ed | ||
|
|
1c675149f7 | ||
|
|
06ff16e086 | ||
|
|
3c9bf2294f | ||
|
|
b13be7bd2e | ||
|
|
98475ee63e | ||
|
|
eea30828a4 | ||
|
|
ce07d2645c | ||
|
|
352cf3d38e | ||
|
|
3e20134676 | ||
|
|
d9ac662302 | ||
|
|
8e39585c0d | ||
|
|
859ed1d8dd | ||
|
|
da9e078283 | ||
|
|
3e5a6d0a5e | ||
|
|
b1c57edc90 | ||
|
|
8d35454dd8 | ||
|
|
78943b3370 | ||
|
|
8127e4f635 | ||
|
|
c294d967a3 | ||
|
|
391392dd87 | ||
|
|
e9e33c4d29 | ||
|
|
9af2628264 | ||
|
|
976c6afb4b | ||
|
|
a683827e4b | ||
|
|
e201da263d | ||
|
|
226b8f1b00 | ||
|
|
c19f6c3479 | ||
|
|
65bf836e8b | ||
|
|
7508f09ede | ||
|
|
d12bbdf9f1 | ||
|
|
f145862cf1 | ||
|
|
439ccb0a52 | ||
|
|
4eefa45164 | ||
|
|
937a393d74 | ||
|
|
3b9e7c38eb | ||
|
|
645d76fe69 | ||
|
|
d4c40113b1 | ||
|
|
a545b3adf3 | ||
|
|
fad02fa26b | ||
|
|
5bf21a9567 | ||
|
|
22e56339a1 | ||
|
|
589b4cf77e | ||
|
|
2cc59929b8 | ||
|
|
d02b5b4086 | ||
|
|
6f7e6e63f8 | ||
|
|
4c7d71e325 | ||
|
|
e64c4b8ab1 | ||
|
|
870069f682 | ||
|
|
5bd10d40cb | ||
|
|
90e884d33f | ||
|
|
151841d3db | ||
|
|
d8ab23046a | ||
|
|
c48fed6173 | ||
|
|
b3948d2406 | ||
|
|
1860768b52 | ||
|
|
760a21d8fa | ||
|
|
3660bec01d | ||
|
|
4827ad600d | ||
|
|
fe3dd40034 | ||
|
|
7af90eb4c4 | ||
|
|
16cb768c5c | ||
|
|
72b4b26e2c | ||
|
|
0f7adedc96 | ||
|
|
f55a20addc | ||
|
|
c36cfb3af9 | ||
|
|
80074bc21b | ||
|
|
8cc9f77417 | ||
|
|
7d6573e766 | ||
|
|
6ec06be18d | ||
|
|
7a7003d859 | ||
|
|
934abf1fb3 | ||
|
|
20f2a251b6 | ||
|
|
3e7ec4f756 | ||
|
|
ddd439031f | ||
|
|
2182821fe1 | ||
|
|
a58831978f | ||
|
|
b24046b1bb | ||
|
|
45b8a330c6 | ||
|
|
b70aa6f2ee | ||
|
|
877d6e9304 | ||
|
|
acead6169c | ||
|
|
f3f4dd7648 | ||
|
|
d601213c21 | ||
|
|
96c61df007 | ||
|
|
de1f8a4706 | ||
|
|
4680bc740a | ||
|
|
54e346a2aa | ||
|
|
fd23a6e5ff | ||
|
|
52cf6f4795 | ||
|
|
bc1b55ddc3 | ||
|
|
049a065307 | ||
|
|
0656b640d7 | ||
|
|
da394ffcdc | ||
|
|
e23fcb21ae | ||
|
|
0084946b76 | ||
|
|
6898a40ac3 | ||
|
|
e83e7b3b40 | ||
|
|
8b2a90dea1 | ||
|
|
e6dec51ca6 | ||
|
|
1c5f3ef5fa | ||
|
|
6e7d2db58f | ||
|
|
3ec72a2bca | ||
|
|
f9e826d37e | ||
|
|
9ad8287dbc | ||
|
|
8a21c19f03 | ||
|
|
aba55a5a34 | ||
|
|
ccf60284cf | ||
|
|
692e08f0d4 | ||
|
|
c50cdd9510 | ||
|
|
07bd2486ca | ||
|
|
e624e8deee | ||
|
|
da527f1780 | ||
|
|
3960b0f99d | ||
|
|
081f5fa766 | ||
|
|
3328998e61 | ||
|
|
2c5e3dba60 | ||
|
|
463a2995a9 | ||
|
|
6a412a531f | ||
|
|
c961d3a60d | ||
|
|
d7dabe5826 | ||
|
|
b49dc57bbf | ||
|
|
77ee016d6f | ||
|
|
cecb32cd89 | ||
|
|
3af5cde170 | ||
|
|
99438a810c | ||
|
|
bd162da318 | ||
|
|
70a295641d | ||
|
|
8c982653cf | ||
|
|
8309575a94 | ||
|
|
872c0e97f6 | ||
|
|
95014b0ac5 | ||
|
|
3876cb8250 | ||
|
|
24bae89ebc | ||
|
|
6d8cf442a7 | ||
|
|
7dac60cfee | ||
|
|
295f153abe | ||
|
|
5f390d75b0 | ||
|
|
548597bfd0 | ||
|
|
8b7188e85b | ||
|
|
4b34aa60b1 | ||
|
|
5f8fae9ada | ||
|
|
d99f027e8d | ||
|
|
bc94891a27 | ||
|
|
369abfe424 | ||
|
|
e666506ea3 | ||
|
|
3b3ed1a907 | ||
|
|
d8ea292321 | ||
|
|
183f497ad7 | ||
|
|
99f68416dc | ||
|
|
7b0bf7c4b0 | ||
|
|
8b513a7d3b | ||
|
|
7fe81f28b7 | ||
|
|
28028ca4c0 | ||
|
|
cfdb3f5778 | ||
|
|
0d40126a29 | ||
|
|
b8b00e5398 | ||
|
|
d59c989ecd | ||
|
|
69b3b34859 | ||
|
|
8c5335a863 | ||
|
|
5ba3c09b14 | ||
|
|
4ce607869e | ||
|
|
7065f6f15d | ||
|
|
1ecc5e2bf6 | ||
|
|
15a2cb5141 | ||
|
|
ecc21656cb | ||
|
|
62a58816e3 | ||
|
|
7921ee5216 | ||
|
|
ca9c070945 |
@@ -1,6 +1,7 @@
|
||||
module.exports = {
|
||||
root: true,
|
||||
extends: ['plugin:prettier/recommended', 'plugin:lingui/recommended'],
|
||||
ignorePatterns: ['node_modules'],
|
||||
plugins: [
|
||||
'@nx',
|
||||
'prefer-arrow',
|
||||
+114
-5
@@ -6,14 +6,74 @@ module.exports = {
|
||||
'plugin:react/recommended',
|
||||
'plugin:react-hooks/recommended',
|
||||
'plugin:storybook/recommended',
|
||||
'plugin:prettier/recommended',
|
||||
'plugin:lingui/recommended',
|
||||
'plugin:@nx/typescript'
|
||||
],
|
||||
plugins: ['react-hooks', 'react-refresh'],
|
||||
plugins: ['react-hooks', 'react-refresh', '@nx', 'prefer-arrow', 'import', 'unused-imports', 'unicorn', 'lingui'],
|
||||
rules: {
|
||||
'lingui/no-single-variables-to-translate': 'off',
|
||||
'func-style': ['error', 'declaration', { allowArrowFunctions: true }],
|
||||
'no-console': ['warn', { allow: ['group', 'groupCollapsed', 'groupEnd'] }],
|
||||
'no-control-regex': 0,
|
||||
'no-debugger': 'error',
|
||||
'no-duplicate-imports': 'error',
|
||||
'no-undef': 'off',
|
||||
'no-unused-vars': 'off',
|
||||
|
||||
'@nx/enforce-module-boundaries': [
|
||||
'error',
|
||||
{
|
||||
enforceBuildableLibDependency: true,
|
||||
allow: [],
|
||||
depConstraints: [
|
||||
{
|
||||
sourceTag: 'scope:shared',
|
||||
onlyDependOnLibsWithTags: ['scope:shared'],
|
||||
},
|
||||
{
|
||||
sourceTag: 'scope:backend',
|
||||
onlyDependOnLibsWithTags: ['scope:shared', 'scope:backend'],
|
||||
},
|
||||
{
|
||||
sourceTag: 'scope:frontend',
|
||||
onlyDependOnLibsWithTags: ['scope:shared', 'scope:frontend'],
|
||||
},
|
||||
{
|
||||
sourceTag: 'scope:zapier',
|
||||
onlyDependOnLibsWithTags: ['scope:shared'],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
|
||||
'import/no-relative-packages': 'error',
|
||||
'import/no-useless-path-segments': 'error',
|
||||
'import/no-duplicates': ['error', { considerQueryString: true }],
|
||||
|
||||
'prefer-arrow/prefer-arrow-functions': [
|
||||
'error',
|
||||
{
|
||||
disallowPrototype: true,
|
||||
singleReturnOnly: false,
|
||||
classPropertiesAllowed: false,
|
||||
},
|
||||
],
|
||||
|
||||
'unused-imports/no-unused-imports': 'warn',
|
||||
'unused-imports/no-unused-vars': [
|
||||
'warn',
|
||||
{
|
||||
vars: 'all',
|
||||
varsIgnorePattern: '^_',
|
||||
args: 'after-used',
|
||||
argsIgnorePattern: '^_',
|
||||
},
|
||||
],
|
||||
},
|
||||
overrides: [
|
||||
{
|
||||
files: ['*.ts', '*.tsx'],
|
||||
parserOptions: {
|
||||
project: ['./tsconfig.base.{json,*.json}'],
|
||||
},
|
||||
files: ['**/*.ts', '**/*.tsx'],
|
||||
rules: {
|
||||
'no-restricted-imports': [
|
||||
'error',
|
||||
@@ -37,6 +97,14 @@ module.exports = {
|
||||
],
|
||||
},
|
||||
],
|
||||
'@typescript-eslint/no-empty-interface': [
|
||||
'error',
|
||||
{
|
||||
allowSingleExtends: true,
|
||||
},
|
||||
],
|
||||
'@typescript-eslint/no-empty-function': 'off',
|
||||
'@typescript-eslint/no-explicit-any': 'off',
|
||||
'@nx/workspace-effect-components': 'error',
|
||||
'@nx/workspace-no-hardcoded-colors': 'error',
|
||||
'@nx/workspace-matching-state-variable': 'error',
|
||||
@@ -86,5 +154,46 @@ module.exports = {
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
files: ['*.js', '*.jsx'],
|
||||
extends: ['plugin:@nx/javascript'],
|
||||
rules: {},
|
||||
},
|
||||
{
|
||||
files: [
|
||||
'*.test.@(ts|tsx|js|jsx)',
|
||||
],
|
||||
env: {
|
||||
jest: true,
|
||||
},
|
||||
rules: {
|
||||
'@typescript-eslint/no-non-null-assertion': 'off',
|
||||
},
|
||||
},
|
||||
{
|
||||
files: ['**/*.constants.ts'],
|
||||
rules: {
|
||||
'@typescript-eslint/naming-convention': [
|
||||
'error',
|
||||
{
|
||||
selector: 'variable',
|
||||
format: ['UPPER_CASE'],
|
||||
},
|
||||
],
|
||||
'unicorn/filename-case': [
|
||||
'warn',
|
||||
{
|
||||
cases: {
|
||||
pascalCase: true,
|
||||
},
|
||||
},
|
||||
],
|
||||
'@nx/workspace-max-consts-per-file': ['error', { max: 1 }],
|
||||
},
|
||||
},
|
||||
{
|
||||
files: ['*.json'],
|
||||
parser: 'jsonc-eslint-parser',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -13,14 +13,10 @@ Good first issues are a great way to start contributing and get familiar with th
|
||||
|
||||
## Issue assignment
|
||||
|
||||
Having multiple contributors address the same issue can cause frustration.
|
||||
|
||||
To avoid conflicts, we follow these guidelines:
|
||||
1. If a core team member assigned you the issue within the last three days, your PR takes priority.
|
||||
2. Otherwise, the first submitted PR is prioritized.
|
||||
3. For "size: long" PRs, the assignment period extends to one week.
|
||||
|
||||
Please ensure you're assigned to an issue before starting work.
|
||||
1. For `Good First Issue` and `Experienced Contributor` issues without `size: long` labels, we'll merge the first PRs that meet our [code quality standards](https://twenty.com/developers). **We don't assign contributors to these issues**. For `priority: high` issues, our core team will step in within days if no adequate contributions are received.
|
||||
2. For `size: long` Issues, assigned contributors have one week to submit their first draft PR.
|
||||
|
||||
## How to Contribute
|
||||
|
||||
@@ -67,4 +63,4 @@ git push origin your-branch-name
|
||||
|
||||
## Reporting Issues
|
||||
|
||||
If you face any issues or have suggestions, please feel free to (create an issue on Twenty's GitHub repository)[https://github.com/twentyhq/twenty/issues/new]. Please provide as much detail as possible.
|
||||
If you face any issues or have suggestions, please feel free to (create an issue on Twenty's GitHub repository)[https://github.com/twentyhq/twenty/issues/new]. Please provide as much detail as possible.
|
||||
|
||||
@@ -20,7 +20,7 @@ runs:
|
||||
id: cache-primary-key-builder
|
||||
shell: bash
|
||||
run: |
|
||||
echo "CACHE_PRIMARY_KEY_PREFIX=${{ inputs.key }}-${{ github.ref_name }}" >> "${GITHUB_OUTPUT}"
|
||||
echo "CACHE_PRIMARY_KEY_PREFIX=v3-${{ inputs.key }}-${{ github.ref_name }}" >> "${GITHUB_OUTPUT}"
|
||||
- name: Restore cache
|
||||
uses: actions/cache/restore@v4
|
||||
id: restore-cache
|
||||
|
||||
@@ -25,8 +25,8 @@ runs:
|
||||
id: cache-node-modules
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
key: ${{ steps.globals.outputs.CACHE_KEY_PREFIX }}-${{github.sha}}
|
||||
restore-keys: ${{ steps.globals.outputs.CACHE_KEY_PREFIX }}-
|
||||
key: v3-${{ steps.globals.outputs.CACHE_KEY_PREFIX }}-${{github.sha}}
|
||||
restore-keys: v3-${{ steps.globals.outputs.CACHE_KEY_PREFIX }}-
|
||||
path: ${{ steps.globals.outputs.PATH_TO_CACHE }}
|
||||
- name: Install Dependencies
|
||||
if: ${{ steps.cache-node-modules.outputs.cache-hit != 'true' && steps.cache-node-modules.outputs.cache-matched-key == '' }}
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
name: CI Emails
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
pull_request:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changed-files-check:
|
||||
uses: ./.github/workflows/changed-files.yaml
|
||||
with:
|
||||
files: |
|
||||
package.json
|
||||
packages/twenty-emails/**
|
||||
emails-test:
|
||||
needs: changed-files-check
|
||||
if: needs.changed-files-check.outputs.any_changed == 'true'
|
||||
timeout-minutes: 10
|
||||
runs-on: depot-ubuntu-24.04-8
|
||||
env:
|
||||
NX_REJECT_UNKNOWN_LOCAL_CACHE: 0
|
||||
steps:
|
||||
- name: Fetch custom Github Actions and base branch history
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Install dependencies
|
||||
uses: ./.github/workflows/actions/yarn-install
|
||||
- name: Build twenty-emails
|
||||
run: npx nx build twenty-emails
|
||||
- name: Run email tests
|
||||
run: |
|
||||
# Start the email server in the background
|
||||
npx nx run twenty-emails:start &
|
||||
SERVER_PID=$!
|
||||
|
||||
# Wait for server to start
|
||||
sleep 20
|
||||
|
||||
# Check if server is running
|
||||
if ! curl -s http://localhost:4001/preview/test.email > /dev/null; then
|
||||
echo "Email server failed to start"
|
||||
kill $SERVER_PID
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Kill the server
|
||||
kill $SERVER_PID
|
||||
ci-emails-status-check:
|
||||
if: always() && !cancelled()
|
||||
timeout-minutes: 1
|
||||
runs-on: depot-ubuntu-24.04-8
|
||||
needs: [changed-files-check, emails-test]
|
||||
steps:
|
||||
- name: Fail job if any needs failed
|
||||
if: contains(needs.*.result, 'failure')
|
||||
run: exit 1
|
||||
@@ -168,9 +168,25 @@ jobs:
|
||||
image: redis
|
||||
ports:
|
||||
- 6379:6379
|
||||
clickhouse:
|
||||
image: clickhouse/clickhouse-server:latest
|
||||
env:
|
||||
CLICKHOUSE_PASSWORD: clickhousePassword
|
||||
CLICKHOUSE_URL: "http://default:clickhousePassword@localhost:8123/twenty"
|
||||
ports:
|
||||
- 8123:8123
|
||||
- 9000:9000
|
||||
options: >-
|
||||
--health-cmd "clickhouse-client --host=localhost --port=9000 --user=default --password=clickhousePassword --query='SELECT 1'"
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
env:
|
||||
NX_REJECT_UNKNOWN_LOCAL_CACHE: 0
|
||||
NODE_ENV: test
|
||||
ANALYTICS_ENABLED: true
|
||||
CLICKHOUSE_URL: "http://default:clickhousePassword@localhost:8123/twenty"
|
||||
CLICKHOUSE_PASSWORD: clickhousePassword
|
||||
steps:
|
||||
- name: Fetch custom Github Actions and base branch history
|
||||
uses: actions/checkout@v4
|
||||
@@ -178,7 +194,7 @@ jobs:
|
||||
fetch-depth: 0
|
||||
- name: Install dependencies
|
||||
uses: ./.github/workflows/actions/yarn-install
|
||||
- name: Update .env.test for billing
|
||||
- name: Update .env.test for integrations tests
|
||||
run: |
|
||||
echo "IS_BILLING_ENABLED=true" >> .env.test
|
||||
echo "BILLING_STRIPE_API_KEY=test-api-key" >> .env.test
|
||||
@@ -198,6 +214,10 @@ jobs:
|
||||
- name: Server / Create Test DB
|
||||
run: |
|
||||
PGPASSWORD=postgres psql -h localhost -p 5432 -U postgres -d postgres -c 'CREATE DATABASE "test";'
|
||||
- name: Run ClickHouse migrations
|
||||
run: npx nx clickhouse:migrate twenty-server
|
||||
- name: Run ClickHouse seeds
|
||||
run: npx nx clickhouse:seed twenty-server
|
||||
- name: Server / Run Integration Tests
|
||||
uses: ./.github/workflows/actions/nx-affected
|
||||
with:
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
name: CI Tinybird
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- 'package.json'
|
||||
- 'packages/twenty-tinybird/**'
|
||||
|
||||
pull_request:
|
||||
paths:
|
||||
- 'package.json'
|
||||
- 'packages/twenty-tinybird/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
ci:
|
||||
uses: tinybirdco/ci/.github/workflows/ci.yml@main
|
||||
with:
|
||||
data_project_dir: packages/twenty-tinybird
|
||||
secrets:
|
||||
tb_admin_token: ${{ secrets.TB_ADMIN_TOKEN }}
|
||||
tb_host: https://api.eu-central-1.aws.tinybird.co
|
||||
@@ -21,7 +21,7 @@ concurrency:
|
||||
|
||||
jobs:
|
||||
danger-js:
|
||||
timeout-minutes: 3
|
||||
timeout-minutes: 5
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event.action != 'closed'
|
||||
steps:
|
||||
|
||||
+2
-1
@@ -42,4 +42,5 @@ dump.rdb
|
||||
/flake.lock
|
||||
/flake.nix
|
||||
|
||||
.crowdin.yml
|
||||
.crowdin.yml
|
||||
.react-email/
|
||||
@@ -17,4 +17,7 @@ postgres-on-docker:
|
||||
-c "CREATE DATABASE \"test\" WITH OWNER postgres;"
|
||||
|
||||
redis-on-docker:
|
||||
docker run -d --name twenty_redis -p 6379:6379 redis/redis-stack-server:latest
|
||||
docker run -d --name twenty_redis -p 6379:6379 redis/redis-stack-server:latest
|
||||
|
||||
clickhouse-on-docker:
|
||||
docker run -d --name twenty_clickhouse -p 8123:8123 -p 9000:9000 -e CLICKHOUSE_PASSWORD=devPassword clickhouse/clickhouse-server:latest
|
||||
+6
-4
@@ -44,7 +44,7 @@
|
||||
"@octokit/graphql": "^7.0.2",
|
||||
"@ptc-org/nestjs-query-core": "^4.2.0",
|
||||
"@ptc-org/nestjs-query-typeorm": "4.2.1-alpha.2",
|
||||
"@react-email/components": "0.0.32",
|
||||
"@react-email/components": "0.0.35",
|
||||
"@react-email/render": "0.0.17",
|
||||
"@sentry/node": "^8",
|
||||
"@sentry/profiling-node": "^8",
|
||||
@@ -99,7 +99,9 @@
|
||||
"graphql-fields": "^2.0.3",
|
||||
"graphql-middleware": "^6.1.35",
|
||||
"graphql-rate-limit": "^3.3.0",
|
||||
"graphql-redis-subscriptions": "^2.7.0",
|
||||
"graphql-scalars": "^1.23.0",
|
||||
"graphql-sse": "^2.5.4",
|
||||
"graphql-subscriptions": "2.0.0",
|
||||
"graphql-tag": "^2.12.6",
|
||||
"graphql-type-json": "^0.3.2",
|
||||
@@ -140,8 +142,6 @@
|
||||
"next-mdx-remote": "^4.4.1",
|
||||
"nodemailer": "^6.9.8",
|
||||
"openapi-types": "^12.1.3",
|
||||
"overlayscrollbars": "^2.6.1",
|
||||
"overlayscrollbars-react": "^0.5.4",
|
||||
"passport": "^0.7.0",
|
||||
"passport-google-oauth20": "^2.0.0",
|
||||
"passport-jwt": "^4.0.1",
|
||||
@@ -183,6 +183,7 @@
|
||||
"semver": "^7.5.4",
|
||||
"sharp": "^0.32.1",
|
||||
"slash": "^5.1.0",
|
||||
"storybook-addon-mock-date": "^0.6.0",
|
||||
"stripe": "^17.3.1",
|
||||
"ts-key-enum": "^2.0.12",
|
||||
"tslib": "^2.3.0",
|
||||
@@ -356,7 +357,8 @@
|
||||
"type-fest": "4.10.1",
|
||||
"typescript": "5.3.3",
|
||||
"prosemirror-model": "1.23.0",
|
||||
"yjs": "13.6.18"
|
||||
"yjs": "13.6.18",
|
||||
"graphql-redis-subscriptions/ioredis": "^5.6.0"
|
||||
},
|
||||
"version": "0.2.1",
|
||||
"nx": {},
|
||||
|
||||
@@ -1,11 +1,16 @@
|
||||
module.exports = {
|
||||
extends: ['../../.eslintrc.cjs', '../../.eslintrc.react.cjs'],
|
||||
ignorePatterns: ['!**/*', 'node_modules', 'dist', '**/generated/*'],
|
||||
root: true,
|
||||
extends: ['../../.eslintrc.global.cjs', '../../.eslintrc.react.cjs'],
|
||||
ignorePatterns: [
|
||||
'node_modules',
|
||||
'dist',
|
||||
'**/generated/*',
|
||||
],
|
||||
overrides: [
|
||||
{
|
||||
files: ['*.ts', '*.tsx'],
|
||||
files: ['**/*.ts', '**/*.tsx'],
|
||||
parserOptions: {
|
||||
project: ['packages/twenty-chrome-extension/tsconfig.{json,*.json}'],
|
||||
project: ['packages/twenty-chrome-extension/tsconfig.*.json'],
|
||||
},
|
||||
rules: {
|
||||
'@nx/workspace-explicit-boolean-predicates-in-if': 'warn',
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { isDefined } from 'twenty-shared';
|
||||
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
// Open options page programmatically in a new tab.
|
||||
// chrome.runtime.onInstalled.addListener((details) => {
|
||||
// if (details.reason === 'install') {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { isDefined } from 'twenty-shared';
|
||||
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
interface CustomDiv extends HTMLDivElement {
|
||||
onClickHandler: (newHandler: () => void) => void;
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import { isDefined } from 'twenty-shared';
|
||||
import { createDefaultButton } from '~/contentScript/createButton';
|
||||
import changeSidePanelUrl from '~/contentScript/utils/changeSidepanelUrl';
|
||||
import extractCompanyLinkedinLink from '~/contentScript/utils/extractCompanyLinkedinLink';
|
||||
import extractDomain from '~/contentScript/utils/extractDomain';
|
||||
import { createCompany, fetchCompany } from '~/db/company.db';
|
||||
import { CompanyInput } from '~/db/types/company.types';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
export const checkIfCompanyExists = async () => {
|
||||
const { tab: activeTab } = await chrome.runtime.sendMessage({
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { isDefined } from 'twenty-shared';
|
||||
import { createDefaultButton } from '~/contentScript/createButton';
|
||||
import changeSidePanelUrl from '~/contentScript/utils/changeSidepanelUrl';
|
||||
import extractFirstAndLastName from '~/contentScript/utils/extractFirstAndLastName';
|
||||
import { createPerson, fetchPerson } from '~/db/person.db';
|
||||
import { PersonInput } from '~/db/types/person.types';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
export const checkIfPersonExists = async () => {
|
||||
const { tab: activeTab } = await chrome.runtime.sendMessage({
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { isDefined } from 'twenty-shared';
|
||||
import { insertButtonForCompany } from '~/contentScript/extractCompanyProfile';
|
||||
import { insertButtonForPerson } from '~/contentScript/extractPersonProfile';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
// Inject buttons into the DOM when SPA is reloaded on the resource url.
|
||||
// e.g. reload the page when on https://www.linkedin.com/in/mabdullahabaid/
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { isDefined } from 'twenty-shared';
|
||||
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
const btn = document.getElementById('twenty-settings-btn');
|
||||
if (!isDefined(btn)) {
|
||||
const div = document.createElement('div');
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { isDefined } from 'twenty-shared';
|
||||
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
const changeSidePanelUrl = async (url: string) => {
|
||||
if (isDefined(url)) {
|
||||
chrome.storage.local.set({ navigateSidepanel: 'sidepanel' });
|
||||
|
||||
+1
-4
@@ -1,7 +1,4 @@
|
||||
// Extract "https://www.linkedin.com/company/twenty/" from any of the following urls, which the user can visit while on the company page.
|
||||
|
||||
import { isDefined } from 'twenty-shared';
|
||||
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
// "https://www.linkedin.com/company/twenty/" "https://www.linkedin.com/company/twenty/about/" "https://www.linkedin.com/company/twenty/people/".
|
||||
const extractCompanyLinkedinLink = (activeTabUrl: string) => {
|
||||
// Regular expression to match the company ID
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { isDefined } from 'twenty-shared';
|
||||
import {
|
||||
ExchangeAuthCodeInput,
|
||||
ExchangeAuthCodeResponse,
|
||||
@@ -6,6 +5,7 @@ import {
|
||||
} from '~/db/types/auth.types';
|
||||
import { EXCHANGE_AUTHORIZATION_CODE } from '~/graphql/auth/mutations';
|
||||
import { callMutation } from '~/utils/requestDb';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
export const exchangeAuthorizationCode = async (
|
||||
exchangeAuthCodeInput: ExchangeAuthCodeInput,
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { isDefined } from 'twenty-shared';
|
||||
import {
|
||||
CompanyInput,
|
||||
CreateCompanyResponse,
|
||||
@@ -9,6 +8,7 @@ import { CREATE_COMPANY } from '~/graphql/company/mutations';
|
||||
import { FIND_COMPANY } from '~/graphql/company/queries';
|
||||
|
||||
import { callMutation, callQuery } from '../utils/requestDb';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
export const fetchCompany = async (
|
||||
companyfilerInput: CompanyFilterInput,
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { isDefined } from 'twenty-shared';
|
||||
import {
|
||||
CreatePersonResponse,
|
||||
FindPersonResponse,
|
||||
@@ -9,6 +8,7 @@ import { CREATE_PERSON } from '~/graphql/person/mutations';
|
||||
import { FIND_PERSON } from '~/graphql/person/queries';
|
||||
|
||||
import { callMutation, callQuery } from '../utils/requestDb';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
export const fetchPerson = async (
|
||||
personFilterData: PersonFilterInput,
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import { ApolloClient, InMemoryCache } from '@apollo/client';
|
||||
|
||||
import { isDefined } from 'twenty-shared';
|
||||
import { Tokens } from '~/db/types/auth.types';
|
||||
import { RENEW_TOKEN } from '~/graphql/auth/mutations';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
export const renewToken = async (
|
||||
appToken: string,
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import { useEffect, useState } from 'react';
|
||||
|
||||
import { isDefined } from 'twenty-shared';
|
||||
import Settings from '~/options/Settings';
|
||||
import Sidepanel from '~/options/Sidepanel';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
const App = () => {
|
||||
const [currentScreen, setCurrentScreen] = useState('');
|
||||
|
||||
@@ -3,8 +3,8 @@ import { useEffect, useState } from 'react';
|
||||
|
||||
import { MainButton } from '@/ui/input/button/MainButton';
|
||||
import { TextInput } from '@/ui/input/components/TextInput';
|
||||
import { isDefined } from 'twenty-shared';
|
||||
import { clearStore } from '~/utils/apolloClient';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
const StyledWrapper = styled.div`
|
||||
align-items: center;
|
||||
|
||||
@@ -2,7 +2,7 @@ import styled from '@emotion/styled';
|
||||
import { useCallback, useEffect, useRef, useState } from 'react';
|
||||
|
||||
import { MainButton } from '@/ui/input/button/MainButton';
|
||||
import { isDefined } from 'twenty-shared';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
const StyledIframe = styled.iframe`
|
||||
display: block;
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import styled from '@emotion/styled';
|
||||
import { motion } from 'framer-motion';
|
||||
import { useEffect, useState } from 'react';
|
||||
|
||||
import { isDefined } from 'twenty-shared';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
export type ToggleSize = 'small' | 'medium';
|
||||
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import { ApolloClient, from, HttpLink, InMemoryCache } from '@apollo/client';
|
||||
import { setContext } from '@apollo/client/link/context';
|
||||
import { onError } from '@apollo/client/link/error';
|
||||
|
||||
import { isDefined } from 'twenty-shared';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
export const clearStore = () => {
|
||||
chrome.storage.local.remove([
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import { OperationVariables } from '@apollo/client';
|
||||
import { DocumentNode } from 'graphql';
|
||||
|
||||
import { isDefined } from 'twenty-shared';
|
||||
import getApolloClient from '~/utils/apolloClient';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
export const callQuery = async <T>(
|
||||
query: DocumentNode,
|
||||
|
||||
@@ -1,14 +1,27 @@
|
||||
# Makefile for building Twenty CRM docker images.
|
||||
# Set the tag and/or target build platform using make command-line variables assignments.
|
||||
#
|
||||
# Optional make variables:
|
||||
# PLATFORM - defaults to 'linux/amd64'
|
||||
# TAG - defaults to 'latest'
|
||||
#
|
||||
# Example: make
|
||||
# Example: make PLATFORM=linux/aarch64 TAG=my-tag
|
||||
|
||||
PLATFORM ?= linux/amd64
|
||||
TAG ?= latest
|
||||
|
||||
prod-build:
|
||||
@cd ../.. && docker build -f ./packages/twenty-docker/twenty/Dockerfile --tag twenty . && cd -
|
||||
@cd ../.. && docker build -f ./packages/twenty-docker/twenty/Dockerfile --platform $(PLATFORM) --tag twenty:$(TAG) . && cd -
|
||||
|
||||
prod-run:
|
||||
@docker run -d -p 3000:3000 --name twenty twenty
|
||||
@docker run -d -p 3000:3000 --name twenty twenty:$(TAG)
|
||||
|
||||
prod-postgres-run:
|
||||
@docker run -d -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres --name twenty-postgres twenty-postgres
|
||||
@docker run -d -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres --name twenty-postgres twenty-postgres:$(TAG)
|
||||
|
||||
prod-website-build:
|
||||
@cd ../.. && docker build -f ./packages/twenty-docker/twenty-website/Dockerfile --tag twenty-website . && cd -
|
||||
@cd ../.. && docker build -f ./packages/twenty-docker/twenty-website/Dockerfile --platform $(PLATFORM) --tag twenty-website:$(TAG) . && cd -
|
||||
|
||||
prod-website-run:
|
||||
@docker run -d -p 3000:3000 --name twenty-website twenty-website
|
||||
@docker run -d -p 3000:3000 --name twenty-website twenty-website:$(TAG)
|
||||
|
||||
@@ -70,6 +70,8 @@ services:
|
||||
|
||||
worker:
|
||||
image: twentycrm/twenty:${TAG:-latest}
|
||||
volumes:
|
||||
- server-local-data:/app/packages/twenty-server/${STORAGE_LOCAL_PATH:-.local-storage}
|
||||
command: ["yarn", "worker:prod"]
|
||||
environment:
|
||||
PG_DATABASE_URL: postgres://${PG_DATABASE_USER:-postgres}:${PG_DATABASE_PASSWORD:-postgres}@${PG_DATABASE_HOST:-db}:${PG_DATABASE_PORT:-5432}/default
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
# README
|
||||
DISCLAIMER: The k8s and podman deployments are not maintained by the core team.
|
||||
These files are provided and maintained by the community. Twenty core team
|
||||
maintains support for docker deployment.
|
||||
|
||||
## Overview
|
||||
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
# How to deploy twenty on podman
|
||||
|
||||
DISCLAIMER: The k8s and podman deployments are not maintained by the core team.
|
||||
These files are provided and maintained by the community. Twenty core team
|
||||
maintains support for docker deployment.
|
||||
|
||||
|
||||
## How to use
|
||||
|
||||
1. Edit `.env` file. At the minimum set `POSTGRES_PASSWORD`, `SERVER_URL`, and `APP_SECRET`.
|
||||
2. Start twenty by running `podman-compose up -d`.
|
||||
|
||||
If you need to stop twenty, you can do so by running `podman-compose down`.
|
||||
|
||||
|
||||
### Install systemd service (optional)
|
||||
|
||||
If you want to install a systemd service to run twenty, you can use the provided systemd service.
|
||||
|
||||
Edit `twentycrm.service` and change these two variables:
|
||||
|
||||
|
||||
WorkingDirectory=/opt/apps/twenty
|
||||
EnvironmentFile=/opt/apps/twenty/.env
|
||||
|
||||
`WorkingDirectory` should be changed to the path in which `podman-compose.yml` is located.
|
||||
|
||||
`EnvironmentFile` should be changed to the path in which your `.env`file is located.
|
||||
|
||||
You can run the script `install-systemd-user-service` to install the systemd service under the current user.
|
||||
|
||||
|
||||
./install-systemd-user-service
|
||||
|
||||
Note: this script will enable the service and also start it. So it will assume that twenty is not currently running.
|
||||
If you started it previously, bring it down using:
|
||||
|
||||
podman-compose down
|
||||
|
||||
|
||||
|
||||
## Compatibility
|
||||
|
||||
These files should be compatible with podman 4.3+.
|
||||
|
||||
I have tested this on Debian GNU/Linux 12 (bookworm) and with the podman that is distributed with the official Debian stable mirrors (podman v4.3.1+ds1-8+deb12u1, podman-compose v1.0.3-3).
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
mkdir -p ~/.config/systemd/user
|
||||
[ -f twentycrm.service ] || { echo "Error: twentycrm.service not found"; exit 1; }
|
||||
cp twentycrm.service ~/.config/systemd/user
|
||||
|
||||
|
||||
systemctl --user daemon-reload
|
||||
systemctl --user enable twentycrm.service
|
||||
systemctl --user start twentycrm.service
|
||||
@@ -0,0 +1,71 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
if [ ! -f "$(dirname "$0")/.env" ]; then
|
||||
echo "Error: .env file not found"
|
||||
exit 1
|
||||
fi
|
||||
source "$(dirname "$0")/.env"
|
||||
|
||||
## steps to cleanup and start over from scratch - useful when testing
|
||||
#podman pod stop twenty-pod
|
||||
#podman pod rm twenty-pod
|
||||
#podman volume rm twenty-db-data twenty-server-data twenty-redis-data
|
||||
# end of cleanup
|
||||
|
||||
podman volume create twenty-db-data
|
||||
podman volume create twenty-server-data
|
||||
podman volume create twenty-redis-data
|
||||
|
||||
podman pod create --name twenty-pod -p 127.0.0.1:8080:3000
|
||||
|
||||
podman run -d --pod twenty-pod --name twenty-db \
|
||||
-e POSTGRES_DB=twenty \
|
||||
-e POSTGRES_USER=twenty \
|
||||
-e POSTGRES_PASSWORD="$POSTGRES_PASSWORD" \
|
||||
-v twenty-db-data:/var/lib/postgresql/data:Z \
|
||||
docker.io/library/postgres:16
|
||||
|
||||
podman run -d --pod twenty-pod --name twenty-redis \
|
||||
-v twenty-redis-data:/data:Z \
|
||||
docker.io/library/redis:latest
|
||||
|
||||
podman run -d --pod twenty-pod --name twenty-server \
|
||||
-e NODE_PORT=3000 \
|
||||
-e SERVER_URL="$SERVER_URL" \
|
||||
-e PG_DATABASE_URL="postgresql://twenty:$POSTGRES_PASSWORD@twenty-db:5432/twenty" \
|
||||
-e REDIS_URL="redis://twenty-redis:6379" \
|
||||
-e APP_SECRET="$APP_SECRET" \
|
||||
-e NODE_ENV=production \
|
||||
-e LOG_LEVEL=info \
|
||||
-v twenty-server-data:/app/docker-data:Z \
|
||||
docker.io/twentycrm/twenty:latest
|
||||
|
||||
podman run -d --pod twenty-pod --name twenty-worker \
|
||||
--init \
|
||||
-e SERVER_URL="$SERVER_URL" \
|
||||
-e PG_DATABASE_URL="postgresql://twenty:$POSTGRES_PASSWORD@twenty-db:5432/twenty" \
|
||||
-e REDIS_URL="redis://twenty-redis:6379" \
|
||||
-e APP_SECRET="$APP_SECRET" \
|
||||
-e DISABLE_DB_MIGRATIONS=true \
|
||||
-e NODE_ENV=production \
|
||||
-e LOG_LEVEL=info \
|
||||
-v twenty-server-data:/app/docker-data:Z \
|
||||
docker.io/twentycrm/twenty:latest \
|
||||
yarn worker:prod
|
||||
|
||||
# wait some time, check status
|
||||
sleep 30
|
||||
podman ps --pod -f name=twenty-pod
|
||||
|
||||
|
||||
mkdir -p ~/.config/systemd/user
|
||||
if [ ! -f "twentycrm.service" ]; then
|
||||
echo "Error: twentycrm.service file not found"
|
||||
exit 1
|
||||
fi
|
||||
cp twentycrm.service ~/.config/systemd/user
|
||||
|
||||
systemctl --user daemon-reload
|
||||
systemctl --user enable twentycrm.service
|
||||
systemctl --user start twentycrm.service
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
db:
|
||||
container_name: twenty-db
|
||||
image: postgres:16
|
||||
environment:
|
||||
POSTGRES_DB: twenty
|
||||
POSTGRES_USER: twenty
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
volumes:
|
||||
- twenty-db-data:/var/lib/postgresql/data:Z
|
||||
|
||||
redis:
|
||||
container_name: twenty-redis
|
||||
image: redis:latest
|
||||
volumes:
|
||||
- twenty-redis-data:/data:Z
|
||||
|
||||
server:
|
||||
container_name: twenty-server
|
||||
image: twentycrm/twenty:latest
|
||||
environment:
|
||||
NODE_PORT: "3000"
|
||||
SERVER_URL: ${SERVER_URL}
|
||||
PG_DATABASE_URL: "postgresql://twenty:${POSTGRES_PASSWORD}@twenty-db:5432/twenty"
|
||||
REDIS_URL: "redis://twenty-redis:6379"
|
||||
APP_SECRET: ${APP_SECRET}
|
||||
NODE_ENV: production
|
||||
LOG_LEVEL: info
|
||||
volumes:
|
||||
- twenty-server-data:/app/docker-data:Z
|
||||
ports:
|
||||
- 127.0.0.1:8080:3000
|
||||
|
||||
worker:
|
||||
container_name: twenty-worker
|
||||
image: twentycrm/twenty:latest
|
||||
command: yarn worker:prod
|
||||
environment:
|
||||
SERVER_URL: ${SERVER_URL}
|
||||
PG_DATABASE_URL: "postgresql://twenty:${POSTGRES_PASSWORD}@twenty-db:5432/twenty"
|
||||
REDIS_URL: "redis://twenty-redis:6379"
|
||||
APP_SECRET: ${APP_SECRET}
|
||||
DISABLE_DB_MIGRATIONS: "true"
|
||||
NODE_ENV: production
|
||||
LOG_LEVEL: info
|
||||
volumes:
|
||||
- twenty-server-data:/app/docker-data:Z
|
||||
init: true
|
||||
|
||||
volumes:
|
||||
twenty-db-data:
|
||||
twenty-server-data:
|
||||
twenty-redis-data:
|
||||
@@ -0,0 +1,15 @@
|
||||
[Unit]
|
||||
Description=TwentyCRM Container Stack via Podman-Compose
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/apps/twenty
|
||||
EnvironmentFile=/opt/apps/twenty/.env
|
||||
ExecStart=/usr/bin/podman-compose -f podman-compose.yml up -d
|
||||
ExecStop=/usr/bin/podman-compose -f podman-compose.yml down
|
||||
RemainAfterExit=yes
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
|
||||
@@ -8,6 +8,8 @@ COPY ./yarn.lock .
|
||||
COPY ./.yarnrc.yml .
|
||||
COPY ./.yarn/releases /app/.yarn/releases
|
||||
COPY ./tools/eslint-rules /app/tools/eslint-rules
|
||||
COPY ./packages/twenty-ui/package.json /app/packages/twenty-ui/
|
||||
COPY ./packages/twenty-shared/package.json /app/packages/twenty-shared/
|
||||
COPY ./packages/twenty-website/package.json /app/packages/twenty-website/package.json
|
||||
|
||||
RUN yarn
|
||||
@@ -17,6 +19,7 @@ ENV KEYSTATIC_GITHUB_CLIENT_SECRET="<fake build value>"
|
||||
ENV KEYSTATIC_SECRET="<fake build value>"
|
||||
ENV NEXT_PUBLIC_KEYSTATIC_GITHUB_APP_SLUG="<fake build value>"
|
||||
|
||||
COPY ./packages/twenty-ui /app/packages/twenty-ui
|
||||
COPY ./packages/twenty-website /app/packages/twenty-website
|
||||
RUN npx nx build twenty-website
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ WORKDIR /app
|
||||
COPY ./package.json ./yarn.lock ./.yarnrc.yml ./tsconfig.base.json ./nx.json /app/
|
||||
COPY ./.yarn/releases /app/.yarn/releases
|
||||
|
||||
COPY ./.prettierrc /app/
|
||||
COPY ./packages/twenty-emails/package.json /app/packages/twenty-emails/
|
||||
COPY ./packages/twenty-server/package.json /app/packages/twenty-server/
|
||||
COPY ./packages/twenty-server/patches /app/packages/twenty-server/patches
|
||||
@@ -63,8 +64,6 @@ WORKDIR /app/packages/twenty-server
|
||||
|
||||
ARG REACT_APP_SERVER_BASE_URL
|
||||
ENV REACT_APP_SERVER_BASE_URL $REACT_APP_SERVER_BASE_URL
|
||||
ARG SENTRY_RELEASE
|
||||
ENV SENTRY_RELEASE $SENTRY_RELEASE
|
||||
|
||||
ARG APP_VERSION
|
||||
ENV APP_VERSION $APP_VERSION
|
||||
|
||||
@@ -10,12 +10,14 @@ if [ "${DISABLE_DB_MIGRATIONS}" != "true" ] && [ ! -f /app/docker-data/db_status
|
||||
PGPASS=$(echo $PG_DATABASE_URL | awk -F ':' '{print $3}' | awk -F '@' '{print $1}')
|
||||
PGHOST=$(echo $PG_DATABASE_URL | awk -F '@' '{print $2}' | awk -F ':' '{print $1}')
|
||||
PGPORT=$(echo $PG_DATABASE_URL | awk -F ':' '{print $4}' | awk -F '/' '{print $1}')
|
||||
PGPASSWORD=${PGPASS} psql -h ${PGHOST} -p ${PGPORT} -U ${PGUSER} -d postgres -tc "SELECT 1 FROM pg_database WHERE datname = 'default'" | grep -q 1 || \
|
||||
PGPASSWORD=${PGPASS} psql -h ${PGHOST} -p ${PGPORT} -U ${PGUSER} -d postgres -c "CREATE DATABASE \"default\""
|
||||
PGDATABASE=$(echo $PG_DATABASE_URL | awk -F ':' '{print $4}' | awk -F '/' '{print $2}')
|
||||
PGPASSWORD=${PGPASS} psql -h ${PGHOST} -p ${PGPORT} -U ${PGUSER} -d postgres -tc "SELECT 1 FROM pg_database WHERE datname = '${PGDATABASE}'" | grep -q 1 || \
|
||||
PGPASSWORD=${PGPASS} psql -h ${PGHOST} -p ${PGPORT} -U ${PGUSER} -d postgres -c "CREATE DATABASE \"${PGDATABASE}\""
|
||||
|
||||
# Run setup and migration scripts
|
||||
NODE_OPTIONS="--max-old-space-size=1500" tsx ./scripts/setup-db.ts
|
||||
yarn database:migrate:prod
|
||||
yarn command:prod upgrade
|
||||
|
||||
# Mark initialization as done
|
||||
echo "Successfuly migrated DB!"
|
||||
|
||||
@@ -3,18 +3,4 @@ FRONTEND_BASE_URL=http://localhost:3001
|
||||
BACKEND_BASE_URL=http://localhost:3000
|
||||
DEFAULT_LOGIN=tim@apple.dev
|
||||
DEFAULT_PASSWORD=Applecar2025
|
||||
WEBSITE_URL=https://twenty.com
|
||||
|
||||
# === DO NOT USE, WORK IN PROGRESS ===
|
||||
# This URL must have trailing forward slash as all REST API endpoints have object after it
|
||||
# Documentation for REST API: https://twenty.com/developers/rest-api/core#/
|
||||
# REST_API_BASE_URL=http://localhost:3000/rest/
|
||||
|
||||
# Documentation for GraphQL API: https://twenty.com/developers/graphql/core
|
||||
# GRAPHQL_BASE_URL=http://localhost:3000/graphql
|
||||
|
||||
# Without this key, all API tests will fail, to generate this key
|
||||
# Log in to Twenty workspace, go to Settings > Developers, generate new key and paste it here
|
||||
# In order to use it, header Authorization: Bearer token must be used
|
||||
# This key works for both REST and GraphQL API
|
||||
# API_DEV_KEY=fill_with_proper_key
|
||||
WEBSITE_URL=https://twenty.com
|
||||
@@ -17,6 +17,7 @@ export class WorkflowVisualizerPage {
|
||||
readonly deactivateWorkflowButton: Locator;
|
||||
readonly addTriggerButton: Locator;
|
||||
readonly commandMenu: Locator;
|
||||
readonly stepHeaderInCommandMenu: Locator;
|
||||
readonly workflowNameLabel: Locator;
|
||||
readonly triggerNode: Locator;
|
||||
readonly background: Locator;
|
||||
@@ -68,6 +69,9 @@ export class WorkflowVisualizerPage {
|
||||
});
|
||||
this.addTriggerButton = page.getByText('Add a Trigger');
|
||||
this.commandMenu = page.getByTestId('command-menu');
|
||||
this.stepHeaderInCommandMenu = this.commandMenu.getByTestId(
|
||||
'workflow-step-header',
|
||||
);
|
||||
this.workflowNameLabel = page
|
||||
.getByTestId('top-bar-title')
|
||||
.getByText(this.workflowName);
|
||||
@@ -114,7 +118,7 @@ export class WorkflowVisualizerPage {
|
||||
.getByTestId(`row-id-${this.workflowId}`)
|
||||
.getByRole('link', { name: this.workflowName });
|
||||
|
||||
await workflowLink.click();
|
||||
await workflowLink.click({ force: true });
|
||||
|
||||
await this.waitForWorkflowVisualizerLoad();
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ export const test = base.extend<{ screenshotHook: void }>({
|
||||
),
|
||||
});
|
||||
},
|
||||
{ auto: true }, // automatic fixture runs with every test
|
||||
{ auto: true },
|
||||
],
|
||||
});
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ export class InsertFieldData {
|
||||
'//label[contains(., "POST CODE")]/../div[last()]/input',
|
||||
);
|
||||
this.countrySelect = page.locator(
|
||||
'//span[contains(., "COUNTRY")]/../div[last()]/input',
|
||||
'//span[contains(., "COUNTRY")]/../div[last()]/div',
|
||||
);
|
||||
this.arrayValueInput = page.locator("//input[@placeholder='Enter value']");
|
||||
this.arrayAddValueButton = page.locator(
|
||||
|
||||
@@ -1,5 +1,55 @@
|
||||
import { Locator, Page } from '@playwright/test';
|
||||
|
||||
export class StripePage {
|
||||
// TODO: implement all necessary methods (staging/sandbox page - does it differ anyhow from normal page?)
|
||||
private readonly cardNumberInput: Locator;
|
||||
private readonly cardExpiryInput: Locator;
|
||||
private readonly cardCvcInput: Locator;
|
||||
private readonly cardholderNameInput: Locator;
|
||||
private readonly startTrialButton: Locator;
|
||||
private readonly cancelSubscriptionButton: Locator;
|
||||
private readonly confirmButton: Locator;
|
||||
private readonly returnToTwentyLink: Locator;
|
||||
|
||||
constructor(public readonly page: Page) {
|
||||
this.cardNumberInput = page.getByPlaceholder('1234 1234 1234 1234');
|
||||
this.cardExpiryInput = page.getByPlaceholder('MM / YY');
|
||||
this.cardCvcInput = page.getByPlaceholder('CVC');
|
||||
this.cardholderNameInput = page.getByPlaceholder('Full name on card');
|
||||
this.startTrialButton = page.getByTestId('hosted-payment-submit-button');
|
||||
this.cancelSubscriptionButton = page.locator(
|
||||
'a[data-test="cancel-subscription"]',
|
||||
);
|
||||
this.confirmButton = page.getByTestId('confirm');
|
||||
this.returnToTwentyLink = page.getByTestId('return-to-business-link');
|
||||
}
|
||||
|
||||
async fillCardNumber(number: string) {
|
||||
await this.cardNumberInput.fill(number);
|
||||
}
|
||||
|
||||
async fillCardExpiry(expiry: string) {
|
||||
await this.cardExpiryInput.fill(expiry);
|
||||
}
|
||||
|
||||
async fillCardCvc(cvc: string) {
|
||||
await this.cardCvcInput.fill(cvc);
|
||||
}
|
||||
|
||||
async fillCardholderName(name: string) {
|
||||
await this.cardholderNameInput.fill(name);
|
||||
}
|
||||
|
||||
async startTrial() {
|
||||
await this.startTrialButton.click();
|
||||
}
|
||||
|
||||
async clickCancelSubscription() {
|
||||
await this.cancelSubscriptionButton.click();
|
||||
await this.confirmButton.click();
|
||||
await this.page.getByTestId('cancellation_reason_cancel').click();
|
||||
}
|
||||
|
||||
async returnToTwenty() {
|
||||
await this.returnToTwentyLink.click();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ export class AccountsSection {
|
||||
private readonly addBlocklistField: Locator;
|
||||
private readonly addBlocklistButton: Locator;
|
||||
private readonly connectWithGoogleButton: Locator;
|
||||
private readonly connectWithMicrosoftButton: Locator;
|
||||
|
||||
constructor(public readonly page: Page) {
|
||||
this.page = page;
|
||||
@@ -22,6 +23,9 @@ export class AccountsSection {
|
||||
this.connectWithGoogleButton = page.getByRole('button', {
|
||||
name: 'Connect with Google',
|
||||
});
|
||||
this.connectWithMicrosoftButton = page.getByRole('button', {
|
||||
name: 'Connect with Microsoft',
|
||||
});
|
||||
}
|
||||
|
||||
async clickAddAccount() {
|
||||
@@ -51,4 +55,8 @@ export class AccountsSection {
|
||||
async linkGoogleAccount() {
|
||||
await this.connectWithGoogleButton.click();
|
||||
}
|
||||
|
||||
async linkMicrosoftAccount() {
|
||||
await this.connectWithMicrosoftButton.click();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
import { Locator, Page } from '@playwright/test';
|
||||
|
||||
export class APIsSection {
|
||||
private readonly createAPIKeyButton: Locator;
|
||||
private readonly regenerateAPIKeyButton: Locator;
|
||||
private readonly nameOfAPIKeyInput: Locator;
|
||||
private readonly expirationDateAPIKeySelect: Locator;
|
||||
private readonly cancelButton: Locator;
|
||||
private readonly saveButton: Locator;
|
||||
private readonly deleteButton: Locator;
|
||||
|
||||
constructor(public readonly page: Page) {
|
||||
this.page = page;
|
||||
this.createAPIKeyButton = page.getByRole('link', {
|
||||
name: 'Create API Key',
|
||||
});
|
||||
this.nameOfAPIKeyInput = page
|
||||
.getByPlaceholder('E.g. backoffice integration')
|
||||
.first();
|
||||
this.expirationDateAPIKeySelect = page.locator(
|
||||
'div[aria-controls="object-field-type-select-options"]',
|
||||
);
|
||||
this.regenerateAPIKeyButton = page.getByRole('button', {
|
||||
name: 'Regenerate Key',
|
||||
});
|
||||
this.cancelButton = page.getByRole('button', { name: 'Cancel' });
|
||||
this.saveButton = page.getByRole('button', { name: 'Save' });
|
||||
this.deleteButton = page.getByRole('button', { name: 'Delete' });
|
||||
}
|
||||
|
||||
async createAPIKey() {
|
||||
await this.createAPIKeyButton.click();
|
||||
}
|
||||
|
||||
async typeAPIKeyName(name: string) {
|
||||
await this.nameOfAPIKeyInput.clear();
|
||||
await this.nameOfAPIKeyInput.fill(name);
|
||||
}
|
||||
|
||||
async selectAPIExpirationDate(date: string) {
|
||||
await this.expirationDateAPIKeySelect.click();
|
||||
await this.page.getByText(date, { exact: true }).click();
|
||||
}
|
||||
|
||||
async regenerateAPIKey() {
|
||||
await this.regenerateAPIKeyButton.click();
|
||||
}
|
||||
|
||||
async deleteAPIKey() {
|
||||
await this.deleteButton.click();
|
||||
}
|
||||
|
||||
async clickCancelButton() {
|
||||
await this.cancelButton.click();
|
||||
}
|
||||
|
||||
async clickSaveButton() {
|
||||
await this.saveButton.click();
|
||||
}
|
||||
|
||||
async checkAPIKeyDetails(name: string) {
|
||||
await this.page.locator(`//a/div[contains(.,'${name}')][first()]`).click();
|
||||
}
|
||||
}
|
||||
@@ -1,123 +0,0 @@
|
||||
import { Locator, Page } from '@playwright/test';
|
||||
|
||||
export class DevelopersSection {
|
||||
private readonly readDocumentationButton: Locator;
|
||||
private readonly createAPIKeyButton: Locator;
|
||||
private readonly regenerateAPIKeyButton: Locator;
|
||||
private readonly nameOfAPIKeyInput: Locator;
|
||||
private readonly expirationDateAPIKeySelect: Locator;
|
||||
private readonly createWebhookButton: Locator;
|
||||
private readonly webhookURLInput: Locator;
|
||||
private readonly webhookDescription: Locator;
|
||||
private readonly webhookFilterObjectSelect: Locator;
|
||||
private readonly webhookFilterActionSelect: Locator;
|
||||
private readonly cancelButton: Locator;
|
||||
private readonly saveButton: Locator;
|
||||
private readonly deleteButton: Locator;
|
||||
|
||||
constructor(public readonly page: Page) {
|
||||
this.page = page;
|
||||
this.readDocumentationButton = page.getByRole('link', {
|
||||
name: 'Read documentation',
|
||||
});
|
||||
this.createAPIKeyButton = page.getByRole('link', {
|
||||
name: 'Create API Key',
|
||||
});
|
||||
this.createWebhookButton = page.getByRole('link', {
|
||||
name: 'Create Webhook',
|
||||
});
|
||||
this.nameOfAPIKeyInput = page
|
||||
.getByPlaceholder('E.g. backoffice integration')
|
||||
.first();
|
||||
this.expirationDateAPIKeySelect = page
|
||||
.locator('div')
|
||||
.filter({ hasText: /^Never$/ })
|
||||
.nth(3); // good enough if expiration date will change only 1 time
|
||||
this.regenerateAPIKeyButton = page.getByRole('button', {
|
||||
name: 'Regenerate Key',
|
||||
});
|
||||
this.webhookURLInput = page.getByPlaceholder('URL');
|
||||
this.webhookDescription = page.getByPlaceholder('Write a description');
|
||||
this.webhookFilterObjectSelect = page
|
||||
.locator('div')
|
||||
.filter({ hasText: /^All Objects$/ })
|
||||
.nth(3); // works only for first filter
|
||||
this.webhookFilterActionSelect = page
|
||||
.locator('div')
|
||||
.filter({ hasText: /^All Actions$/ })
|
||||
.nth(3); // works only for first filter
|
||||
this.cancelButton = page.getByRole('button', { name: 'Cancel' });
|
||||
this.saveButton = page.getByRole('button', { name: 'Save' });
|
||||
this.deleteButton = page.getByRole('button', { name: 'Delete' });
|
||||
}
|
||||
|
||||
async openDocumentation() {
|
||||
await this.readDocumentationButton.click();
|
||||
}
|
||||
|
||||
async createAPIKey() {
|
||||
await this.createAPIKeyButton.click();
|
||||
}
|
||||
|
||||
async typeAPIKeyName(name: string) {
|
||||
await this.nameOfAPIKeyInput.clear();
|
||||
await this.nameOfAPIKeyInput.fill(name);
|
||||
}
|
||||
|
||||
async selectAPIExpirationDate(date: string) {
|
||||
await this.expirationDateAPIKeySelect.click();
|
||||
await this.page.getByText(date, { exact: true }).click();
|
||||
}
|
||||
|
||||
async regenerateAPIKey() {
|
||||
await this.regenerateAPIKeyButton.click();
|
||||
}
|
||||
|
||||
async deleteAPIKey() {
|
||||
await this.deleteButton.click();
|
||||
}
|
||||
|
||||
async deleteWebhook() {
|
||||
await this.deleteButton.click();
|
||||
}
|
||||
|
||||
async createWebhook() {
|
||||
await this.createWebhookButton.click();
|
||||
}
|
||||
|
||||
async typeWebhookURL(url: string) {
|
||||
await this.webhookURLInput.fill(url);
|
||||
}
|
||||
|
||||
async typeWebhookDescription(description: string) {
|
||||
await this.webhookDescription.fill(description);
|
||||
}
|
||||
|
||||
async selectWebhookObject(object: string) {
|
||||
// TODO: finish
|
||||
}
|
||||
|
||||
async selectWebhookAction(action: string) {
|
||||
// TODO: finish
|
||||
}
|
||||
|
||||
async deleteWebhookFilter() {
|
||||
// TODO: finish
|
||||
}
|
||||
|
||||
async clickCancelButton() {
|
||||
await this.cancelButton.click();
|
||||
}
|
||||
|
||||
async clickSaveButton() {
|
||||
await this.saveButton.click();
|
||||
}
|
||||
|
||||
async checkAPIKeyDetails(name: string) {
|
||||
await this.page.locator(`//a/div[contains(.,'${name}')][first()]`).click();
|
||||
}
|
||||
|
||||
async checkWebhookDetails(name: string) {
|
||||
await this.page.locator(`//a/div[contains(.,'${name}')][first()]`).click();
|
||||
}
|
||||
}
|
||||
@@ -7,11 +7,12 @@ export class ExperienceSection {
|
||||
private readonly dateFormatDropdown: Locator;
|
||||
private readonly timeFormatDropdown: Locator;
|
||||
private readonly searchInput: Locator;
|
||||
private readonly languageDropdown: Locator;
|
||||
|
||||
constructor(public readonly page: Page) {
|
||||
this.page = page;
|
||||
this.lightThemeButton = page.getByText('AaLight'); // it works
|
||||
this.darkThemeButton = page.getByText('AaDark');
|
||||
this.lightThemeButton = page.locator('div[variant="Light"]').first();
|
||||
this.darkThemeButton = page.locator('div[variant="Dark"]').first();
|
||||
this.timezoneDropdown = page.locator(
|
||||
'//span[contains(., "Time zone")]/../div/div/div',
|
||||
);
|
||||
@@ -22,6 +23,9 @@ export class ExperienceSection {
|
||||
'//span[contains(., "Time format")]/../div/div/div',
|
||||
);
|
||||
this.searchInput = page.getByPlaceholder('Search');
|
||||
this.languageDropdown = page.locator(
|
||||
'//h2[contains(., "Language")]/../../../div/div/div',
|
||||
);
|
||||
}
|
||||
|
||||
async changeThemeToLight() {
|
||||
@@ -52,4 +56,9 @@ export class ExperienceSection {
|
||||
await this.timeFormatDropdown.click();
|
||||
await this.page.getByText(timeFormat, { exact: true }).click();
|
||||
}
|
||||
|
||||
async selectLanguage(language: string) {
|
||||
await this.languageDropdown.click();
|
||||
await this.page.getByText(language, { exact: true }).click();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,159 +0,0 @@
|
||||
import { Locator, Page } from '@playwright/test';
|
||||
|
||||
export class FunctionsSection {
|
||||
private readonly newFunctionButton: Locator;
|
||||
private readonly functionNameInput: Locator;
|
||||
private readonly functionDescriptionInput: Locator;
|
||||
private readonly editorTab: Locator;
|
||||
private readonly codeEditorField: Locator;
|
||||
private readonly resetButton: Locator;
|
||||
private readonly publishButton: Locator;
|
||||
private readonly testButton: Locator;
|
||||
private readonly testTab: Locator;
|
||||
private readonly runFunctionButton: Locator;
|
||||
private readonly inputField: Locator;
|
||||
private readonly settingsTab: Locator;
|
||||
private readonly searchVariableInput: Locator;
|
||||
private readonly addVariableButton: Locator;
|
||||
private readonly nameVariableInput: Locator;
|
||||
private readonly valueVariableInput: Locator;
|
||||
private readonly cancelVariableButton: Locator;
|
||||
private readonly saveVariableButton: Locator;
|
||||
private readonly editVariableButton: Locator;
|
||||
private readonly deleteVariableButton: Locator;
|
||||
private readonly cancelButton: Locator;
|
||||
private readonly saveButton: Locator;
|
||||
private readonly deleteButton: Locator;
|
||||
|
||||
constructor(public readonly page: Page) {
|
||||
this.newFunctionButton = page.getByRole('button', { name: 'New Function' });
|
||||
this.functionNameInput = page.getByPlaceholder('Name');
|
||||
this.functionDescriptionInput = page.getByPlaceholder('Description');
|
||||
this.editorTab = page.getByTestId('tab-editor');
|
||||
this.codeEditorField = page.getByTestId('dummyInput'); // TODO: fix
|
||||
this.resetButton = page.getByRole('button', { name: 'Reset' });
|
||||
this.publishButton = page.getByRole('button', { name: 'Publish' });
|
||||
this.testButton = page.getByRole('button', { name: 'Test' });
|
||||
this.testTab = page.getByTestId('tab-test');
|
||||
this.runFunctionButton = page.getByRole('button', { name: 'Run Function' });
|
||||
this.inputField = page.getByTestId('dummyInput'); // TODO: fix
|
||||
this.settingsTab = page.getByTestId('tab-settings');
|
||||
this.searchVariableInput = page.getByPlaceholder('Search a variable');
|
||||
this.addVariableButton = page.getByRole('button', { name: 'Add Variable' });
|
||||
this.nameVariableInput = page.getByPlaceholder('Name').nth(1);
|
||||
this.valueVariableInput = page.getByPlaceholder('Value');
|
||||
this.cancelVariableButton = page.locator('.css-uwqduk').first(); // TODO: fix
|
||||
this.saveVariableButton = page.locator('.css-uwqduk').nth(1); // TODO: fix
|
||||
this.editVariableButton = page.getByText('Edit', { exact: true });
|
||||
this.deleteVariableButton = page.getByText('Delete', { exact: true });
|
||||
this.cancelButton = page.getByRole('button', { name: 'Cancel' });
|
||||
this.saveButton = page.getByRole('button', { name: 'Save' });
|
||||
this.deleteButton = page.getByRole('button', { name: 'Delete function' });
|
||||
}
|
||||
|
||||
async clickNewFunction() {
|
||||
await this.newFunctionButton.click();
|
||||
}
|
||||
|
||||
async typeFunctionName(name: string) {
|
||||
await this.functionNameInput.fill(name);
|
||||
}
|
||||
|
||||
async typeFunctionDescription(description: string) {
|
||||
await this.functionDescriptionInput.fill(description);
|
||||
}
|
||||
|
||||
async checkFunctionDetails(name: string) {
|
||||
await this.page.getByRole('link', { name: `${name} nodejs18.x` }).click();
|
||||
}
|
||||
|
||||
async clickEditorTab() {
|
||||
await this.editorTab.click();
|
||||
}
|
||||
|
||||
async clickResetButton() {
|
||||
await this.resetButton.click();
|
||||
}
|
||||
|
||||
async clickPublishButton() {
|
||||
await this.publishButton.click();
|
||||
}
|
||||
|
||||
async clickTestButton() {
|
||||
await this.testButton.click();
|
||||
}
|
||||
|
||||
async typeFunctionCode() {
|
||||
// TODO: finish once utils are merged
|
||||
}
|
||||
|
||||
async clickTestTab() {
|
||||
await this.testTab.click();
|
||||
}
|
||||
|
||||
async runFunction() {
|
||||
await this.runFunctionButton.click();
|
||||
}
|
||||
|
||||
async typeFunctionInput() {
|
||||
// TODO: finish once utils are merged
|
||||
}
|
||||
|
||||
async clickSettingsTab() {
|
||||
await this.settingsTab.click();
|
||||
}
|
||||
|
||||
async searchVariable(name: string) {
|
||||
await this.searchVariableInput.fill(name);
|
||||
}
|
||||
|
||||
async addVariable() {
|
||||
await this.addVariableButton.click();
|
||||
}
|
||||
|
||||
async typeVariableName(name: string) {
|
||||
await this.nameVariableInput.fill(name);
|
||||
}
|
||||
|
||||
async typeVariableValue(value: string) {
|
||||
await this.valueVariableInput.fill(value);
|
||||
}
|
||||
|
||||
async editVariable(name: string) {
|
||||
await this.page
|
||||
.locator(
|
||||
`//div[@data-testid='tooltip' and contains(., '${name}')]/../../div[last()]/div/div/button`,
|
||||
)
|
||||
.click();
|
||||
await this.editVariableButton.click();
|
||||
}
|
||||
|
||||
async deleteVariable(name: string) {
|
||||
await this.page
|
||||
.locator(
|
||||
`//div[@data-testid='tooltip' and contains(., '${name}')]/../../div[last()]/div/div/button`,
|
||||
)
|
||||
.click();
|
||||
await this.deleteVariableButton.click();
|
||||
}
|
||||
|
||||
async cancelVariable() {
|
||||
await this.cancelVariableButton.click();
|
||||
}
|
||||
|
||||
async saveVariable() {
|
||||
await this.saveVariableButton.click();
|
||||
}
|
||||
|
||||
async clickCancelButton() {
|
||||
await this.cancelButton.click();
|
||||
}
|
||||
|
||||
async clickSaveButton() {
|
||||
await this.saveButton.click();
|
||||
}
|
||||
|
||||
async clickDeleteButton() {
|
||||
await this.deleteButton.click();
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,8 @@ export class GeneralSection {
|
||||
private readonly workspaceNameField: Locator;
|
||||
private readonly supportSwitch: Locator;
|
||||
private readonly deleteWorkspaceButton: Locator;
|
||||
private readonly customizeDomainButton: Locator;
|
||||
private readonly subdomainInput: Locator;
|
||||
|
||||
constructor(public readonly page: Page) {
|
||||
this.page = page;
|
||||
@@ -12,6 +14,12 @@ export class GeneralSection {
|
||||
this.deleteWorkspaceButton = page.getByRole('button', {
|
||||
name: 'Delete workspace',
|
||||
});
|
||||
this.customizeDomainButton = page.getByRole('button', {
|
||||
name: 'Customize domain',
|
||||
});
|
||||
this.subdomainInput = page.locator(
|
||||
'//div[contains(.,".twenty-main.com")]/../input',
|
||||
);
|
||||
}
|
||||
|
||||
async changeWorkspaceName(workspaceName: string) {
|
||||
@@ -26,4 +34,10 @@ export class GeneralSection {
|
||||
async clickDeleteWorkSpaceButton() {
|
||||
await this.deleteWorkspaceButton.click();
|
||||
}
|
||||
|
||||
async changeSubdomain(subdomain: string) {
|
||||
await this.customizeDomainButton.click();
|
||||
await this.subdomainInput.fill(subdomain);
|
||||
await this.page.getByRole('button', { name: 'Save' }).click();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ export class NewFieldSection {
|
||||
private readonly relationFieldLink: Locator;
|
||||
private readonly relationTypeSelect: Locator;
|
||||
private readonly objectDestinationSelect: Locator;
|
||||
private readonly relationIconSelect: Locator;
|
||||
private readonly relationFieldNameInput: Locator;
|
||||
private readonly fullNameFieldLink: Locator;
|
||||
private readonly UUIDFieldLink: Locator;
|
||||
@@ -225,6 +226,11 @@ export class NewFieldSection {
|
||||
await this.page.getByTestId('tooltip').filter({ hasText: name }).click();
|
||||
}
|
||||
|
||||
async selectRelationIcon(name: string) {
|
||||
await this.relationIconSelect.click();
|
||||
await this.page.getByTitle(name).click();
|
||||
}
|
||||
|
||||
async typeRelationName(name: string) {
|
||||
await this.relationFieldNameInput.clear();
|
||||
await this.relationFieldNameInput.fill(name);
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
import { Locator, Page } from '@playwright/test';
|
||||
|
||||
export class RolesSection {
|
||||
private readonly page: Page;
|
||||
private readonly createRoleButton: Locator;
|
||||
private readonly defaultRoleDropdown: Locator;
|
||||
|
||||
constructor(page: Page) {
|
||||
this.page = page;
|
||||
this.createRoleButton = page.getByRole('button', { name: 'Create Role' });
|
||||
this.defaultRoleDropdown = page.getByTestId('tooltip');
|
||||
}
|
||||
|
||||
async clickCreateRoleButton() {
|
||||
await this.createRoleButton.click();
|
||||
}
|
||||
|
||||
async selectDefaultRole(role: string) {
|
||||
await this.defaultRoleDropdown.click();
|
||||
await this.page.getByTestId('tooltip').getByText(role).click();
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,28 @@
|
||||
import { Locator, Page } from '@playwright/test';
|
||||
|
||||
export class SecuritySection {
|
||||
private readonly googleToggle: Locator;
|
||||
private readonly microsoftToggle: Locator;
|
||||
private readonly passwordToggle: Locator;
|
||||
private readonly inviteByLinkToggle: Locator;
|
||||
|
||||
constructor(public readonly page: Page) {
|
||||
this.inviteByLinkToggle = page.locator('input[type="checkbox"]').nth(1);
|
||||
this.googleToggle = page.getByLabel('Google');
|
||||
this.microsoftToggle = page.getByLabel('Microsoft');
|
||||
this.passwordToggle = page.getByLabel('Password');
|
||||
this.inviteByLinkToggle = page.getByLabel('Invite by Link');
|
||||
}
|
||||
|
||||
async toggleGoogle() {
|
||||
await this.googleToggle.click();
|
||||
}
|
||||
|
||||
async toggleMicrosoft() {
|
||||
await this.microsoftToggle.click();
|
||||
}
|
||||
|
||||
async togglePassword() {
|
||||
await this.passwordToggle.click();
|
||||
}
|
||||
|
||||
async toggleInviteByLink() {
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
import { Locator, Page } from '@playwright/test';
|
||||
|
||||
export class WebhooksSection {
|
||||
private readonly createWebhookButton: Locator;
|
||||
private readonly webhookURLInput: Locator;
|
||||
private readonly webhookDescription: Locator;
|
||||
private readonly deleteButton: Locator;
|
||||
|
||||
constructor(public readonly page: Page) {
|
||||
this.page = page;
|
||||
this.createWebhookButton = page.getByRole('link', {
|
||||
name: 'Create Webhook',
|
||||
});
|
||||
this.webhookURLInput = page.getByPlaceholder('URL');
|
||||
this.webhookDescription = page.getByPlaceholder('Write a description');
|
||||
this.deleteButton = page.getByRole('button', { name: 'Delete' });
|
||||
}
|
||||
|
||||
async deleteWebhook() {
|
||||
await this.deleteButton.click();
|
||||
}
|
||||
|
||||
async createWebhook() {
|
||||
await this.createWebhookButton.click();
|
||||
}
|
||||
|
||||
async typeWebhookURL(url: string) {
|
||||
await this.webhookURLInput.clear();
|
||||
await this.webhookURLInput.fill(url);
|
||||
}
|
||||
|
||||
async typeWebhookDescription(description: string) {
|
||||
await this.webhookDescription.fill(description);
|
||||
}
|
||||
|
||||
async selectWebhookObject(index: number, object: string) {
|
||||
await this.page
|
||||
.locator(
|
||||
`//div[aria-controls="object-webhook-type-select-${index}-options"]`,
|
||||
)
|
||||
.click();
|
||||
await this.page.getByRole('option').getByText(object).click();
|
||||
}
|
||||
|
||||
async selectWebhookAction(index: number, action: string) {
|
||||
await this.page
|
||||
.locator(
|
||||
`//div[aria-controls="operation-webhook-type-select-${index}-options"]`,
|
||||
)
|
||||
.click();
|
||||
await this.page.getByRole('option').getByText(action).click();
|
||||
}
|
||||
|
||||
async deleteWebhookFilter(index: number) {
|
||||
await this.page
|
||||
.locator(
|
||||
`//div[aria-controls="object-webhook-type-select-${index}-options"]/../..//button`,
|
||||
)
|
||||
.click();
|
||||
}
|
||||
|
||||
async checkWebhookDetails(name: string) {
|
||||
await this.page.locator(`//a/div[contains(.,'${name}')][first()]`).click();
|
||||
}
|
||||
}
|
||||
@@ -9,13 +9,15 @@ export class SettingsPage {
|
||||
private readonly calendarsLink: Locator;
|
||||
private readonly generalLink: Locator;
|
||||
private readonly membersLink: Locator;
|
||||
private readonly rolesLink: Locator;
|
||||
private readonly dataModelLink: Locator;
|
||||
private readonly developersLink: Locator;
|
||||
private readonly functionsLink: Locator;
|
||||
private readonly securityLink: Locator;
|
||||
private readonly integrationsLink: Locator;
|
||||
private readonly securityLink: Locator;
|
||||
private readonly apisLink: Locator;
|
||||
private readonly webhooksLink: Locator;
|
||||
private readonly adminPanelLink: Locator;
|
||||
private readonly labLink: Locator;
|
||||
private readonly releasesLink: Locator;
|
||||
private readonly logoutLink: Locator;
|
||||
private readonly advancedToggle: Locator;
|
||||
|
||||
constructor(public readonly page: Page) {
|
||||
@@ -28,13 +30,15 @@ export class SettingsPage {
|
||||
this.calendarsLink = page.getByRole('link', { name: 'Calendars' });
|
||||
this.generalLink = page.getByRole('link', { name: 'General' });
|
||||
this.membersLink = page.getByRole('link', { name: 'Members' });
|
||||
this.rolesLink = page.getByRole('link', { name: 'Roles' });
|
||||
this.dataModelLink = page.getByRole('link', { name: 'Data model' });
|
||||
this.developersLink = page.getByRole('link', { name: 'Developers' });
|
||||
this.functionsLink = page.getByRole('link', { name: 'Functions' });
|
||||
this.integrationsLink = page.getByRole('link', { name: 'Integrations' });
|
||||
this.securityLink = page.getByRole('link', { name: 'Security' });
|
||||
this.apisLink = page.getByRole('link', { name: 'APIs' });
|
||||
this.webhooksLink = page.getByRole('link', { name: 'Webhooks' });
|
||||
this.adminPanelLink = page.getByRole('link', { name: 'Admin Panel' });
|
||||
this.labLink = page.getByRole('link', { name: 'Lab' });
|
||||
this.releasesLink = page.getByRole('link', { name: 'Releases' });
|
||||
this.logoutLink = page.getByText('Logout');
|
||||
this.advancedToggle = page.locator('input[type="checkbox"]').first();
|
||||
}
|
||||
|
||||
@@ -70,24 +74,36 @@ export class SettingsPage {
|
||||
await this.membersLink.click();
|
||||
}
|
||||
|
||||
async goToRolesSection() {
|
||||
await this.rolesLink.click();
|
||||
}
|
||||
|
||||
async goToDataModelSection() {
|
||||
await this.dataModelLink.click();
|
||||
}
|
||||
|
||||
async goToDevelopersSection() {
|
||||
await this.developersLink.click();
|
||||
}
|
||||
|
||||
async goToFunctionsSection() {
|
||||
await this.functionsLink.click();
|
||||
async goToIntegrationsSection() {
|
||||
await this.integrationsLink.click();
|
||||
}
|
||||
|
||||
async goToSecuritySection() {
|
||||
await this.securityLink.click();
|
||||
}
|
||||
|
||||
async goToIntegrationsSection() {
|
||||
await this.integrationsLink.click();
|
||||
async goToAPIsSection() {
|
||||
await this.apisLink.click();
|
||||
}
|
||||
|
||||
async goToWebhooksSection() {
|
||||
await this.webhooksLink.click();
|
||||
}
|
||||
|
||||
async goToAdminPanelSection() {
|
||||
await this.adminPanelLink.click();
|
||||
}
|
||||
|
||||
async goToLabSection() {
|
||||
await this.labLink.click();
|
||||
}
|
||||
|
||||
async goToReleasesIntegration() {
|
||||
@@ -95,7 +111,7 @@ export class SettingsPage {
|
||||
}
|
||||
|
||||
async logout() {
|
||||
await this.logoutLink.click();
|
||||
await this.page.getByText('Logout').click();
|
||||
}
|
||||
|
||||
async toggleAdvancedSettings() {
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
{
|
||||
"name": "twenty-e2e-testing",
|
||||
"version": "0.44.5",
|
||||
"description": "",
|
||||
"author": "",
|
||||
"private": true,
|
||||
"license": "AGPL-3.0",
|
||||
"devDependencies": {
|
||||
"@playwright/test": "^1.49.0"
|
||||
"@playwright/test": "^1.51.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,9 @@ test('Create workflow', async ({ page }) => {
|
||||
const workflowsLink = page.getByRole('link', { name: 'Workflows' });
|
||||
await workflowsLink.click();
|
||||
|
||||
const createWorkflowButton = page.getByRole('button', { name: 'New record' });
|
||||
const createWorkflowButton = page.getByRole('button', {
|
||||
name: 'Create new workflow',
|
||||
});
|
||||
|
||||
const [createWorkflowResponse] = await Promise.all([
|
||||
page.waitForResponse(async (response) => {
|
||||
@@ -26,7 +28,7 @@ test('Create workflow', async ({ page }) => {
|
||||
createWorkflowButton.click(),
|
||||
]);
|
||||
|
||||
const recordName = page.getByTestId('top-bar-title').getByTestId('tooltip');
|
||||
const recordName = page.getByTestId('top-bar-title').getByText('Untitled');
|
||||
await recordName.click();
|
||||
|
||||
const nameInput = page.getByTestId('top-bar-title').getByRole('textbox');
|
||||
|
||||
@@ -1,60 +1,58 @@
|
||||
import { expect } from '@playwright/test';
|
||||
import { test } from '../lib/fixtures/blank-workflow';
|
||||
|
||||
test.fixme(
|
||||
'The workflow run visualizer shows the executed draft version without the last draft changes',
|
||||
async ({ workflowVisualizer, page }) => {
|
||||
await workflowVisualizer.createInitialTrigger('manual');
|
||||
test('The workflow run visualizer shows the executed draft version without the last draft changes', async ({
|
||||
workflowVisualizer,
|
||||
page,
|
||||
}) => {
|
||||
await workflowVisualizer.createInitialTrigger('manual');
|
||||
|
||||
const manualTriggerAvailabilitySelect = page.getByRole('button', {
|
||||
name: 'When record(s) are selected',
|
||||
});
|
||||
const manualTriggerAvailabilitySelect = page.getByRole('button', {
|
||||
name: 'When record(s) are selected',
|
||||
});
|
||||
|
||||
await manualTriggerAvailabilitySelect.click();
|
||||
await manualTriggerAvailabilitySelect.click();
|
||||
|
||||
const alwaysAvailableOption = page.getByText(
|
||||
'When no record(s) are selected',
|
||||
);
|
||||
const alwaysAvailableOption = page.getByText(
|
||||
'When no record(s) are selected',
|
||||
);
|
||||
|
||||
await alwaysAvailableOption.click();
|
||||
await alwaysAvailableOption.click();
|
||||
|
||||
await workflowVisualizer.closeSidePanel();
|
||||
await workflowVisualizer.closeSidePanel();
|
||||
|
||||
const { createdStepId: firstStepId } =
|
||||
await workflowVisualizer.createStep('create-record');
|
||||
const { createdStepId: firstStepId } =
|
||||
await workflowVisualizer.createStep('create-record');
|
||||
|
||||
await workflowVisualizer.closeSidePanel();
|
||||
await workflowVisualizer.closeSidePanel();
|
||||
|
||||
const launchTestButton = page.getByLabel('Test Workflow');
|
||||
const launchTestButton = page.getByLabel(workflowVisualizer.workflowName);
|
||||
|
||||
await launchTestButton.click();
|
||||
await launchTestButton.click();
|
||||
|
||||
const goToExecutionPageLink = page.getByRole('link', {
|
||||
name: 'View execution details',
|
||||
});
|
||||
const executionPageUrl = await goToExecutionPageLink.getAttribute('href');
|
||||
expect(executionPageUrl).not.toBeNull();
|
||||
const goToExecutionPageLink = page.getByRole('link', {
|
||||
name: 'View execution details',
|
||||
});
|
||||
const executionPageUrl = await goToExecutionPageLink.getAttribute('href');
|
||||
expect(executionPageUrl).not.toBeNull();
|
||||
|
||||
await workflowVisualizer.deleteStep(firstStepId);
|
||||
await workflowVisualizer.deleteStep(firstStepId);
|
||||
|
||||
await page.goto(executionPageUrl!);
|
||||
await page.goto(executionPageUrl!);
|
||||
|
||||
const workflowRunName = page.getByText('Execution of v1');
|
||||
const workflowRunName = page
|
||||
.getByText(`#1 - ${workflowVisualizer.workflowName}`)
|
||||
.nth(1);
|
||||
|
||||
await expect(workflowRunName).toBeVisible();
|
||||
await expect(workflowRunName).toBeVisible();
|
||||
|
||||
const flowTab = page.getByText('Flow', { exact: true });
|
||||
const executedFirstStepNode = workflowVisualizer.getStepNode(firstStepId);
|
||||
|
||||
await flowTab.click();
|
||||
await expect(executedFirstStepNode).toBeVisible();
|
||||
|
||||
const executedFirstStepNode = workflowVisualizer.getStepNode(firstStepId);
|
||||
await executedFirstStepNode.click();
|
||||
|
||||
await expect(executedFirstStepNode).toBeVisible();
|
||||
|
||||
await executedFirstStepNode.click();
|
||||
|
||||
await expect(
|
||||
workflowVisualizer.commandMenu.getByRole('textbox').first(),
|
||||
).toHaveValue('Create Record');
|
||||
},
|
||||
);
|
||||
await expect(workflowVisualizer.stepHeaderInCommandMenu).toContainText(
|
||||
'Create Record',
|
||||
);
|
||||
});
|
||||
|
||||
@@ -57,7 +57,7 @@ test('Use an old version as draft', async ({ workflowVisualizer, page }) => {
|
||||
},
|
||||
);
|
||||
|
||||
await linkToFirstWorkflowVersion.click();
|
||||
await linkToFirstWorkflowVersion.click({ force: true });
|
||||
|
||||
await expect(workflowVisualizer.workflowStatus).toHaveText('Archived');
|
||||
await expect(workflowVisualizer.useAsDraftButton).toBeVisible();
|
||||
@@ -139,7 +139,7 @@ test('Use an old version as draft while having a pending draft version', async (
|
||||
},
|
||||
);
|
||||
|
||||
await linkToFirstWorkflowVersion.click();
|
||||
await linkToFirstWorkflowVersion.click({ force: true });
|
||||
|
||||
await expect(workflowVisualizer.workflowStatus).toHaveText('Active');
|
||||
await expect(workflowVisualizer.useAsDraftButton).toBeVisible();
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"presets": [
|
||||
[
|
||||
"@nx/react/babel",
|
||||
{
|
||||
"runtime": "automatic",
|
||||
"useBuiltIns": "usage"
|
||||
}
|
||||
]
|
||||
],
|
||||
"plugins": []
|
||||
}
|
||||
@@ -1,11 +1,10 @@
|
||||
module.exports = {
|
||||
extends: ['../../.eslintrc.cjs', '../../.eslintrc.react.cjs'],
|
||||
ignorePatterns: ['!**/*'],
|
||||
extends: ['../../.eslintrc.global.cjs', '../../.eslintrc.react.cjs'],
|
||||
overrides: [
|
||||
{
|
||||
files: ['*.ts', '*.tsx'],
|
||||
files: ['**/*.ts', '**/*.tsx'],
|
||||
parserOptions: {
|
||||
project: ['packages/twenty-emails/tsconfig.{json,*.json}'],
|
||||
project: ['packages/twenty-emails/tsconfig.*.json'],
|
||||
},
|
||||
rules: {
|
||||
'@nx/dependency-checks': 'error',
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
dist
|
||||
.react-email/
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
# Twenty Emails
|
||||
|
||||
This package contains the email templates used by Twenty.
|
||||
|
||||
## Features
|
||||
|
||||
- Email templates built with [React Email](https://react.email/)
|
||||
- Internationalization (i18n) support via [@lingui/react](https://lingui.dev/)
|
||||
- Local preview server for testing email templates
|
||||
|
||||
## Getting Started
|
||||
|
||||
### Starting the Local Preview Server
|
||||
|
||||
To start the local preview server for email development:
|
||||
|
||||
```bash
|
||||
npx nx start twenty-emails
|
||||
```
|
||||
|
||||
This will run the development server on port 4001. You can then view your email templates at [http://localhost:4001](http://localhost:4001).
|
||||
|
||||
### Building Emails
|
||||
|
||||
To build the email templates:
|
||||
|
||||
```bash
|
||||
npx nx build twenty-emails
|
||||
```
|
||||
|
||||
## Email Structure
|
||||
|
||||
Each email template is located in the `src/emails` directory. The templates use various components from the `src/components` directory to maintain consistent styling and functionality.
|
||||
@@ -1,13 +1,13 @@
|
||||
import { defineConfig } from '@lingui/cli';
|
||||
import { defineConfig } from '@lingui/conf';
|
||||
import { formatter } from '@lingui/format-po';
|
||||
import { APP_LOCALES } from 'twenty-shared';
|
||||
import { APP_LOCALES, SOURCE_LOCALE } from 'twenty-shared/translations';
|
||||
|
||||
export default defineConfig({
|
||||
sourceLocale: 'en',
|
||||
locales: Object.values(APP_LOCALES),
|
||||
pseudoLocale: 'pseudo-en',
|
||||
fallbackLocales: {
|
||||
'pseudo-en': 'en',
|
||||
default: SOURCE_LOCALE,
|
||||
},
|
||||
extractorParserOptions: {
|
||||
tsExperimentalDecorators: true,
|
||||
@@ -1,6 +1,5 @@
|
||||
{
|
||||
"name": "twenty-emails",
|
||||
"version": "0.44.5",
|
||||
"description": "",
|
||||
"author": "",
|
||||
"private": true,
|
||||
@@ -14,10 +13,17 @@
|
||||
"@lingui/react": "^5.1.2",
|
||||
"twenty-shared": "workspace:*"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "^18.2.0 || ^19.0.0",
|
||||
"react-dom": "^18.2.0 || ^19.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@lingui/cli": "^5.1.2",
|
||||
"@lingui/swc-plugin": "^5.1.0",
|
||||
"@lingui/vite-plugin": "^5.1.2"
|
||||
"@lingui/vite-plugin": "^5.1.2",
|
||||
"@types/react": "^19",
|
||||
"@types/react-dom": "^19",
|
||||
"react-email": "4.0.3"
|
||||
},
|
||||
"exports": {
|
||||
".": {
|
||||
|
||||
@@ -11,6 +11,13 @@
|
||||
},
|
||||
"dependsOn": ["^build"]
|
||||
},
|
||||
"start": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"cwd": "{projectRoot}",
|
||||
"command": "email dev -d src/emails -p 4001"
|
||||
}
|
||||
},
|
||||
"typecheck": {},
|
||||
"lint": {
|
||||
"options": {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { i18n, Messages } from '@lingui/core';
|
||||
import { I18nProvider } from '@lingui/react';
|
||||
import { Container, Html } from '@react-email/components';
|
||||
import { PropsWithChildren } from 'react';
|
||||
|
||||
import { BaseHead } from 'src/components/BaseHead';
|
||||
import { Footer } from 'src/components/Footer';
|
||||
import { Logo } from 'src/components/Logo';
|
||||
import { APP_LOCALES, SOURCE_LOCALE } from 'twenty-shared';
|
||||
import { APP_LOCALES, SOURCE_LOCALE } from 'twenty-shared/translations';
|
||||
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';
|
||||
@@ -38,10 +38,11 @@ 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';
|
||||
|
||||
type BaseEmailProps = PropsWithChildren<{
|
||||
type BaseEmailProps = {
|
||||
children: JSX.Element | JSX.Element[] | string;
|
||||
width?: number;
|
||||
locale: keyof typeof APP_LOCALES;
|
||||
}>;
|
||||
};
|
||||
|
||||
const messages: Record<keyof typeof APP_LOCALES, Messages> = {
|
||||
en: enMessages,
|
||||
@@ -95,6 +96,7 @@ export const BaseEmail = ({ children, width, locale }: BaseEmailProps) => {
|
||||
<Container width={width || 290}>
|
||||
<Logo />
|
||||
{children}
|
||||
<Footer />
|
||||
</Container>
|
||||
</Html>
|
||||
</I18nProvider>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { ReactNode } from 'react';
|
||||
import { Button } from '@react-email/button';
|
||||
import { Button } from '@react-email/components';
|
||||
|
||||
import { emailTheme } from 'src/common-style';
|
||||
|
||||
@@ -17,7 +16,7 @@ const callToActionStyle = {
|
||||
|
||||
type CallToActionProps = {
|
||||
href: string;
|
||||
value: ReactNode;
|
||||
value: JSX.Element | JSX.Element[] | string;
|
||||
};
|
||||
|
||||
export const CallToAction = ({ value, href }: CallToActionProps) => {
|
||||
|
||||
@@ -1,17 +1,22 @@
|
||||
import { Column, Row } from '@react-email/components';
|
||||
import { i18n } from '@lingui/core';
|
||||
import { Column, Container, Row } from '@react-email/components';
|
||||
import { Link } from 'src/components/Link';
|
||||
import { ShadowText } from 'src/components/ShadowText';
|
||||
|
||||
const footerContainerStyle = {
|
||||
marginTop: '12px',
|
||||
};
|
||||
|
||||
export const Footer = () => {
|
||||
return (
|
||||
<>
|
||||
<Container style={footerContainerStyle}>
|
||||
<Row>
|
||||
<Column>
|
||||
<ShadowText>
|
||||
<Link
|
||||
href="https://twenty.com/"
|
||||
value="Website"
|
||||
aria-label="Visit Twenty's website"
|
||||
value={i18n._('Website')}
|
||||
aria-label={i18n._("Visit Twenty's website")}
|
||||
/>
|
||||
</ShadowText>
|
||||
</Column>
|
||||
@@ -19,8 +24,8 @@ export const Footer = () => {
|
||||
<ShadowText>
|
||||
<Link
|
||||
href="https://github.com/twentyhq/twenty"
|
||||
value="Github"
|
||||
aria-label="Visit Twenty's GitHub repository"
|
||||
value={i18n._('Github')}
|
||||
aria-label={i18n._("Visit Twenty's GitHub repository")}
|
||||
/>
|
||||
</ShadowText>
|
||||
</Column>
|
||||
@@ -28,8 +33,8 @@ export const Footer = () => {
|
||||
<ShadowText>
|
||||
<Link
|
||||
href="https://twenty.com/user-guide"
|
||||
value="User guide"
|
||||
aria-label="Read Twenty's user guide"
|
||||
value={i18n._('User guide')}
|
||||
aria-label={i18n._("Read Twenty's user guide")}
|
||||
/>
|
||||
</ShadowText>
|
||||
</Column>
|
||||
@@ -37,19 +42,19 @@ export const Footer = () => {
|
||||
<ShadowText>
|
||||
<Link
|
||||
href="https://docs.twenty.com/"
|
||||
value="Developers"
|
||||
aria-label="Visit Twenty's developer documentation"
|
||||
value={i18n._('Developers')}
|
||||
aria-label={i18n._("Visit Twenty's developer documentation")}
|
||||
/>
|
||||
</ShadowText>
|
||||
</Column>
|
||||
</Row>
|
||||
<ShadowText>
|
||||
Twenty.com Public Benefit Corporation
|
||||
<br />
|
||||
2261 Market Street #5275
|
||||
<br />
|
||||
San Francisco, CA 94114
|
||||
<>
|
||||
{i18n._('Twenty.com, Public Benefit Corporation')}
|
||||
<br />
|
||||
{i18n._('San Francisco / Paris')}
|
||||
</>
|
||||
</ShadowText>
|
||||
</>
|
||||
</Container>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
import { Column, Container, Row } from '@react-email/components';
|
||||
import React, { PropsWithChildren } from 'react';
|
||||
import React from 'react';
|
||||
|
||||
import { emailTheme } from 'src/common-style';
|
||||
|
||||
type HighlightedContainerProps = PropsWithChildren;
|
||||
type HighlightedContainerProps = {
|
||||
children: JSX.Element | JSX.Element[] | string;
|
||||
};
|
||||
|
||||
const highlightedContainerStyle = {
|
||||
background: emailTheme.background.colors.highlight,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Text } from '@react-email/text';
|
||||
import { ReactNode } from 'react';
|
||||
import { Text } from '@react-email/components';
|
||||
import { JSX } from 'react';
|
||||
|
||||
import { emailTheme } from 'src/common-style';
|
||||
|
||||
@@ -13,7 +13,7 @@ const highlightedStyle = {
|
||||
};
|
||||
|
||||
type HighlightedTextProps = {
|
||||
value: ReactNode;
|
||||
value: JSX.Element | JSX.Element[] | string | undefined;
|
||||
centered?: boolean;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { Link as EmailLink } from '@react-email/components';
|
||||
import { ReactNode } from 'react';
|
||||
|
||||
import { emailTheme } from 'src/common-style';
|
||||
|
||||
@@ -8,7 +7,7 @@ const linkStyle = {
|
||||
};
|
||||
|
||||
type LinkProps = {
|
||||
value: ReactNode;
|
||||
value: JSX.Element | JSX.Element[] | string;
|
||||
href: string;
|
||||
color?: string;
|
||||
};
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
import { PropsWithChildren as MainTextProps } from 'react';
|
||||
import { Text } from '@react-email/text';
|
||||
import { Text } from '@react-email/components';
|
||||
|
||||
import { emailTheme } from 'src/common-style';
|
||||
|
||||
type MainTextProps = {
|
||||
children: JSX.Element | JSX.Element[] | string;
|
||||
};
|
||||
|
||||
const mainTextStyle = {
|
||||
fontFamily: emailTheme.font.family,
|
||||
fontSize: emailTheme.font.size.md,
|
||||
fontWeight: emailTheme.font.weight.regular,
|
||||
color: emailTheme.font.colors.primary,
|
||||
margin: '0 0 12px 0',
|
||||
lineHeight: emailTheme.font.lineHeight,
|
||||
};
|
||||
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
import { PropsWithChildren as ShadowTextProps } from 'react';
|
||||
import { Text } from '@react-email/text';
|
||||
import { Text } from '@react-email/components';
|
||||
|
||||
import { emailTheme } from 'src/common-style';
|
||||
|
||||
type ShadowTextProps = {
|
||||
children: JSX.Element | JSX.Element[] | string;
|
||||
};
|
||||
|
||||
const shadowTextStyle = {
|
||||
fontSize: emailTheme.font.size.sm,
|
||||
fontWeight: emailTheme.font.weight.regular,
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
import { ReactNode } from 'react';
|
||||
import { Heading } from '@react-email/components';
|
||||
|
||||
import { emailTheme } from 'src/common-style';
|
||||
|
||||
type SubTitleProps = {
|
||||
value: ReactNode;
|
||||
value: JSX.Element | JSX.Element[] | string;
|
||||
};
|
||||
|
||||
const subTitleStyle = {
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
import { ReactNode } from 'react';
|
||||
import { Heading } from '@react-email/components';
|
||||
|
||||
import { emailTheme } from 'src/common-style';
|
||||
|
||||
type TitleProps = {
|
||||
value: ReactNode;
|
||||
value: JSX.Element | JSX.Element[] | string;
|
||||
};
|
||||
|
||||
const titleStyle = {
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
import { Footer } from 'src/components/Footer';
|
||||
import { i18n } from '@lingui/core';
|
||||
import { MainText } from 'src/components/MainText';
|
||||
import { SubTitle } from 'src/components/SubTitle';
|
||||
|
||||
export const WhatIsTwenty = () => {
|
||||
return (
|
||||
<>
|
||||
<SubTitle value="What is Twenty?" />
|
||||
<SubTitle value={i18n._('What is Twenty?')} />
|
||||
<MainText>
|
||||
It's a CRM, a software to help businesses manage their customer data and
|
||||
relationships efficiently.
|
||||
{i18n._(
|
||||
"It's a CRM, a software to help businesses manage their customer data and relationships efficiently.",
|
||||
)}
|
||||
</MainText>
|
||||
<Footer />
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import { Trans } from '@lingui/react/macro';
|
||||
import { i18n } from '@lingui/core';
|
||||
import { Trans } from '@lingui/react';
|
||||
import { BaseEmail } from 'src/components/BaseEmail';
|
||||
import { CallToAction } from 'src/components/CallToAction';
|
||||
import { MainText } from 'src/components/MainText';
|
||||
import { Title } from 'src/components/Title';
|
||||
import { APP_LOCALES } from 'twenty-shared';
|
||||
import { APP_LOCALES } from 'twenty-shared/translations';
|
||||
|
||||
type CleanSuspendedWorkspaceEmailProps = {
|
||||
daysSinceInactive: number;
|
||||
@@ -20,32 +21,40 @@ export const CleanSuspendedWorkspaceEmail = ({
|
||||
}: CleanSuspendedWorkspaceEmailProps) => {
|
||||
return (
|
||||
<BaseEmail width={333} locale={locale}>
|
||||
<Title value={<Trans>Deleted Workspace</Trans>} />
|
||||
<Title value={i18n._('Deleted Workspace')} />
|
||||
<MainText>
|
||||
{userName?.length > 1 ? (
|
||||
<Trans>Dear {userName},</Trans>
|
||||
<Trans id="Dear {userName}," values={{ userName }} />
|
||||
) : (
|
||||
<Trans>Hello,</Trans>
|
||||
<Trans id="Hello," />
|
||||
)}
|
||||
<br />
|
||||
<br />
|
||||
<Trans>
|
||||
Your workspace <b>{workspaceDisplayName}</b> has been deleted as your
|
||||
subscription expired {daysSinceInactive} days ago.
|
||||
</Trans>
|
||||
<Trans
|
||||
id="Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
values={{ workspaceDisplayName, daysSinceInactive }}
|
||||
components={{ 0: <b /> }}
|
||||
/>
|
||||
<br />
|
||||
<br />
|
||||
<Trans>All data in this workspace has been permanently deleted.</Trans>
|
||||
<Trans id="All data in this workspace has been permanently deleted." />
|
||||
<br />
|
||||
<br />
|
||||
<Trans>
|
||||
If you wish to use Twenty again, you can create a new workspace.
|
||||
</Trans>
|
||||
<Trans id="If you wish to use Twenty again, you can create a new workspace." />
|
||||
</MainText>
|
||||
<CallToAction
|
||||
href="https://app.twenty.com/"
|
||||
value={<Trans>Create a new workspace</Trans>}
|
||||
value={i18n._('Create a new workspace')}
|
||||
/>
|
||||
</BaseEmail>
|
||||
);
|
||||
};
|
||||
|
||||
CleanSuspendedWorkspaceEmail.PreviewProps = {
|
||||
daysSinceInactive: 1,
|
||||
userName: 'John Doe',
|
||||
workspaceDisplayName: 'My Workspace',
|
||||
locale: 'en',
|
||||
} as CleanSuspendedWorkspaceEmailProps;
|
||||
|
||||
export default CleanSuspendedWorkspaceEmail;
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import { Trans } from '@lingui/react/macro';
|
||||
import { i18n } from '@lingui/core';
|
||||
import { Trans } from '@lingui/react';
|
||||
import { BaseEmail } from 'src/components/BaseEmail';
|
||||
import { CallToAction } from 'src/components/CallToAction';
|
||||
import { Link } from 'src/components/Link';
|
||||
import { MainText } from 'src/components/MainText';
|
||||
import { Title } from 'src/components/Title';
|
||||
import { APP_LOCALES } from 'twenty-shared';
|
||||
import { APP_LOCALES } from 'twenty-shared/translations';
|
||||
|
||||
type PasswordResetLinkEmailProps = {
|
||||
duration: string;
|
||||
@@ -19,16 +20,24 @@ export const PasswordResetLinkEmail = ({
|
||||
}: PasswordResetLinkEmailProps) => {
|
||||
return (
|
||||
<BaseEmail locale={locale}>
|
||||
<Title value={<Trans>Reset your password 🗝</Trans>} />
|
||||
<CallToAction href={link} value={<Trans>Reset</Trans>} />
|
||||
<Title value={i18n._('Reset your password 🗝')} />
|
||||
<CallToAction href={link} value={i18n._('Reset')} />
|
||||
<MainText>
|
||||
<Trans>
|
||||
This link is only valid for the next {duration}. If the link does not
|
||||
work, you can use the login verification link directly:
|
||||
</Trans>
|
||||
<Trans
|
||||
id="This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
values={{ duration }}
|
||||
/>
|
||||
<br />
|
||||
<Link href={link} value={link} />
|
||||
</MainText>
|
||||
</BaseEmail>
|
||||
);
|
||||
};
|
||||
|
||||
PasswordResetLinkEmail.PreviewProps = {
|
||||
duration: '24 hours',
|
||||
link: 'https://app.twenty.com/reset-password/123',
|
||||
locale: 'en',
|
||||
} as PasswordResetLinkEmailProps;
|
||||
|
||||
export default PasswordResetLinkEmail;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
import { i18n } from '@lingui/core';
|
||||
import { t } from '@lingui/core/macro';
|
||||
import { Trans } from '@lingui/react/macro';
|
||||
|
||||
import { Trans } from '@lingui/react';
|
||||
import { BaseEmail } from 'src/components/BaseEmail';
|
||||
import { CallToAction } from 'src/components/CallToAction';
|
||||
import { MainText } from 'src/components/MainText';
|
||||
import { Title } from 'src/components/Title';
|
||||
import { APP_LOCALES } from 'twenty-shared';
|
||||
import { APP_LOCALES } from 'twenty-shared/translations';
|
||||
|
||||
type PasswordUpdateNotifyEmailProps = {
|
||||
userName: string;
|
||||
@@ -21,29 +19,38 @@ export const PasswordUpdateNotifyEmail = ({
|
||||
link,
|
||||
locale,
|
||||
}: PasswordUpdateNotifyEmailProps) => {
|
||||
const helloString = userName?.length > 1 ? t`Dear ${userName}` : t`Hello`;
|
||||
const formattedDate = i18n.date(new Date());
|
||||
|
||||
return (
|
||||
<BaseEmail locale={locale}>
|
||||
<Title value={<Trans>Password updated</Trans>} />
|
||||
<Title value={i18n._('Password updated')} />
|
||||
<MainText>
|
||||
{helloString},
|
||||
{userName?.length > 1 ? (
|
||||
<Trans id="Dear {userName}," values={{ userName }} />
|
||||
) : (
|
||||
<Trans id="Hello," />
|
||||
)}
|
||||
<br />
|
||||
<br />
|
||||
<Trans>
|
||||
This is a confirmation that password for your account ({email}) was
|
||||
successfully changed on {formattedDate}.
|
||||
</Trans>
|
||||
<Trans
|
||||
id="This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
values={{ email, formattedDate }}
|
||||
/>
|
||||
<br />
|
||||
<br />
|
||||
<Trans>
|
||||
If you did not initiate this change, please contact your workspace
|
||||
owner immediately.
|
||||
</Trans>
|
||||
<Trans id="If you did not initiate this change, please contact your workspace owner immediately." />
|
||||
<br />
|
||||
</MainText>
|
||||
<CallToAction value={<Trans>Connect to Twenty</Trans>} href={link} />
|
||||
<CallToAction value={i18n._('Connect to Twenty')} href={link} />
|
||||
</BaseEmail>
|
||||
);
|
||||
};
|
||||
|
||||
PasswordUpdateNotifyEmail.PreviewProps = {
|
||||
userName: 'John Doe',
|
||||
email: 'john.doe@example.com',
|
||||
link: 'https://app.twenty.com',
|
||||
locale: 'en',
|
||||
} as PasswordUpdateNotifyEmailProps;
|
||||
|
||||
export default PasswordUpdateNotifyEmail;
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
import { Trans } from '@lingui/react/macro';
|
||||
|
||||
import { i18n } from '@lingui/core';
|
||||
import { Trans } from '@lingui/react';
|
||||
import { BaseEmail } from 'src/components/BaseEmail';
|
||||
import { CallToAction } from 'src/components/CallToAction';
|
||||
import { Footer } from 'src/components/Footer';
|
||||
import { MainText } from 'src/components/MainText';
|
||||
import { Title } from 'src/components/Title';
|
||||
import { APP_LOCALES } from 'twenty-shared';
|
||||
import { APP_LOCALES } from 'twenty-shared/translations';
|
||||
|
||||
type SendEmailVerificationLinkEmailProps = {
|
||||
link: string;
|
||||
@@ -18,18 +17,20 @@ export const SendEmailVerificationLinkEmail = ({
|
||||
}: SendEmailVerificationLinkEmailProps) => {
|
||||
return (
|
||||
<BaseEmail width={333} locale={locale}>
|
||||
<Title value={<Trans>Confirm your email address</Trans>} />
|
||||
<CallToAction href={link} value={<Trans>Verify Email</Trans>} />
|
||||
<Title value={i18n._('Confirm your email address')} />
|
||||
<CallToAction href={link} value={i18n._('Verify Email')} />
|
||||
<br />
|
||||
<br />
|
||||
<MainText>
|
||||
<Trans>
|
||||
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.
|
||||
</Trans>
|
||||
<Trans id="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." />
|
||||
</MainText>
|
||||
<Footer />
|
||||
</BaseEmail>
|
||||
);
|
||||
};
|
||||
|
||||
SendEmailVerificationLinkEmail.PreviewProps = {
|
||||
link: 'https://app.twenty.com/verify-email/123',
|
||||
locale: 'en',
|
||||
};
|
||||
|
||||
export default SendEmailVerificationLinkEmail;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { Trans } from '@lingui/react/macro';
|
||||
import { i18n } from '@lingui/core';
|
||||
import { Trans } from '@lingui/react';
|
||||
import { Img } from '@react-email/components';
|
||||
import { emailTheme } from 'src/common-style';
|
||||
|
||||
@@ -11,7 +12,8 @@ import { MainText } from 'src/components/MainText';
|
||||
import { Title } from 'src/components/Title';
|
||||
import { WhatIsTwenty } from 'src/components/WhatIsTwenty';
|
||||
import { capitalize } from 'src/utils/capitalize';
|
||||
import { APP_LOCALES, getImageAbsoluteURI } from 'twenty-shared';
|
||||
import { APP_LOCALES } from 'twenty-shared/translations';
|
||||
import { getImageAbsoluteURI } from 'twenty-shared/utils';
|
||||
|
||||
type SendInviteLinkEmailProps = {
|
||||
link: string;
|
||||
@@ -36,26 +38,58 @@ export const SendInviteLinkEmail = ({
|
||||
? getImageAbsoluteURI({ imageUrl: workspace.logo, baseUrl: serverUrl })
|
||||
: null;
|
||||
|
||||
const senderName = capitalize(sender.firstName);
|
||||
const senderEmail = sender.email;
|
||||
const workspaceName = workspace.name;
|
||||
|
||||
return (
|
||||
<BaseEmail width={333} locale={locale}>
|
||||
<Title value={<Trans>Join your team on Twenty</Trans>} />
|
||||
<Title value={i18n._('Join your team on Twenty')} />
|
||||
<MainText>
|
||||
{capitalize(sender.firstName)} (
|
||||
<Link
|
||||
href={`mailto:${sender.email}`}
|
||||
value={sender.email}
|
||||
color={emailTheme.font.colors.blue}
|
||||
<Trans
|
||||
id="{senderName} (<0>{senderEmail}</0>) has invited you to join a workspace called <1>{workspaceName}</1>."
|
||||
values={{ senderName, senderEmail, workspaceName }}
|
||||
components={{
|
||||
0: (
|
||||
<Link
|
||||
href={`mailto:${senderEmail}`}
|
||||
value={senderEmail}
|
||||
color={emailTheme.font.colors.blue}
|
||||
/>
|
||||
),
|
||||
1: <b />,
|
||||
}}
|
||||
/>
|
||||
) <Trans>has invited you to join a workspace called </Trans>
|
||||
<b>{workspace.name}</b>
|
||||
<br />
|
||||
</MainText>
|
||||
<HighlightedContainer>
|
||||
{workspaceLogo && <Img src={workspaceLogo} width={40} height={40} />}
|
||||
{workspace.name && <HighlightedText value={workspace.name} />}
|
||||
<CallToAction href={link} value={<Trans>Accept invite</Trans>} />
|
||||
{workspaceLogo ? (
|
||||
<Img
|
||||
src={workspaceLogo}
|
||||
width={40}
|
||||
height={40}
|
||||
alt="Workspace logo"
|
||||
/>
|
||||
) : (
|
||||
<></>
|
||||
)}
|
||||
{workspace.name ? <HighlightedText value={workspace.name} /> : <></>}
|
||||
<CallToAction href={link} value={i18n._('Accept invite')} />
|
||||
</HighlightedContainer>
|
||||
<WhatIsTwenty />
|
||||
</BaseEmail>
|
||||
);
|
||||
};
|
||||
|
||||
SendInviteLinkEmail.PreviewProps = {
|
||||
link: 'https://app.twenty.com/invite/123',
|
||||
workspace: {
|
||||
name: 'Acme Inc.',
|
||||
logo: 'https://fakeimg.pl/200x200/?text=ACME&font=lobster',
|
||||
},
|
||||
sender: { email: 'john.doe@example.com', firstName: 'John', lastName: 'Doe' },
|
||||
serverUrl: 'https://app.twenty.com',
|
||||
locale: 'en',
|
||||
} as SendInviteLinkEmailProps;
|
||||
|
||||
export default SendInviteLinkEmail;
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
import { i18n } from '@lingui/core';
|
||||
import { BaseEmail } from 'src/components/BaseEmail';
|
||||
import { Title } from 'src/components/Title';
|
||||
import { APP_LOCALES } from 'twenty-shared/translations';
|
||||
|
||||
type TestEmailProps = {
|
||||
locale: keyof typeof APP_LOCALES;
|
||||
};
|
||||
|
||||
// This is a test email which isn't used in production
|
||||
// It's useful to do tests and play in a local environment
|
||||
export const TestEmail = ({ locale }: TestEmailProps) => {
|
||||
return (
|
||||
<BaseEmail locale={locale}>
|
||||
<Title value={i18n._('Test email')} />
|
||||
</BaseEmail>
|
||||
);
|
||||
};
|
||||
|
||||
TestEmail.PreviewProps = {
|
||||
locale: 'en',
|
||||
} as TestEmailProps;
|
||||
|
||||
export default TestEmail;
|
||||
@@ -1,5 +1,5 @@
|
||||
import { t } from '@lingui/core/macro';
|
||||
import { Trans } from '@lingui/react/macro';
|
||||
import { i18n } from '@lingui/core';
|
||||
import { Trans } from '@lingui/react';
|
||||
import { Img } from '@react-email/components';
|
||||
import { emailTheme } from 'src/common-style';
|
||||
|
||||
@@ -10,9 +10,9 @@ import { HighlightedText } from 'src/components/HighlightedText';
|
||||
import { Link } from 'src/components/Link';
|
||||
import { MainText } from 'src/components/MainText';
|
||||
import { Title } from 'src/components/Title';
|
||||
import { WhatIsTwenty } from 'src/components/WhatIsTwenty';
|
||||
import { capitalize } from 'src/utils/capitalize';
|
||||
import { APP_LOCALES, getImageAbsoluteURI } from 'twenty-shared';
|
||||
import { APP_LOCALES } from 'twenty-shared/translations';
|
||||
import { getImageAbsoluteURI } from 'twenty-shared/utils';
|
||||
|
||||
type SendApprovedAccessDomainValidationProps = {
|
||||
link: string;
|
||||
@@ -39,30 +39,61 @@ export const SendApprovedAccessDomainValidation = ({
|
||||
? getImageAbsoluteURI({ imageUrl: workspace.logo, baseUrl: serverUrl })
|
||||
: null;
|
||||
|
||||
const senderName = capitalize(sender.firstName);
|
||||
const senderEmail = sender.email;
|
||||
|
||||
return (
|
||||
<BaseEmail width={333} locale={locale}>
|
||||
<Title value={t`Validate domain`} />
|
||||
<Title value={i18n._('Validate domain')} />
|
||||
<MainText>
|
||||
{capitalize(sender.firstName)} (
|
||||
<Link
|
||||
href={`mailto:${sender.email}`}
|
||||
value={sender.email}
|
||||
color={emailTheme.font.colors.blue}
|
||||
<Trans
|
||||
id="{senderName} (<0>{senderEmail}</0>): Please validate this domain to allow users with <1>@{domain}</1> email addresses to join your workspace without requiring an invitation."
|
||||
values={{ senderName, senderEmail, domain }}
|
||||
components={{
|
||||
0: (
|
||||
<Link
|
||||
href={`mailto:${senderEmail}`}
|
||||
value={senderEmail}
|
||||
color={emailTheme.font.colors.blue}
|
||||
/>
|
||||
),
|
||||
1: <b />,
|
||||
}}
|
||||
/>
|
||||
) <Trans>Please validate this domain to allow users with</Trans>{' '}
|
||||
<b>@{domain}</b>{' '}
|
||||
<Trans>
|
||||
email addresses to join your workspace without requiring an
|
||||
invitation.
|
||||
</Trans>
|
||||
<br />
|
||||
</MainText>
|
||||
<HighlightedContainer>
|
||||
{workspaceLogo && <Img src={workspaceLogo} width={40} height={40} />}
|
||||
{workspace.name && <HighlightedText value={workspace.name} />}
|
||||
<CallToAction href={link} value={t`Validate domain`} />
|
||||
{workspaceLogo ? (
|
||||
<Img
|
||||
src={workspaceLogo}
|
||||
width={40}
|
||||
height={40}
|
||||
alt="Workspace logo"
|
||||
/>
|
||||
) : (
|
||||
<></>
|
||||
)}
|
||||
{workspace.name ? <HighlightedText value={workspace.name} /> : <></>}
|
||||
<CallToAction href={link} value={i18n._('Validate domain')} />
|
||||
</HighlightedContainer>
|
||||
<WhatIsTwenty />
|
||||
</BaseEmail>
|
||||
);
|
||||
};
|
||||
|
||||
SendApprovedAccessDomainValidation.PreviewProps = {
|
||||
link: 'https://app.twenty.com/validate-domain',
|
||||
domain: 'example.com',
|
||||
workspace: {
|
||||
name: 'Acme Inc.',
|
||||
logo: 'https://fakeimg.pl/200x200/?text=ACME&font=lobster',
|
||||
},
|
||||
sender: {
|
||||
email: 'john.doe@example.com',
|
||||
firstName: 'John',
|
||||
lastName: 'Doe',
|
||||
},
|
||||
serverUrl: 'https://app.twenty.com',
|
||||
locale: 'en',
|
||||
} as SendApprovedAccessDomainValidationProps;
|
||||
|
||||
export default SendApprovedAccessDomainValidation;
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import { Trans } from '@lingui/react/macro';
|
||||
import { i18n } from '@lingui/core';
|
||||
import { Trans } from '@lingui/react';
|
||||
import { BaseEmail } from 'src/components/BaseEmail';
|
||||
import { CallToAction } from 'src/components/CallToAction';
|
||||
import { MainText } from 'src/components/MainText';
|
||||
import { Title } from 'src/components/Title';
|
||||
import { APP_LOCALES } from 'twenty-shared';
|
||||
import { APP_LOCALES } from 'twenty-shared/translations';
|
||||
|
||||
type WarnSuspendedWorkspaceEmailProps = {
|
||||
daysSinceInactive: number;
|
||||
@@ -22,38 +23,51 @@ export const WarnSuspendedWorkspaceEmail = ({
|
||||
}: WarnSuspendedWorkspaceEmailProps) => {
|
||||
const daysLeft = inactiveDaysBeforeDelete - daysSinceInactive;
|
||||
const dayOrDays = daysLeft > 1 ? 'days' : 'day';
|
||||
const remainingDays = daysLeft > 0 ? `${daysLeft} ` : '';
|
||||
|
||||
const helloString = userName?.length > 1 ? `Hello ${userName}` : 'Hello';
|
||||
const remainingDays = daysLeft > 0 ? daysLeft : 0;
|
||||
|
||||
return (
|
||||
<BaseEmail width={333} locale={locale}>
|
||||
<Title value={<Trans>Suspended Workspace </Trans>} />
|
||||
<Title value={i18n._('Suspended Workspace')} />
|
||||
<MainText>
|
||||
{helloString},
|
||||
{userName?.length > 1 ? (
|
||||
<Trans id="Dear {userName}," values={{ userName }} />
|
||||
) : (
|
||||
<Trans id="Hello," />
|
||||
)}
|
||||
<br />
|
||||
<br />
|
||||
<Trans>
|
||||
It appears that your workspace <b>{workspaceDisplayName}</b> has been
|
||||
suspended for {daysSinceInactive} days.
|
||||
</Trans>
|
||||
<Trans
|
||||
id="It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
values={{ workspaceDisplayName, daysSinceInactive }}
|
||||
components={{ 0: <b /> }}
|
||||
/>
|
||||
<br />
|
||||
<br />
|
||||
<Trans>
|
||||
The workspace will be deactivated in {remainingDays} {dayOrDays}, and
|
||||
all its data will be deleted.
|
||||
</Trans>
|
||||
<Trans
|
||||
id="The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
values={{ remainingDays, dayOrDays }}
|
||||
/>
|
||||
<br />
|
||||
<br />
|
||||
<Trans>
|
||||
If you wish to continue using Twenty, please update your subscription
|
||||
within the next {remainingDays} {dayOrDays}.
|
||||
</Trans>
|
||||
<Trans
|
||||
id="If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
values={{ remainingDays, dayOrDays }}
|
||||
/>
|
||||
</MainText>
|
||||
<CallToAction
|
||||
href="https://app.twenty.com/settings/billing"
|
||||
value={<Trans>Update your subscription</Trans>}
|
||||
value={i18n._('Update your subscription')}
|
||||
/>
|
||||
</BaseEmail>
|
||||
);
|
||||
};
|
||||
|
||||
WarnSuspendedWorkspaceEmail.PreviewProps = {
|
||||
daysSinceInactive: 10,
|
||||
inactiveDaysBeforeDelete: 14,
|
||||
userName: 'John Doe',
|
||||
workspaceDisplayName: 'Acme Inc.',
|
||||
locale: 'en',
|
||||
};
|
||||
|
||||
export default WarnSuspendedWorkspaceEmail;
|
||||
|
||||
@@ -18,30 +18,235 @@ msgstr ""
|
||||
"X-Crowdin-File: /packages/twenty-emails/src/locales/en.po\n"
|
||||
"X-Crowdin-File-ID: 27\n"
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>): Please validate this domain to allow users with <1>@{domain}</1> email addresses to join your workspace without requiring an invitation."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/test.email.tsx
|
||||
msgid "Test email"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>) has invited you to join a workspace called <1>{workspaceName}</1>."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Accept invite"
|
||||
msgstr "Aanvaar uitnodiging"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "What is Twenty?"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "It's a CRM, a software to help businesses manage their customer data and relationships efficiently."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Website"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's website"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Github"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's GitHub repository"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "User guide"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Read Twenty's user guide"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Developers"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's developer documentation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Twenty.com, Public Benefit Corporation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "San Francisco / Paris"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
#~ msgid "Accept invite"
|
||||
#~ msgstr "Aanvaar uitnodiging"
|
||||
|
||||
#. js-lingui-id: Yxj+Uc
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr "Alle data in hierdie werkruimte is permanent verwyder."
|
||||
#~ msgid "All data in this workspace has been permanently deleted."
|
||||
#~ msgstr "Alle data in hierdie werkruimte is permanent verwyder."
|
||||
|
||||
#. js-lingui-id: RPHFhC
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr "Bevestig jou e-posadres"
|
||||
#~ msgid "Confirm your email address"
|
||||
#~ msgstr "Bevestig jou e-posadres"
|
||||
|
||||
#. js-lingui-id: nvkBPN
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr "Konnekteer met Twenty"
|
||||
#~ msgid "Connect to Twenty"
|
||||
#~ msgstr "Konnekteer met Twenty"
|
||||
|
||||
#. js-lingui-id: jPQSEz
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr "Skep 'n nuwe werksruimte"
|
||||
#~ msgid "Create a new workspace"
|
||||
#~ msgstr "Skep 'n nuwe werksruimte"
|
||||
|
||||
#. js-lingui-id: JRzgV7
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -50,73 +255,73 @@ msgstr "Skep 'n nuwe werksruimte"
|
||||
|
||||
#. js-lingui-id: Lm5BBI
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Dear {userName}"
|
||||
msgstr "Liewe {userName}"
|
||||
#~ msgid "Dear {userName}"
|
||||
#~ msgstr "Liewe {userName}"
|
||||
|
||||
#. js-lingui-id: lIdkf2
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr "Liewe {userName},"
|
||||
#~ msgid "Dear {userName},"
|
||||
#~ msgstr "Liewe {userName},"
|
||||
|
||||
#. js-lingui-id: NTwcnq
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr "Verwyderde Werkruimte"
|
||||
#~ msgid "Deleted Workspace"
|
||||
#~ msgstr "Verwyderde Werkruimte"
|
||||
|
||||
#. js-lingui-id: S3uuQj
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "email addresses to join your workspace without requiring an invitation."
|
||||
msgstr "e-posadresse om by jou werkruimte aan te sluit sonder om 'n uitnodiging te vereis."
|
||||
#~ msgid "email addresses to join your workspace without requiring an invitation."
|
||||
#~ msgstr "e-posadresse om by jou werkruimte aan te sluit sonder om 'n uitnodiging te vereis."
|
||||
|
||||
#. js-lingui-id: tGme7M
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "has invited you to join a workspace called "
|
||||
msgstr "het jou genooi om aan te sluit by 'n werkruimte genaamd "
|
||||
#~ msgid "has invited you to join a workspace called "
|
||||
#~ msgstr "het jou genooi om aan te sluit by 'n werkruimte genaamd "
|
||||
|
||||
#. js-lingui-id: uzTaYi
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Hello"
|
||||
msgstr "Hallo"
|
||||
#~ msgid "Hello"
|
||||
#~ msgstr "Hallo"
|
||||
|
||||
#. js-lingui-id: Xa0d85
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr "Hallo,"
|
||||
#~ msgid "Hello,"
|
||||
#~ msgstr "Hallo,"
|
||||
|
||||
#. js-lingui-id: eE1nG1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr "As jy nie hierdie verandering geïnisieer het nie, kontak asseblief jou werkruimte-eienaar dadelik."
|
||||
#~ msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
#~ msgstr "As jy nie hierdie verandering geïnisieer het nie, kontak asseblief jou werkruimte-eienaar dadelik."
|
||||
|
||||
#. js-lingui-id: Gz91L8
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr "As jy wil voortgaan om Twenty te gebruik, moet asseblief jou intekening binne die volgende {remainingDays} {dayOrDays} opdateer."
|
||||
#~ msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
#~ msgstr "As jy wil voortgaan om Twenty te gebruik, moet asseblief jou intekening binne die volgende {remainingDays} {dayOrDays} opdateer."
|
||||
|
||||
#. js-lingui-id: 0weyko
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr "As jy Twenty weer wil gebruik, kan jy 'n nuwe werkruimte skep."
|
||||
#~ msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
#~ msgstr "As jy Twenty weer wil gebruik, kan jy 'n nuwe werkruimte skep."
|
||||
|
||||
#. js-lingui-id: 7JuhZQ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr "Dit blyk dat jou werkruimte <0>{workspaceDisplayName}</0> vir {daysSinceInactive} dae opgeskort is."
|
||||
#~ msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
#~ msgstr "Dit blyk dat jou werkruimte <0>{workspaceDisplayName}</0> vir {daysSinceInactive} dae opgeskort is."
|
||||
|
||||
#. js-lingui-id: PviVyk
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr "Sluit aan by jou span op Twenty"
|
||||
#~ msgid "Join your team on Twenty"
|
||||
#~ msgstr "Sluit aan by jou span op Twenty"
|
||||
|
||||
#. js-lingui-id: ogtYkT
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "Wagwoord opgedateer"
|
||||
#~ msgid "Password updated"
|
||||
#~ msgstr "Wagwoord opgedateer"
|
||||
|
||||
#. js-lingui-id: Yucjaa
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Please validate this domain to allow users with"
|
||||
msgstr "Valideer asseblief hierdie domein om gebruikers met"
|
||||
#~ msgid "Please validate this domain to allow users with"
|
||||
#~ msgstr "Valideer asseblief hierdie domein om gebruikers met"
|
||||
|
||||
#. js-lingui-id: u3Ns4p
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
@@ -125,33 +330,33 @@ msgstr "Valideer asseblief hierdie domein om gebruikers met"
|
||||
|
||||
#. js-lingui-id: OfhWJH
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr "Stel terug"
|
||||
#~ msgid "Reset"
|
||||
#~ msgstr "Stel terug"
|
||||
|
||||
#. js-lingui-id: RE5NiU
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr "Stel jou wagwoord terug 🗝"
|
||||
#~ msgid "Reset your password 🗝"
|
||||
#~ msgstr "Stel jou wagwoord terug 🗝"
|
||||
|
||||
#. js-lingui-id: UBadaJ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace "
|
||||
msgstr "Geskorsde Werkruimte "
|
||||
#~ msgid "Suspended Workspace "
|
||||
#~ msgstr "Geskorsde Werkruimte "
|
||||
|
||||
#. js-lingui-id: 7yDt8q
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr "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."
|
||||
#~ msgid "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."
|
||||
#~ msgstr "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."
|
||||
|
||||
#. js-lingui-id: igorB1
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr "Die werkruimte sal gedeaktiveer word in {remainingDays} {dayOrDays}, en al sy data sal verwyder word."
|
||||
#~ msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
#~ msgstr "Die werkruimte sal gedeaktiveer word in {remainingDays} {dayOrDays}, en al sy data sal verwyder word."
|
||||
|
||||
#. js-lingui-id: 7OEHy1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr "Dit is 'n bevestiging dat die wagwoord vir jou rekening ({email}) suksesvol verander is op {formattedDate}."
|
||||
#~ msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
#~ msgstr "Dit is 'n bevestiging dat die wagwoord vir jou rekening ({email}) suksesvol verander is op {formattedDate}."
|
||||
|
||||
#. js-lingui-id: wSOsS+
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -160,8 +365,8 @@ msgstr "Dit is 'n bevestiging dat die wagwoord vir jou rekening ({email}) sukses
|
||||
|
||||
#. js-lingui-id: R4gMjN
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr "Hierdie skakel is slegs geldig vir die volgende {duration}. Indien die skakel nie werk nie, kan jy die aanmeldverifiëringskakel direk gebruik:"
|
||||
#~ msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
#~ msgstr "Hierdie skakel is slegs geldig vir die volgende {duration}. Indien die skakel nie werk nie, kan jy die aanmeldverifiëringskakel direk gebruik:"
|
||||
|
||||
#. js-lingui-id: 2oA637
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
@@ -170,24 +375,24 @@ msgstr "Hierdie skakel is slegs geldig vir die volgende {duration}. Indien die s
|
||||
|
||||
#. js-lingui-id: H0v4yC
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr "Opdateer jou intekening"
|
||||
#~ msgid "Update your subscription"
|
||||
#~ msgstr "Opdateer jou intekening"
|
||||
|
||||
#. js-lingui-id: QbiUqd
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr "Valideer domein"
|
||||
#~ msgid "Validate domain"
|
||||
#~ msgstr "Valideer domein"
|
||||
|
||||
#. js-lingui-id: wCKkSr
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr "Verifieer E-pos"
|
||||
#~ msgid "Verify Email"
|
||||
#~ msgstr "Verifieer E-pos"
|
||||
|
||||
#. js-lingui-id: 9MqLGX
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr "Jou werkruimte <0>{workspaceDisplayName}</0> is verwyder aangesien jou intekening {daysSinceInactive} dae gelede verval het."
|
||||
#~ msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
#~ msgstr "Jou werkruimte <0>{workspaceDisplayName}</0> is verwyder aangesien jou intekening {daysSinceInactive} dae gelede verval het."
|
||||
|
||||
#. js-lingui-id: KFmFrQ
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
|
||||
@@ -18,30 +18,235 @@ msgstr ""
|
||||
"X-Crowdin-File: /packages/twenty-emails/src/locales/en.po\n"
|
||||
"X-Crowdin-File-ID: 27\n"
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>): Please validate this domain to allow users with <1>@{domain}</1> email addresses to join your workspace without requiring an invitation."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/test.email.tsx
|
||||
msgid "Test email"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>) has invited you to join a workspace called <1>{workspaceName}</1>."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Accept invite"
|
||||
msgstr "قبول الدعوة"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "What is Twenty?"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "It's a CRM, a software to help businesses manage their customer data and relationships efficiently."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Website"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's website"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Github"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's GitHub repository"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "User guide"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Read Twenty's user guide"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Developers"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's developer documentation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Twenty.com, Public Benefit Corporation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "San Francisco / Paris"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
#~ msgid "Accept invite"
|
||||
#~ msgstr "قبول الدعوة"
|
||||
|
||||
#. js-lingui-id: Yxj+Uc
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr "تم حذف جميع البيانات في هذه الواجهة بشكل دائم."
|
||||
#~ msgid "All data in this workspace has been permanently deleted."
|
||||
#~ msgstr "تم حذف جميع البيانات في هذه الواجهة بشكل دائم."
|
||||
|
||||
#. js-lingui-id: RPHFhC
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr "تأكد من عنوان بريدك الإلكتروني"
|
||||
#~ msgid "Confirm your email address"
|
||||
#~ msgstr "تأكد من عنوان بريدك الإلكتروني"
|
||||
|
||||
#. js-lingui-id: nvkBPN
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr "الاتصال بـ Twenty"
|
||||
#~ msgid "Connect to Twenty"
|
||||
#~ msgstr "الاتصال بـ Twenty"
|
||||
|
||||
#. js-lingui-id: jPQSEz
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr "إنشاء مساحة عمل جديدة"
|
||||
#~ msgid "Create a new workspace"
|
||||
#~ msgstr "إنشاء مساحة عمل جديدة"
|
||||
|
||||
#. js-lingui-id: JRzgV7
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -50,73 +255,73 @@ msgstr "إنشاء مساحة عمل جديدة"
|
||||
|
||||
#. js-lingui-id: Lm5BBI
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Dear {userName}"
|
||||
msgstr "عزيزي {userName}"
|
||||
#~ msgid "Dear {userName}"
|
||||
#~ msgstr "عزيزي {userName}"
|
||||
|
||||
#. js-lingui-id: lIdkf2
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr "عزيزي {userName},"
|
||||
#~ msgid "Dear {userName},"
|
||||
#~ msgstr "عزيزي {userName},"
|
||||
|
||||
#. js-lingui-id: NTwcnq
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr "مساحة العمل المحذوفة"
|
||||
#~ msgid "Deleted Workspace"
|
||||
#~ msgstr "مساحة العمل المحذوفة"
|
||||
|
||||
#. js-lingui-id: S3uuQj
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "email addresses to join your workspace without requiring an invitation."
|
||||
msgstr "عناوين البريد الإلكتروني للانضمام إلى مساحة العمل الخاصة بك دون الحاجة إلى دعوة."
|
||||
#~ msgid "email addresses to join your workspace without requiring an invitation."
|
||||
#~ msgstr "عناوين البريد الإلكتروني للانضمام إلى مساحة العمل الخاصة بك دون الحاجة إلى دعوة."
|
||||
|
||||
#. js-lingui-id: tGme7M
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "has invited you to join a workspace called "
|
||||
msgstr "لقد دُعيت للإنضمام إلى مساحة عمل تسمى "
|
||||
#~ msgid "has invited you to join a workspace called "
|
||||
#~ msgstr "لقد دُعيت للإنضمام إلى مساحة عمل تسمى "
|
||||
|
||||
#. js-lingui-id: uzTaYi
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Hello"
|
||||
msgstr "مرحبًا"
|
||||
#~ msgid "Hello"
|
||||
#~ msgstr "مرحبًا"
|
||||
|
||||
#. js-lingui-id: Xa0d85
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr "مرحبًا,"
|
||||
#~ msgid "Hello,"
|
||||
#~ msgstr "مرحبًا,"
|
||||
|
||||
#. js-lingui-id: eE1nG1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr "إذا لم تكن قد بدأت هذا التغيير، يرجى الاتصال بمالك مساحة العمل الخاصة بك على الفور."
|
||||
#~ msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
#~ msgstr "إذا لم تكن قد بدأت هذا التغيير، يرجى الاتصال بمالك مساحة العمل الخاصة بك على الفور."
|
||||
|
||||
#. js-lingui-id: Gz91L8
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr "إذا كنت ترغب في الاستمرار في استخدام Twenty، يُرجى تحديث اشتراكك خلال الأيام {remainingDays} {dayOrDays} القادمة."
|
||||
#~ msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
#~ msgstr "إذا كنت ترغب في الاستمرار في استخدام Twenty، يُرجى تحديث اشتراكك خلال الأيام {remainingDays} {dayOrDays} القادمة."
|
||||
|
||||
#. js-lingui-id: 0weyko
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr "إذا كنت ترغب في استخدام Twenty مرة أخرى، يمكنك إنشاء مساحة عمل جديدة."
|
||||
#~ msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
#~ msgstr "إذا كنت ترغب في استخدام Twenty مرة أخرى، يمكنك إنشاء مساحة عمل جديدة."
|
||||
|
||||
#. js-lingui-id: 7JuhZQ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr "يبدو أن مساحة عملك <0>{workspaceDisplayName}</0> قد تم تعليقها لمدة {daysSinceInactive} أيام."
|
||||
#~ msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
#~ msgstr "يبدو أن مساحة عملك <0>{workspaceDisplayName}</0> قد تم تعليقها لمدة {daysSinceInactive} أيام."
|
||||
|
||||
#. js-lingui-id: PviVyk
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr "انضم إلى فريقك في Twenty"
|
||||
#~ msgid "Join your team on Twenty"
|
||||
#~ msgstr "انضم إلى فريقك في Twenty"
|
||||
|
||||
#. js-lingui-id: ogtYkT
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "تم تحديث كلمة المرور"
|
||||
#~ msgid "Password updated"
|
||||
#~ msgstr "تم تحديث كلمة المرور"
|
||||
|
||||
#. js-lingui-id: Yucjaa
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Please validate this domain to allow users with"
|
||||
msgstr "يرجى التحقق من صحة هذا النطاق للسماح للمستخدمين ب"
|
||||
#~ msgid "Please validate this domain to allow users with"
|
||||
#~ msgstr "يرجى التحقق من صحة هذا النطاق للسماح للمستخدمين ب"
|
||||
|
||||
#. js-lingui-id: u3Ns4p
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
@@ -125,33 +330,33 @@ msgstr "يرجى التحقق من صحة هذا النطاق للسماح لل
|
||||
|
||||
#. js-lingui-id: OfhWJH
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr "إعادة تعيين"
|
||||
#~ msgid "Reset"
|
||||
#~ msgstr "إعادة تعيين"
|
||||
|
||||
#. js-lingui-id: RE5NiU
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr "إعادة تعيين كلمة مرورك 🗝"
|
||||
#~ msgid "Reset your password 🗝"
|
||||
#~ msgstr "إعادة تعيين كلمة مرورك 🗝"
|
||||
|
||||
#. js-lingui-id: UBadaJ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace "
|
||||
msgstr "فاعِل مساحة العمل المعلّقة "
|
||||
#~ msgid "Suspended Workspace "
|
||||
#~ msgstr "فاعِل مساحة العمل المعلّقة "
|
||||
|
||||
#. js-lingui-id: 7yDt8q
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr "شكراً لتسجيلك لحساب على Twenty! قبل أن نبدأ، نحتاج فقط إلى التأكد من أن هذا أنت. انقر أعلاه للتحقق من عنوان بريدك الإلكتروني."
|
||||
#~ msgid "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."
|
||||
#~ msgstr "شكراً لتسجيلك لحساب على Twenty! قبل أن نبدأ، نحتاج فقط إلى التأكد من أن هذا أنت. انقر أعلاه للتحقق من عنوان بريدك الإلكتروني."
|
||||
|
||||
#. js-lingui-id: igorB1
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr "سيتم تعطيل مساحة العمل في غضون {remainingDays} {dayOrDays}، وسيتم حذف كل بياناتها."
|
||||
#~ msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
#~ msgstr "سيتم تعطيل مساحة العمل في غضون {remainingDays} {dayOrDays}، وسيتم حذف كل بياناتها."
|
||||
|
||||
#. js-lingui-id: 7OEHy1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr "هذا تأكيد أن كلمة مرور حسابك ({email}) قد تم تغييرها بنجاح في {formattedDate}."
|
||||
#~ msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
#~ msgstr "هذا تأكيد أن كلمة مرور حسابك ({email}) قد تم تغييرها بنجاح في {formattedDate}."
|
||||
|
||||
#. js-lingui-id: wSOsS+
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -160,8 +365,8 @@ msgstr "هذا تأكيد أن كلمة مرور حسابك ({email}) قد تم
|
||||
|
||||
#. js-lingui-id: R4gMjN
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr "هذا الرابط صالح فقط للمدة {duration} القادمة. إذا لم يعمل الرابط، يمكنك استخدام رابط التحقق من تسجيل الدخول مباشرة:"
|
||||
#~ msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
#~ msgstr "هذا الرابط صالح فقط للمدة {duration} القادمة. إذا لم يعمل الرابط، يمكنك استخدام رابط التحقق من تسجيل الدخول مباشرة:"
|
||||
|
||||
#. js-lingui-id: 2oA637
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
@@ -170,24 +375,24 @@ msgstr "هذا الرابط صالح فقط للمدة {duration} القادمة
|
||||
|
||||
#. js-lingui-id: H0v4yC
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr "تحديث الاشتراك"
|
||||
#~ msgid "Update your subscription"
|
||||
#~ msgstr "تحديث الاشتراك"
|
||||
|
||||
#. js-lingui-id: QbiUqd
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr "تحقق من النطاق"
|
||||
#~ msgid "Validate domain"
|
||||
#~ msgstr "تحقق من النطاق"
|
||||
|
||||
#. js-lingui-id: wCKkSr
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr "تحقق من البريد الإلكتروني"
|
||||
#~ msgid "Verify Email"
|
||||
#~ msgstr "تحقق من البريد الإلكتروني"
|
||||
|
||||
#. js-lingui-id: 9MqLGX
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr "تم حذف مساحة العمل <0>{workspaceDisplayName}</0> كون اشتراكك قد انتهى منذ {daysSinceInactive} أيام."
|
||||
#~ msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
#~ msgstr "تم حذف مساحة العمل <0>{workspaceDisplayName}</0> كون اشتراكك قد انتهى منذ {daysSinceInactive} أيام."
|
||||
|
||||
#. js-lingui-id: KFmFrQ
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
|
||||
@@ -18,30 +18,235 @@ msgstr ""
|
||||
"X-Crowdin-File: /packages/twenty-emails/src/locales/en.po\n"
|
||||
"X-Crowdin-File-ID: 27\n"
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>): Please validate this domain to allow users with <1>@{domain}</1> email addresses to join your workspace without requiring an invitation."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/test.email.tsx
|
||||
msgid "Test email"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>) has invited you to join a workspace called <1>{workspaceName}</1>."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Accept invite"
|
||||
msgstr "Accepta la invitació"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "What is Twenty?"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "It's a CRM, a software to help businesses manage their customer data and relationships efficiently."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Website"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's website"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Github"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's GitHub repository"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "User guide"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Read Twenty's user guide"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Developers"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's developer documentation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Twenty.com, Public Benefit Corporation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "San Francisco / Paris"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
#~ msgid "Accept invite"
|
||||
#~ msgstr "Accepta la invitació"
|
||||
|
||||
#. js-lingui-id: Yxj+Uc
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr "Totes les dades en aquest espai de treball s'han esborrat permanentment."
|
||||
#~ msgid "All data in this workspace has been permanently deleted."
|
||||
#~ msgstr "Totes les dades en aquest espai de treball s'han esborrat permanentment."
|
||||
|
||||
#. js-lingui-id: RPHFhC
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr "Confirma la teva adreça de correu electrònic"
|
||||
#~ msgid "Confirm your email address"
|
||||
#~ msgstr "Confirma la teva adreça de correu electrònic"
|
||||
|
||||
#. js-lingui-id: nvkBPN
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr "Connecta't a Twenty"
|
||||
#~ msgid "Connect to Twenty"
|
||||
#~ msgstr "Connecta't a Twenty"
|
||||
|
||||
#. js-lingui-id: jPQSEz
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr "Crea un nou espai de treball"
|
||||
#~ msgid "Create a new workspace"
|
||||
#~ msgstr "Crea un nou espai de treball"
|
||||
|
||||
#. js-lingui-id: JRzgV7
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -50,73 +255,73 @@ msgstr "Crea un nou espai de treball"
|
||||
|
||||
#. js-lingui-id: Lm5BBI
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Dear {userName}"
|
||||
msgstr "Benvolgut {userName}"
|
||||
#~ msgid "Dear {userName}"
|
||||
#~ msgstr "Benvolgut {userName}"
|
||||
|
||||
#. js-lingui-id: lIdkf2
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr "Benvolgut {userName},"
|
||||
#~ msgid "Dear {userName},"
|
||||
#~ msgstr "Benvolgut {userName},"
|
||||
|
||||
#. js-lingui-id: NTwcnq
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr "Espai de treball esborrat"
|
||||
#~ msgid "Deleted Workspace"
|
||||
#~ msgstr "Espai de treball esborrat"
|
||||
|
||||
#. js-lingui-id: S3uuQj
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "email addresses to join your workspace without requiring an invitation."
|
||||
msgstr "adreces de correu electrònic per unir-se al teu espai de treball sense requerir una invitació."
|
||||
#~ msgid "email addresses to join your workspace without requiring an invitation."
|
||||
#~ msgstr "adreces de correu electrònic per unir-se al teu espai de treball sense requerir una invitació."
|
||||
|
||||
#. js-lingui-id: tGme7M
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "has invited you to join a workspace called "
|
||||
msgstr "t'ha convidat a unir-te a un espai de treball anomenat "
|
||||
#~ msgid "has invited you to join a workspace called "
|
||||
#~ msgstr "t'ha convidat a unir-te a un espai de treball anomenat "
|
||||
|
||||
#. js-lingui-id: uzTaYi
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Hello"
|
||||
msgstr "Hola"
|
||||
#~ msgid "Hello"
|
||||
#~ msgstr "Hola"
|
||||
|
||||
#. js-lingui-id: Xa0d85
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr "Hola,"
|
||||
#~ msgid "Hello,"
|
||||
#~ msgstr "Hola,"
|
||||
|
||||
#. js-lingui-id: eE1nG1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr "Si no has iniciat aquest canvi, si us plau contacta amb el propietari de l'espai de treball immediatament."
|
||||
#~ msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
#~ msgstr "Si no has iniciat aquest canvi, si us plau contacta amb el propietari de l'espai de treball immediatament."
|
||||
|
||||
#. js-lingui-id: Gz91L8
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr "Si vols continuar utilitzant Twenty, si us plau actualitza la teva subscripció en els propers {remainingDays} {dayOrDays}."
|
||||
#~ msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
#~ msgstr "Si vols continuar utilitzant Twenty, si us plau actualitza la teva subscripció en els propers {remainingDays} {dayOrDays}."
|
||||
|
||||
#. js-lingui-id: 0weyko
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr "Si vols utilitzar Twenty de nou, pots crear un nou espai de treball."
|
||||
#~ msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
#~ msgstr "Si vols utilitzar Twenty de nou, pots crear un nou espai de treball."
|
||||
|
||||
#. js-lingui-id: 7JuhZQ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr "Sembla que el teu espai de treball <0>{workspaceDisplayName}</0> ha estat suspès per {daysSinceInactive} dies."
|
||||
#~ msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
#~ msgstr "Sembla que el teu espai de treball <0>{workspaceDisplayName}</0> ha estat suspès per {daysSinceInactive} dies."
|
||||
|
||||
#. js-lingui-id: PviVyk
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr "Uneix-te al teu equip a Twenty"
|
||||
#~ msgid "Join your team on Twenty"
|
||||
#~ msgstr "Uneix-te al teu equip a Twenty"
|
||||
|
||||
#. js-lingui-id: ogtYkT
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "Contrasenya actualitzada"
|
||||
#~ msgid "Password updated"
|
||||
#~ msgstr "Contrasenya actualitzada"
|
||||
|
||||
#. js-lingui-id: Yucjaa
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Please validate this domain to allow users with"
|
||||
msgstr "Si us plau, valida aquest domini per permetre als usuaris amb"
|
||||
#~ msgid "Please validate this domain to allow users with"
|
||||
#~ msgstr "Si us plau, valida aquest domini per permetre als usuaris amb"
|
||||
|
||||
#. js-lingui-id: u3Ns4p
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
@@ -125,33 +330,33 @@ msgstr "Si us plau, valida aquest domini per permetre als usuaris amb"
|
||||
|
||||
#. js-lingui-id: OfhWJH
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr "Restableix"
|
||||
#~ msgid "Reset"
|
||||
#~ msgstr "Restableix"
|
||||
|
||||
#. js-lingui-id: RE5NiU
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr "Restableix la teva contrasenya 🗝"
|
||||
#~ msgid "Reset your password 🗝"
|
||||
#~ msgstr "Restableix la teva contrasenya 🗝"
|
||||
|
||||
#. js-lingui-id: UBadaJ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace "
|
||||
msgstr "Espai de treball suspès "
|
||||
#~ msgid "Suspended Workspace "
|
||||
#~ msgstr "Espai de treball suspès "
|
||||
|
||||
#. js-lingui-id: 7yDt8q
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr "Gràcies per registrar-te a Twenty! Abans de començar, només necessitem confirmar que ets tu. Clica a sobre per verificar la teva adreça de correu electrònic."
|
||||
#~ msgid "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."
|
||||
#~ msgstr "Gràcies per registrar-te a Twenty! Abans de començar, només necessitem confirmar que ets tu. Clica a sobre per verificar la teva adreça de correu electrònic."
|
||||
|
||||
#. js-lingui-id: igorB1
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr "L'espai de treball es desactivarà en {remainingDays} {dayOrDays}, i totes les seves dades seran eliminades."
|
||||
#~ msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
#~ msgstr "L'espai de treball es desactivarà en {remainingDays} {dayOrDays}, i totes les seves dades seran eliminades."
|
||||
|
||||
#. js-lingui-id: 7OEHy1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr "Això és una confirmació que la contrasenya del teu compte ({email}) s'ha canviat amb èxit el {formattedDate}."
|
||||
#~ msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
#~ msgstr "Això és una confirmació que la contrasenya del teu compte ({email}) s'ha canviat amb èxit el {formattedDate}."
|
||||
|
||||
#. js-lingui-id: wSOsS+
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -160,8 +365,8 @@ msgstr "Això és una confirmació que la contrasenya del teu compte ({email}) s
|
||||
|
||||
#. js-lingui-id: R4gMjN
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr "Aquest enllaç només és vàlid durant els propers {duration}. Si l'enllaç no funciona, pots fer servir directament l'enllaç de verificació d'inici de sessió:"
|
||||
#~ msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
#~ msgstr "Aquest enllaç només és vàlid durant els propers {duration}. Si l'enllaç no funciona, pots fer servir directament l'enllaç de verificació d'inici de sessió:"
|
||||
|
||||
#. js-lingui-id: 2oA637
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
@@ -170,24 +375,24 @@ msgstr "Aquest enllaç només és vàlid durant els propers {duration}. Si l'enl
|
||||
|
||||
#. js-lingui-id: H0v4yC
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr "Actualitza la teva subscripció"
|
||||
#~ msgid "Update your subscription"
|
||||
#~ msgstr "Actualitza la teva subscripció"
|
||||
|
||||
#. js-lingui-id: QbiUqd
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr "Valida el domini"
|
||||
#~ msgid "Validate domain"
|
||||
#~ msgstr "Valida el domini"
|
||||
|
||||
#. js-lingui-id: wCKkSr
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr "Verifica el correu electrònic"
|
||||
#~ msgid "Verify Email"
|
||||
#~ msgstr "Verifica el correu electrònic"
|
||||
|
||||
#. js-lingui-id: 9MqLGX
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr "El teu espai de treball <0>{workspaceDisplayName}</0> s'ha eliminat ja que la teva subscripció va caducar fa {daysSinceInactive} dies."
|
||||
#~ msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
#~ msgstr "El teu espai de treball <0>{workspaceDisplayName}</0> s'ha eliminat ja que la teva subscripció va caducar fa {daysSinceInactive} dies."
|
||||
|
||||
#. js-lingui-id: KFmFrQ
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
|
||||
@@ -18,30 +18,235 @@ msgstr ""
|
||||
"X-Crowdin-File: /packages/twenty-emails/src/locales/en.po\n"
|
||||
"X-Crowdin-File-ID: 27\n"
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>): Please validate this domain to allow users with <1>@{domain}</1> email addresses to join your workspace without requiring an invitation."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/test.email.tsx
|
||||
msgid "Test email"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>) has invited you to join a workspace called <1>{workspaceName}</1>."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Accept invite"
|
||||
msgstr "Přijměte pozvánku"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "What is Twenty?"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "It's a CRM, a software to help businesses manage their customer data and relationships efficiently."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Website"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's website"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Github"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's GitHub repository"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "User guide"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Read Twenty's user guide"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Developers"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's developer documentation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Twenty.com, Public Benefit Corporation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "San Francisco / Paris"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
#~ msgid "Accept invite"
|
||||
#~ msgstr "Přijměte pozvánku"
|
||||
|
||||
#. js-lingui-id: Yxj+Uc
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr "Všechna data v tomto pracovním prostoru byla trvale odstraněna."
|
||||
#~ msgid "All data in this workspace has been permanently deleted."
|
||||
#~ msgstr "Všechna data v tomto pracovním prostoru byla trvale odstraněna."
|
||||
|
||||
#. js-lingui-id: RPHFhC
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr "Potvrďte svou e-mailovou adresu"
|
||||
#~ msgid "Confirm your email address"
|
||||
#~ msgstr "Potvrďte svou e-mailovou adresu"
|
||||
|
||||
#. js-lingui-id: nvkBPN
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr "Připojte se k Twenty"
|
||||
#~ msgid "Connect to Twenty"
|
||||
#~ msgstr "Připojte se k Twenty"
|
||||
|
||||
#. js-lingui-id: jPQSEz
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr "Vytvořit nový pracovní prostor"
|
||||
#~ msgid "Create a new workspace"
|
||||
#~ msgstr "Vytvořit nový pracovní prostor"
|
||||
|
||||
#. js-lingui-id: JRzgV7
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -50,73 +255,73 @@ msgstr "Vytvořit nový pracovní prostor"
|
||||
|
||||
#. js-lingui-id: Lm5BBI
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Dear {userName}"
|
||||
msgstr "Vážený {userName}"
|
||||
#~ msgid "Dear {userName}"
|
||||
#~ msgstr "Vážený {userName}"
|
||||
|
||||
#. js-lingui-id: lIdkf2
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr "Vážený {userName},"
|
||||
#~ msgid "Dear {userName},"
|
||||
#~ msgstr "Vážený {userName},"
|
||||
|
||||
#. js-lingui-id: NTwcnq
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr "Smazaný pracovní prostor"
|
||||
#~ msgid "Deleted Workspace"
|
||||
#~ msgstr "Smazaný pracovní prostor"
|
||||
|
||||
#. js-lingui-id: S3uuQj
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "email addresses to join your workspace without requiring an invitation."
|
||||
msgstr "e-mailové adresy ke vstupu do vašeho pracovního prostoru bez nutnosti pozvánky."
|
||||
#~ msgid "email addresses to join your workspace without requiring an invitation."
|
||||
#~ msgstr "e-mailové adresy ke vstupu do vašeho pracovního prostoru bez nutnosti pozvánky."
|
||||
|
||||
#. js-lingui-id: tGme7M
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "has invited you to join a workspace called "
|
||||
msgstr "vás pozval do pracovního prostoru s názvem "
|
||||
#~ msgid "has invited you to join a workspace called "
|
||||
#~ msgstr "vás pozval do pracovního prostoru s názvem "
|
||||
|
||||
#. js-lingui-id: uzTaYi
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Hello"
|
||||
msgstr "Dobrý den"
|
||||
#~ msgid "Hello"
|
||||
#~ msgstr "Dobrý den"
|
||||
|
||||
#. js-lingui-id: Xa0d85
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr "Dobrý den,"
|
||||
#~ msgid "Hello,"
|
||||
#~ msgstr "Dobrý den,"
|
||||
|
||||
#. js-lingui-id: eE1nG1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr "Pokud jste tuto změnu neiniciovali, prosím, okamžitě kontaktujte majitele vašeho pracovního prostoru."
|
||||
#~ msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
#~ msgstr "Pokud jste tuto změnu neiniciovali, prosím, okamžitě kontaktujte majitele vašeho pracovního prostoru."
|
||||
|
||||
#. js-lingui-id: Gz91L8
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr "Pokud si přejete dále používat Twenty, prosím, aktualizujte své předplatné během příštích {remainingDays} {dayOrDays}."
|
||||
#~ msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
#~ msgstr "Pokud si přejete dále používat Twenty, prosím, aktualizujte své předplatné během příštích {remainingDays} {dayOrDays}."
|
||||
|
||||
#. js-lingui-id: 0weyko
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr "Pokud si přejete znovu použít Twenty, můžete vytvořit nový pracovní prostor."
|
||||
#~ msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
#~ msgstr "Pokud si přejete znovu použít Twenty, můžete vytvořit nový pracovní prostor."
|
||||
|
||||
#. js-lingui-id: 7JuhZQ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr "Zdá se, že váš pracovní prostor <0>{workspaceDisplayName}</0> byl pozastaven na dobu {daysSinceInactive} dní."
|
||||
#~ msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
#~ msgstr "Zdá se, že váš pracovní prostor <0>{workspaceDisplayName}</0> byl pozastaven na dobu {daysSinceInactive} dní."
|
||||
|
||||
#. js-lingui-id: PviVyk
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr "Připojte se k svému týmu na Twenty"
|
||||
#~ msgid "Join your team on Twenty"
|
||||
#~ msgstr "Připojte se k svému týmu na Twenty"
|
||||
|
||||
#. js-lingui-id: ogtYkT
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "Heslo bylo aktualizováno"
|
||||
#~ msgid "Password updated"
|
||||
#~ msgstr "Heslo bylo aktualizováno"
|
||||
|
||||
#. js-lingui-id: Yucjaa
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Please validate this domain to allow users with"
|
||||
msgstr "Prosím, ověřte tuto doménu pro umožnění přístupu uživatelům s"
|
||||
#~ msgid "Please validate this domain to allow users with"
|
||||
#~ msgstr "Prosím, ověřte tuto doménu pro umožnění přístupu uživatelům s"
|
||||
|
||||
#. js-lingui-id: u3Ns4p
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
@@ -125,33 +330,33 @@ msgstr "Prosím, ověřte tuto doménu pro umožnění přístupu uživatelům s
|
||||
|
||||
#. js-lingui-id: OfhWJH
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr "Obnovit"
|
||||
#~ msgid "Reset"
|
||||
#~ msgstr "Obnovit"
|
||||
|
||||
#. js-lingui-id: RE5NiU
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr "Obnovte své heslo 🗝"
|
||||
#~ msgid "Reset your password 🗝"
|
||||
#~ msgstr "Obnovte své heslo 🗝"
|
||||
|
||||
#. js-lingui-id: UBadaJ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace "
|
||||
msgstr "Pozastavený pracovní prostor "
|
||||
#~ msgid "Suspended Workspace "
|
||||
#~ msgstr "Pozastavený pracovní prostor "
|
||||
|
||||
#. js-lingui-id: 7yDt8q
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr "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."
|
||||
#~ msgid "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."
|
||||
#~ msgstr "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."
|
||||
|
||||
#. js-lingui-id: igorB1
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr "Pracovní prostor bude deaktivován za {remainingDays} {dayOrDays} a všechna jeho data budou smazána."
|
||||
#~ msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
#~ msgstr "Pracovní prostor bude deaktivován za {remainingDays} {dayOrDays} a všechna jeho data budou smazána."
|
||||
|
||||
#. js-lingui-id: 7OEHy1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr "Toto je potvrzení, že heslo k vašemu účtu ({email}) bylo úspěšně změněno {formattedDate}."
|
||||
#~ msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
#~ msgstr "Toto je potvrzení, že heslo k vašemu účtu ({email}) bylo úspěšně změněno {formattedDate}."
|
||||
|
||||
#. js-lingui-id: wSOsS+
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -160,8 +365,8 @@ msgstr "Toto je potvrzení, že heslo k vašemu účtu ({email}) bylo úspěšn
|
||||
|
||||
#. js-lingui-id: R4gMjN
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr "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í:"
|
||||
#~ msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
#~ msgstr "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í:"
|
||||
|
||||
#. js-lingui-id: 2oA637
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
@@ -170,24 +375,24 @@ msgstr "Tento odkaz je platný pouze následující {duration}. Pokud odkaz nefu
|
||||
|
||||
#. js-lingui-id: H0v4yC
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr "Aktualizujte své předplatné"
|
||||
#~ msgid "Update your subscription"
|
||||
#~ msgstr "Aktualizujte své předplatné"
|
||||
|
||||
#. js-lingui-id: QbiUqd
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr "Ověřit doménu"
|
||||
#~ msgid "Validate domain"
|
||||
#~ msgstr "Ověřit doménu"
|
||||
|
||||
#. js-lingui-id: wCKkSr
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr "Ověřit e-mail"
|
||||
#~ msgid "Verify Email"
|
||||
#~ msgstr "Ověřit e-mail"
|
||||
|
||||
#. js-lingui-id: 9MqLGX
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr "Váš pracovní prostor <0>{workspaceDisplayName}</0> byl odstraněn, protože vaše předplatné vypršelo před {daysSinceInactive} dny."
|
||||
#~ msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
#~ msgstr "Váš pracovní prostor <0>{workspaceDisplayName}</0> byl odstraněn, protože vaše předplatné vypršelo před {daysSinceInactive} dny."
|
||||
|
||||
#. js-lingui-id: KFmFrQ
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
|
||||
@@ -18,30 +18,235 @@ msgstr ""
|
||||
"X-Crowdin-File: /packages/twenty-emails/src/locales/en.po\n"
|
||||
"X-Crowdin-File-ID: 27\n"
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>): Please validate this domain to allow users with <1>@{domain}</1> email addresses to join your workspace without requiring an invitation."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/test.email.tsx
|
||||
msgid "Test email"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>) has invited you to join a workspace called <1>{workspaceName}</1>."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Accept invite"
|
||||
msgstr "Accepter invitation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "What is Twenty?"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "It's a CRM, a software to help businesses manage their customer data and relationships efficiently."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Website"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's website"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Github"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's GitHub repository"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "User guide"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Read Twenty's user guide"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Developers"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's developer documentation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Twenty.com, Public Benefit Corporation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "San Francisco / Paris"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
#~ msgid "Accept invite"
|
||||
#~ msgstr "Accepter invitation"
|
||||
|
||||
#. js-lingui-id: Yxj+Uc
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr "Alle data i dette arbejdsområde er blevet permanent slettet."
|
||||
#~ msgid "All data in this workspace has been permanently deleted."
|
||||
#~ msgstr "Alle data i dette arbejdsområde er blevet permanent slettet."
|
||||
|
||||
#. js-lingui-id: RPHFhC
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr "Bekræft din e-mailadresse"
|
||||
#~ msgid "Confirm your email address"
|
||||
#~ msgstr "Bekræft din e-mailadresse"
|
||||
|
||||
#. js-lingui-id: nvkBPN
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr "Forbind til Twenty"
|
||||
#~ msgid "Connect to Twenty"
|
||||
#~ msgstr "Forbind til Twenty"
|
||||
|
||||
#. js-lingui-id: jPQSEz
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr "Opret et nyt arbejdsområde"
|
||||
#~ msgid "Create a new workspace"
|
||||
#~ msgstr "Opret et nyt arbejdsområde"
|
||||
|
||||
#. js-lingui-id: JRzgV7
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -50,73 +255,73 @@ msgstr "Opret et nyt arbejdsområde"
|
||||
|
||||
#. js-lingui-id: Lm5BBI
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Dear {userName}"
|
||||
msgstr "Kære {userName}"
|
||||
#~ msgid "Dear {userName}"
|
||||
#~ msgstr "Kære {userName}"
|
||||
|
||||
#. js-lingui-id: lIdkf2
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr "Kære {userName},"
|
||||
#~ msgid "Dear {userName},"
|
||||
#~ msgstr "Kære {userName},"
|
||||
|
||||
#. js-lingui-id: NTwcnq
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr "Slettet arbejdsområde"
|
||||
#~ msgid "Deleted Workspace"
|
||||
#~ msgstr "Slettet arbejdsområde"
|
||||
|
||||
#. js-lingui-id: S3uuQj
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "email addresses to join your workspace without requiring an invitation."
|
||||
msgstr "emailadresser for at tilslutte din arbejdsområde uden at kræve en invitation."
|
||||
#~ msgid "email addresses to join your workspace without requiring an invitation."
|
||||
#~ msgstr "emailadresser for at tilslutte din arbejdsområde uden at kræve en invitation."
|
||||
|
||||
#. js-lingui-id: tGme7M
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "has invited you to join a workspace called "
|
||||
msgstr "har inviteret dig til at deltage i et arbejdsområde kaldet "
|
||||
#~ msgid "has invited you to join a workspace called "
|
||||
#~ msgstr "har inviteret dig til at deltage i et arbejdsområde kaldet "
|
||||
|
||||
#. js-lingui-id: uzTaYi
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Hello"
|
||||
msgstr "Hej"
|
||||
#~ msgid "Hello"
|
||||
#~ msgstr "Hej"
|
||||
|
||||
#. js-lingui-id: Xa0d85
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr "Hej,"
|
||||
#~ msgid "Hello,"
|
||||
#~ msgstr "Hej,"
|
||||
|
||||
#. js-lingui-id: eE1nG1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr "Hvis du ikke har initieret denne ændring, bedes du straks kontakte ejeren af dit arbejdsområde."
|
||||
#~ msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
#~ msgstr "Hvis du ikke har initieret denne ændring, bedes du straks kontakte ejeren af dit arbejdsområde."
|
||||
|
||||
#. js-lingui-id: Gz91L8
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr "Hvis du ønsker at fortsætte med at bruge Twenty, opdater da dit abonnement inden for de næste {remainingDays} {dayOrDays}."
|
||||
#~ msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
#~ msgstr "Hvis du ønsker at fortsætte med at bruge Twenty, opdater da dit abonnement inden for de næste {remainingDays} {dayOrDays}."
|
||||
|
||||
#. js-lingui-id: 0weyko
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr "Hvis du ønsker at bruge Twenty igen, kan du oprette et nyt arbejdsområde."
|
||||
#~ msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
#~ msgstr "Hvis du ønsker at bruge Twenty igen, kan du oprette et nyt arbejdsområde."
|
||||
|
||||
#. js-lingui-id: 7JuhZQ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr "Det ser ud til, at dit arbejdsområde <0>{workspaceDisplayName}</0> er blevet suspenderet i {daysSinceInactive} dage."
|
||||
#~ msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
#~ msgstr "Det ser ud til, at dit arbejdsområde <0>{workspaceDisplayName}</0> er blevet suspenderet i {daysSinceInactive} dage."
|
||||
|
||||
#. js-lingui-id: PviVyk
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr "Deltag i dit team på Twenty"
|
||||
#~ msgid "Join your team on Twenty"
|
||||
#~ msgstr "Deltag i dit team på Twenty"
|
||||
|
||||
#. js-lingui-id: ogtYkT
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "Adgangskode opdateret"
|
||||
#~ msgid "Password updated"
|
||||
#~ msgstr "Adgangskode opdateret"
|
||||
|
||||
#. js-lingui-id: Yucjaa
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Please validate this domain to allow users with"
|
||||
msgstr "Bekræft venligst dette domæne for at tillade brugere med"
|
||||
#~ msgid "Please validate this domain to allow users with"
|
||||
#~ msgstr "Bekræft venligst dette domæne for at tillade brugere med"
|
||||
|
||||
#. js-lingui-id: u3Ns4p
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
@@ -125,33 +330,33 @@ msgstr "Bekræft venligst dette domæne for at tillade brugere med"
|
||||
|
||||
#. js-lingui-id: OfhWJH
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr "Nulstil"
|
||||
#~ msgid "Reset"
|
||||
#~ msgstr "Nulstil"
|
||||
|
||||
#. js-lingui-id: RE5NiU
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr "Nulstil din adgangskode 🗝"
|
||||
#~ msgid "Reset your password 🗝"
|
||||
#~ msgstr "Nulstil din adgangskode 🗝"
|
||||
|
||||
#. js-lingui-id: UBadaJ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace "
|
||||
msgstr "Suspenderet arbejdsområde "
|
||||
#~ msgid "Suspended Workspace "
|
||||
#~ msgstr "Suspenderet arbejdsområde "
|
||||
|
||||
#. js-lingui-id: 7yDt8q
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr "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."
|
||||
#~ msgid "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."
|
||||
#~ msgstr "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."
|
||||
|
||||
#. js-lingui-id: igorB1
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr "Arbejdsområdet vil blive deaktiveret om {remainingDays} {dayOrDays}, og alle dens data vil blive slettet."
|
||||
#~ msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
#~ msgstr "Arbejdsområdet vil blive deaktiveret om {remainingDays} {dayOrDays}, og alle dens data vil blive slettet."
|
||||
|
||||
#. js-lingui-id: 7OEHy1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr "Dette er en bekræftelse på, at adgangskoden til din konto ({email}) er blevet ændret den {formattedDate}."
|
||||
#~ msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
#~ msgstr "Dette er en bekræftelse på, at adgangskoden til din konto ({email}) er blevet ændret den {formattedDate}."
|
||||
|
||||
#. js-lingui-id: wSOsS+
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -160,8 +365,8 @@ msgstr "Dette er en bekræftelse på, at adgangskoden til din konto ({email}) er
|
||||
|
||||
#. js-lingui-id: R4gMjN
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr "Dette link er kun gyldigt i de næste {duration}. Hvis linket ikke fungerer, kan du bruge loginbekræftelseslinket direkte:"
|
||||
#~ msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
#~ msgstr "Dette link er kun gyldigt i de næste {duration}. Hvis linket ikke fungerer, kan du bruge loginbekræftelseslinket direkte:"
|
||||
|
||||
#. js-lingui-id: 2oA637
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
@@ -170,24 +375,24 @@ msgstr "Dette link er kun gyldigt i de næste {duration}. Hvis linket ikke funge
|
||||
|
||||
#. js-lingui-id: H0v4yC
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr "Opdater dit abonnement"
|
||||
#~ msgid "Update your subscription"
|
||||
#~ msgstr "Opdater dit abonnement"
|
||||
|
||||
#. js-lingui-id: QbiUqd
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr "Bekræft domæne"
|
||||
#~ msgid "Validate domain"
|
||||
#~ msgstr "Bekræft domæne"
|
||||
|
||||
#. js-lingui-id: wCKkSr
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr "Bekræft e-mail"
|
||||
#~ msgid "Verify Email"
|
||||
#~ msgstr "Bekræft e-mail"
|
||||
|
||||
#. js-lingui-id: 9MqLGX
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr "Dit arbejdsområde <0>{workspaceDisplayName}</0> er blevet slettet, da dit abonnement udløb for {daysSinceInactive} dage siden."
|
||||
#~ msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
#~ msgstr "Dit arbejdsområde <0>{workspaceDisplayName}</0> er blevet slettet, da dit abonnement udløb for {daysSinceInactive} dage siden."
|
||||
|
||||
#. js-lingui-id: KFmFrQ
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
|
||||
@@ -18,30 +18,235 @@ msgstr ""
|
||||
"X-Crowdin-File: /packages/twenty-emails/src/locales/en.po\n"
|
||||
"X-Crowdin-File-ID: 27\n"
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>): Please validate this domain to allow users with <1>@{domain}</1> email addresses to join your workspace without requiring an invitation."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/test.email.tsx
|
||||
msgid "Test email"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>) has invited you to join a workspace called <1>{workspaceName}</1>."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Accept invite"
|
||||
msgstr "Einladung akzeptieren"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "What is Twenty?"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "It's a CRM, a software to help businesses manage their customer data and relationships efficiently."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Website"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's website"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Github"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's GitHub repository"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "User guide"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Read Twenty's user guide"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Developers"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's developer documentation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Twenty.com, Public Benefit Corporation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "San Francisco / Paris"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
#~ msgid "Accept invite"
|
||||
#~ msgstr "Einladung akzeptieren"
|
||||
|
||||
#. js-lingui-id: Yxj+Uc
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr "Alle Daten in diesem Workspace wurden dauerhaft gelöscht."
|
||||
#~ msgid "All data in this workspace has been permanently deleted."
|
||||
#~ msgstr "Alle Daten in diesem Workspace wurden dauerhaft gelöscht."
|
||||
|
||||
#. js-lingui-id: RPHFhC
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr "Bestätigen Sie Ihre E-Mail-Adresse"
|
||||
#~ msgid "Confirm your email address"
|
||||
#~ msgstr "Bestätigen Sie Ihre E-Mail-Adresse"
|
||||
|
||||
#. js-lingui-id: nvkBPN
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr "Mit Twenty verbinden"
|
||||
#~ msgid "Connect to Twenty"
|
||||
#~ msgstr "Mit Twenty verbinden"
|
||||
|
||||
#. js-lingui-id: jPQSEz
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr "Erstellen Sie einen neuen Arbeitsbereich"
|
||||
#~ msgid "Create a new workspace"
|
||||
#~ msgstr "Erstellen Sie einen neuen Arbeitsbereich"
|
||||
|
||||
#. js-lingui-id: JRzgV7
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -50,73 +255,73 @@ msgstr "Erstellen Sie einen neuen Arbeitsbereich"
|
||||
|
||||
#. js-lingui-id: Lm5BBI
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Dear {userName}"
|
||||
msgstr "Sehr geehrte/r {userName}"
|
||||
#~ msgid "Dear {userName}"
|
||||
#~ msgstr "Sehr geehrte/r {userName}"
|
||||
|
||||
#. js-lingui-id: lIdkf2
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr "Sehr geehrte/r {userName},"
|
||||
#~ msgid "Dear {userName},"
|
||||
#~ msgstr "Sehr geehrte/r {userName},"
|
||||
|
||||
#. js-lingui-id: NTwcnq
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr "Gelöschter Arbeitsbereich"
|
||||
#~ msgid "Deleted Workspace"
|
||||
#~ msgstr "Gelöschter Arbeitsbereich"
|
||||
|
||||
#. js-lingui-id: S3uuQj
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "email addresses to join your workspace without requiring an invitation."
|
||||
msgstr "E-Mail-Adressen, um Ihrem Arbeitsbereich ohne Einladung beizutreten."
|
||||
#~ msgid "email addresses to join your workspace without requiring an invitation."
|
||||
#~ msgstr "E-Mail-Adressen, um Ihrem Arbeitsbereich ohne Einladung beizutreten."
|
||||
|
||||
#. js-lingui-id: tGme7M
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "has invited you to join a workspace called "
|
||||
msgstr "hat Sie eingeladen, einem Workspace namens "
|
||||
#~ msgid "has invited you to join a workspace called "
|
||||
#~ msgstr "hat Sie eingeladen, einem Workspace namens "
|
||||
|
||||
#. js-lingui-id: uzTaYi
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Hello"
|
||||
msgstr "Hallo"
|
||||
#~ msgid "Hello"
|
||||
#~ msgstr "Hallo"
|
||||
|
||||
#. js-lingui-id: Xa0d85
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr "Hallo,"
|
||||
#~ msgid "Hello,"
|
||||
#~ msgstr "Hallo,"
|
||||
|
||||
#. js-lingui-id: eE1nG1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr "Wenn Sie diese Änderung nicht veranlasst haben, kontaktieren Sie bitte umgehend den Eigentümer Ihres Workspaces."
|
||||
#~ msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
#~ msgstr "Wenn Sie diese Änderung nicht veranlasst haben, kontaktieren Sie bitte umgehend den Eigentümer Ihres Workspaces."
|
||||
|
||||
#. js-lingui-id: Gz91L8
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr "Wenn Sie Twenty weiterhin nutzen möchten, aktualisieren Sie bitte Ihr Abonnement innerhalb der nächsten {remainingDays} {dayOrDays}."
|
||||
#~ msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
#~ msgstr "Wenn Sie Twenty weiterhin nutzen möchten, aktualisieren Sie bitte Ihr Abonnement innerhalb der nächsten {remainingDays} {dayOrDays}."
|
||||
|
||||
#. js-lingui-id: 0weyko
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr "Wenn Sie Twenty erneut nutzen möchten, können Sie einen neuen Workspace erstellen."
|
||||
#~ msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
#~ msgstr "Wenn Sie Twenty erneut nutzen möchten, können Sie einen neuen Workspace erstellen."
|
||||
|
||||
#. js-lingui-id: 7JuhZQ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr "Es scheint, dass Ihr Workspace <0>{workspaceDisplayName}</0> seit {daysSinceInactive} Tagen gesperrt ist."
|
||||
#~ msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
#~ msgstr "Es scheint, dass Ihr Workspace <0>{workspaceDisplayName}</0> seit {daysSinceInactive} Tagen gesperrt ist."
|
||||
|
||||
#. js-lingui-id: PviVyk
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr "Treten Sie Ihrem Team auf Twenty bei"
|
||||
#~ msgid "Join your team on Twenty"
|
||||
#~ msgstr "Treten Sie Ihrem Team auf Twenty bei"
|
||||
|
||||
#. js-lingui-id: ogtYkT
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "Passwort wurde aktualisiert"
|
||||
#~ msgid "Password updated"
|
||||
#~ msgstr "Passwort wurde aktualisiert"
|
||||
|
||||
#. js-lingui-id: Yucjaa
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Please validate this domain to allow users with"
|
||||
msgstr "Bitte validieren Sie diese Domain, um Benutzern mit"
|
||||
#~ msgid "Please validate this domain to allow users with"
|
||||
#~ msgstr "Bitte validieren Sie diese Domain, um Benutzern mit"
|
||||
|
||||
#. js-lingui-id: u3Ns4p
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
@@ -125,33 +330,33 @@ msgstr "Bitte validieren Sie diese Domain, um Benutzern mit"
|
||||
|
||||
#. js-lingui-id: OfhWJH
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr "Zurücksetzen"
|
||||
#~ msgid "Reset"
|
||||
#~ msgstr "Zurücksetzen"
|
||||
|
||||
#. js-lingui-id: RE5NiU
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr "Setzen Sie Ihr Passwort zurück 🗝"
|
||||
#~ msgid "Reset your password 🗝"
|
||||
#~ msgstr "Setzen Sie Ihr Passwort zurück 🗝"
|
||||
|
||||
#. js-lingui-id: UBadaJ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace "
|
||||
msgstr "Ausgesetzter Arbeitsbereich "
|
||||
#~ msgid "Suspended Workspace "
|
||||
#~ msgstr "Ausgesetzter Arbeitsbereich "
|
||||
|
||||
#. js-lingui-id: 7yDt8q
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr "Vielen Dank für Ihre Registrierung bei Twenty! Bevor wir beginnen, müssen wir nur bestätigen, dass Sie es sind. Klicken Sie oben, um Ihre E-Mail-Adresse zu verifizieren."
|
||||
#~ msgid "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."
|
||||
#~ msgstr "Vielen Dank für Ihre Registrierung bei Twenty! Bevor wir beginnen, müssen wir nur bestätigen, dass Sie es sind. Klicken Sie oben, um Ihre E-Mail-Adresse zu verifizieren."
|
||||
|
||||
#. js-lingui-id: igorB1
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr "Der Workspace wird in {remainingDays} {dayOrDays} deaktiviert, und alle Daten werden gelöscht."
|
||||
#~ msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
#~ msgstr "Der Workspace wird in {remainingDays} {dayOrDays} deaktiviert, und alle Daten werden gelöscht."
|
||||
|
||||
#. js-lingui-id: 7OEHy1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr "Dies ist eine Bestätigung, dass das Passwort für Ihr Konto ({email}) am {formattedDate} erfolgreich geändert wurde."
|
||||
#~ msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
#~ msgstr "Dies ist eine Bestätigung, dass das Passwort für Ihr Konto ({email}) am {formattedDate} erfolgreich geändert wurde."
|
||||
|
||||
#. js-lingui-id: wSOsS+
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -160,8 +365,8 @@ msgstr "Dies ist eine Bestätigung, dass das Passwort für Ihr Konto ({email}) a
|
||||
|
||||
#. js-lingui-id: R4gMjN
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr "Dieser Link ist nur für die nächsten {duration} gültig. Wenn der Link nicht funktioniert, können Sie den Anmeldebestätigungslink direkt verwenden:"
|
||||
#~ msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
#~ msgstr "Dieser Link ist nur für die nächsten {duration} gültig. Wenn der Link nicht funktioniert, können Sie den Anmeldebestätigungslink direkt verwenden:"
|
||||
|
||||
#. js-lingui-id: 2oA637
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
@@ -170,24 +375,24 @@ msgstr "Dieser Link ist nur für die nächsten {duration} gültig. Wenn der Link
|
||||
|
||||
#. js-lingui-id: H0v4yC
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr "Aktualisieren Sie Ihr Abonnement"
|
||||
#~ msgid "Update your subscription"
|
||||
#~ msgstr "Aktualisieren Sie Ihr Abonnement"
|
||||
|
||||
#. js-lingui-id: QbiUqd
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr "Domain validieren"
|
||||
#~ msgid "Validate domain"
|
||||
#~ msgstr "Domain validieren"
|
||||
|
||||
#. js-lingui-id: wCKkSr
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr "E-Mail verifizieren"
|
||||
#~ msgid "Verify Email"
|
||||
#~ msgstr "E-Mail verifizieren"
|
||||
|
||||
#. js-lingui-id: 9MqLGX
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr "Ihr Workspace <0>{workspaceDisplayName}</0> wurde gelöscht, da Ihr Abonnement vor {daysSinceInactive} Tagen abgelaufen ist."
|
||||
#~ msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
#~ msgstr "Ihr Workspace <0>{workspaceDisplayName}</0> wurde gelöscht, da Ihr Abonnement vor {daysSinceInactive} Tagen abgelaufen ist."
|
||||
|
||||
#. js-lingui-id: KFmFrQ
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
|
||||
@@ -18,30 +18,235 @@ msgstr ""
|
||||
"X-Crowdin-File: /packages/twenty-emails/src/locales/en.po\n"
|
||||
"X-Crowdin-File-ID: 27\n"
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>): Please validate this domain to allow users with <1>@{domain}</1> email addresses to join your workspace without requiring an invitation."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/test.email.tsx
|
||||
msgid "Test email"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>) has invited you to join a workspace called <1>{workspaceName}</1>."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Accept invite"
|
||||
msgstr "Αποδοχή πρόσκλησης"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "What is Twenty?"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "It's a CRM, a software to help businesses manage their customer data and relationships efficiently."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Website"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's website"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Github"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's GitHub repository"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "User guide"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Read Twenty's user guide"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Developers"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's developer documentation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Twenty.com, Public Benefit Corporation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "San Francisco / Paris"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
#~ msgid "Accept invite"
|
||||
#~ msgstr "Αποδοχή πρόσκλησης"
|
||||
|
||||
#. js-lingui-id: Yxj+Uc
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr "Όλα τα δεδομένα σε αυτόν τον χώρο εργασίας έχουν διαγραφεί μόνιμα."
|
||||
#~ msgid "All data in this workspace has been permanently deleted."
|
||||
#~ msgstr "Όλα τα δεδομένα σε αυτόν τον χώρο εργασίας έχουν διαγραφεί μόνιμα."
|
||||
|
||||
#. js-lingui-id: RPHFhC
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr "Επιβεβαιώστε τη διεύθυνση email σας"
|
||||
#~ msgid "Confirm your email address"
|
||||
#~ msgstr "Επιβεβαιώστε τη διεύθυνση email σας"
|
||||
|
||||
#. js-lingui-id: nvkBPN
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr "Συνδεθείτε στο Twenty"
|
||||
#~ msgid "Connect to Twenty"
|
||||
#~ msgstr "Συνδεθείτε στο Twenty"
|
||||
|
||||
#. js-lingui-id: jPQSEz
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr "Δημιουργία νέου χώρου εργασίας"
|
||||
#~ msgid "Create a new workspace"
|
||||
#~ msgstr "Δημιουργία νέου χώρου εργασίας"
|
||||
|
||||
#. js-lingui-id: JRzgV7
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -50,73 +255,73 @@ msgstr "Δημιουργία νέου χώρου εργασίας"
|
||||
|
||||
#. js-lingui-id: Lm5BBI
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Dear {userName}"
|
||||
msgstr "Αγαπητέ/ή {userName}"
|
||||
#~ msgid "Dear {userName}"
|
||||
#~ msgstr "Αγαπητέ/ή {userName}"
|
||||
|
||||
#. js-lingui-id: lIdkf2
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr "Αγαπητέ/ή {userName},"
|
||||
#~ msgid "Dear {userName},"
|
||||
#~ msgstr "Αγαπητέ/ή {userName},"
|
||||
|
||||
#. js-lingui-id: NTwcnq
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr "Διαγραμμένος Χώρος Εργασίας"
|
||||
#~ msgid "Deleted Workspace"
|
||||
#~ msgstr "Διαγραμμένος Χώρος Εργασίας"
|
||||
|
||||
#. js-lingui-id: S3uuQj
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "email addresses to join your workspace without requiring an invitation."
|
||||
msgstr "διευθύνσεις ηλεκτρονικού ταχυδρομείου για να συμμετάσχουν στο χώρο εργασίας σας χωρίς να απαιτείται πρόσκληση."
|
||||
#~ msgid "email addresses to join your workspace without requiring an invitation."
|
||||
#~ msgstr "διευθύνσεις ηλεκτρονικού ταχυδρομείου για να συμμετάσχουν στο χώρο εργασίας σας χωρίς να απαιτείται πρόσκληση."
|
||||
|
||||
#. js-lingui-id: tGme7M
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "has invited you to join a workspace called "
|
||||
msgstr "σας έχει προσκαλέσει να συμμετάσχετε σε έναν χώρο εργασίας με την ονομασία "
|
||||
#~ msgid "has invited you to join a workspace called "
|
||||
#~ msgstr "σας έχει προσκαλέσει να συμμετάσχετε σε έναν χώρο εργασίας με την ονομασία "
|
||||
|
||||
#. js-lingui-id: uzTaYi
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Hello"
|
||||
msgstr "Γεια σας"
|
||||
#~ msgid "Hello"
|
||||
#~ msgstr "Γεια σας"
|
||||
|
||||
#. js-lingui-id: Xa0d85
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr "Γεια σας,"
|
||||
#~ msgid "Hello,"
|
||||
#~ msgstr "Γεια σας,"
|
||||
|
||||
#. js-lingui-id: eE1nG1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr "Εάν δεν έχετε προβεί εσείς σε αυτήν την αλλαγή, παρακαλώ επικοινωνήστε άμεσα με τον ιδιοκτήτη του χώρου εργασίας σας."
|
||||
#~ msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
#~ msgstr "Εάν δεν έχετε προβεί εσείς σε αυτήν την αλλαγή, παρακαλώ επικοινωνήστε άμεσα με τον ιδιοκτήτη του χώρου εργασίας σας."
|
||||
|
||||
#. js-lingui-id: Gz91L8
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr "Εάν επιθυμείτε να συνεχίστε να χρησιμοποιείτε το Twenty, παρακαλούμε ενημερώστε την συνδρομή σας εντός των επόμενων {remainingDays} {dayOrDays}."
|
||||
#~ msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
#~ msgstr "Εάν επιθυμείτε να συνεχίστε να χρησιμοποιείτε το Twenty, παρακαλούμε ενημερώστε την συνδρομή σας εντός των επόμενων {remainingDays} {dayOrDays}."
|
||||
|
||||
#. js-lingui-id: 0weyko
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr "Εάν επιθυμείτε να χρησιμοποιήσετε ξανά το Twenty, μπορείτε να δημιουργήσετε ένα νέο χώρο εργασίας."
|
||||
#~ msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
#~ msgstr "Εάν επιθυμείτε να χρησιμοποιήσετε ξανά το Twenty, μπορείτε να δημιουργήσετε ένα νέο χώρο εργασίας."
|
||||
|
||||
#. js-lingui-id: 7JuhZQ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr "Φαίνεται ότι ο χώρος εργασίας σας <0>{workspaceDisplayName}</0> έχει ανασταλεί για {daysSinceInactive} ημέρες."
|
||||
#~ msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
#~ msgstr "Φαίνεται ότι ο χώρος εργασίας σας <0>{workspaceDisplayName}</0> έχει ανασταλεί για {daysSinceInactive} ημέρες."
|
||||
|
||||
#. js-lingui-id: PviVyk
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr "Συμμετέχετε στην ομάδα σας στο Twenty"
|
||||
#~ msgid "Join your team on Twenty"
|
||||
#~ msgstr "Συμμετέχετε στην ομάδα σας στο Twenty"
|
||||
|
||||
#. js-lingui-id: ogtYkT
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "Ο κωδικός έχει ενημερωθεί"
|
||||
#~ msgid "Password updated"
|
||||
#~ msgstr "Ο κωδικός έχει ενημερωθεί"
|
||||
|
||||
#. js-lingui-id: Yucjaa
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Please validate this domain to allow users with"
|
||||
msgstr "Παρακαλώ επικυρώστε αυτόν τον τομέα για να επιτρέψετε στους χρήστες με"
|
||||
#~ msgid "Please validate this domain to allow users with"
|
||||
#~ msgstr "Παρακαλώ επικυρώστε αυτόν τον τομέα για να επιτρέψετε στους χρήστες με"
|
||||
|
||||
#. js-lingui-id: u3Ns4p
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
@@ -125,33 +330,33 @@ msgstr "Παρακαλώ επικυρώστε αυτόν τον τομέα γι
|
||||
|
||||
#. js-lingui-id: OfhWJH
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr "Επαναφορά"
|
||||
#~ msgid "Reset"
|
||||
#~ msgstr "Επαναφορά"
|
||||
|
||||
#. js-lingui-id: RE5NiU
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr "Επαναφέρετε τον κωδικό σας 🗝"
|
||||
#~ msgid "Reset your password 🗝"
|
||||
#~ msgstr "Επαναφέρετε τον κωδικό σας 🗝"
|
||||
|
||||
#. js-lingui-id: UBadaJ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace "
|
||||
msgstr "Ανασταλμένος Χώρος Εργασίας "
|
||||
#~ msgid "Suspended Workspace "
|
||||
#~ msgstr "Ανασταλμένος Χώρος Εργασίας "
|
||||
|
||||
#. js-lingui-id: 7yDt8q
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr "Σας ευχαριστούμε που εγγραφήκατε για έναν λογαριασμό στο Twenty! Πριν ξεκινήσουμε, πρέπει μόνο να επιβεβαιώσουμε ότι αυτός είστε εσείς. Κάντε κλικ παραπάνω για να επαληθεύσετε τη διεύθυνση email σας."
|
||||
#~ msgid "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."
|
||||
#~ msgstr "Σας ευχαριστούμε που εγγραφήκατε για έναν λογαριασμό στο Twenty! Πριν ξεκινήσουμε, πρέπει μόνο να επιβεβαιώσουμε ότι αυτός είστε εσείς. Κάντε κλικ παραπάνω για να επαληθεύσετε τη διεύθυνση email σας."
|
||||
|
||||
#. js-lingui-id: igorB1
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr "Ο χώρος εργασίας θα απενεργοποιηθεί σε {remainingDays} {dayOrDays}, και όλα τα δεδομένα του θα διαγραφούν."
|
||||
#~ msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
#~ msgstr "Ο χώρος εργασίας θα απενεργοποιηθεί σε {remainingDays} {dayOrDays}, και όλα τα δεδομένα του θα διαγραφούν."
|
||||
|
||||
#. js-lingui-id: 7OEHy1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr "Αυτό είναι ένα επιβεβαίωση ότι ο κωδικός για τον λογαριασμό σας ({email}) άλλαξε με επιτυχία στις {formattedDate}."
|
||||
#~ msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
#~ msgstr "Αυτό είναι ένα επιβεβαίωση ότι ο κωδικός για τον λογαριασμό σας ({email}) άλλαξε με επιτυχία στις {formattedDate}."
|
||||
|
||||
#. js-lingui-id: wSOsS+
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -160,8 +365,8 @@ msgstr "Αυτό είναι ένα επιβεβαίωση ότι ο κωδικό
|
||||
|
||||
#. js-lingui-id: R4gMjN
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr "Αυτός ο σύνδεσμος ισχύει μόνο για τις επόμενες {duration}. Εάν ο σύνδεσμος δεν λειτουργεί, μπορείτε να χρησιμοποιήσετε τον σύνδεσμο επαλήθευσης σύνδεσης απευθείας:"
|
||||
#~ msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
#~ msgstr "Αυτός ο σύνδεσμος ισχύει μόνο για τις επόμενες {duration}. Εάν ο σύνδεσμος δεν λειτουργεί, μπορείτε να χρησιμοποιήσετε τον σύνδεσμο επαλήθευσης σύνδεσης απευθείας:"
|
||||
|
||||
#. js-lingui-id: 2oA637
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
@@ -170,24 +375,24 @@ msgstr "Αυτός ο σύνδεσμος ισχύει μόνο για τις ε
|
||||
|
||||
#. js-lingui-id: H0v4yC
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr "Ενημερώστε τη συνδρομή σας"
|
||||
#~ msgid "Update your subscription"
|
||||
#~ msgstr "Ενημερώστε τη συνδρομή σας"
|
||||
|
||||
#. js-lingui-id: QbiUqd
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr "Επικύρωση τομέα"
|
||||
#~ msgid "Validate domain"
|
||||
#~ msgstr "Επικύρωση τομέα"
|
||||
|
||||
#. js-lingui-id: wCKkSr
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr "Επαληθεύστε το Email"
|
||||
#~ msgid "Verify Email"
|
||||
#~ msgstr "Επαληθεύστε το Email"
|
||||
|
||||
#. js-lingui-id: 9MqLGX
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr "Ο χώρος εργασίας σας <0>{workspaceDisplayName}</0> έχει διαγραφεί καθώς η συνδρομή σας έληξε {daysSinceInactive} ημέρες πριν."
|
||||
#~ msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
#~ msgstr "Ο χώρος εργασίας σας <0>{workspaceDisplayName}</0> έχει διαγραφεί καθώς η συνδρομή σας έληξε {daysSinceInactive} ημέρες πριν."
|
||||
|
||||
#. js-lingui-id: KFmFrQ
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
|
||||
@@ -13,31 +13,236 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace"
|
||||
msgstr "Suspended Workspace"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr "Dear {userName},"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr "Hello,"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr "Update your subscription"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr "Validate domain"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>): Please validate this domain to allow users with <1>@{domain}</1> email addresses to join your workspace without requiring an invitation."
|
||||
msgstr "{senderName} (<0>{senderEmail}</0>): Please validate this domain to allow users with <1>@{domain}</1> email addresses to join your workspace without requiring an invitation."
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/test.email.tsx
|
||||
msgid "Test email"
|
||||
msgstr "Test email"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr "Join your team on Twenty"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>) has invited you to join a workspace called <1>{workspaceName}</1>."
|
||||
msgstr "{senderName} (<0>{senderEmail}</0>) has invited you to join a workspace called <1>{workspaceName}</1>."
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Accept invite"
|
||||
msgstr "Accept invite"
|
||||
|
||||
#. js-lingui-id: Yxj+Uc
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr "All data in this workspace has been permanently deleted."
|
||||
|
||||
#. js-lingui-id: RPHFhC
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr "Confirm your email address"
|
||||
|
||||
#. js-lingui-id: nvkBPN
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr "Verify Email"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr "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."
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "Password updated"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr "Connect to Twenty"
|
||||
|
||||
#. js-lingui-id: jPQSEz
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr "Reset your password 🗝"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr "Reset"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr "Deleted Workspace"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr "All data in this workspace has been permanently deleted."
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr "If you wish to use Twenty again, you can create a new workspace."
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr "Create a new workspace"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "What is Twenty?"
|
||||
msgstr "What is Twenty?"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "It's a CRM, a software to help businesses manage their customer data and relationships efficiently."
|
||||
msgstr "It's a CRM, a software to help businesses manage their customer data and relationships efficiently."
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Website"
|
||||
msgstr "Website"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's website"
|
||||
msgstr "Visit Twenty's website"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Github"
|
||||
msgstr "Github"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's GitHub repository"
|
||||
msgstr "Visit Twenty's GitHub repository"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "User guide"
|
||||
msgstr "User guide"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Read Twenty's user guide"
|
||||
msgstr "Read Twenty's user guide"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Developers"
|
||||
msgstr "Developers"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's developer documentation"
|
||||
msgstr "Visit Twenty's developer documentation"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Twenty.com, Public Benefit Corporation"
|
||||
msgstr "Twenty.com, Public Benefit Corporation"
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "San Francisco / Paris"
|
||||
msgstr "San Francisco / Paris"
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
#~ msgid "Accept invite"
|
||||
#~ msgstr "Accept invite"
|
||||
|
||||
#. js-lingui-id: Yxj+Uc
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
#~ msgid "All data in this workspace has been permanently deleted."
|
||||
#~ msgstr "All data in this workspace has been permanently deleted."
|
||||
|
||||
#. js-lingui-id: RPHFhC
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
#~ msgid "Confirm your email address"
|
||||
#~ msgstr "Confirm your email address"
|
||||
|
||||
#. js-lingui-id: nvkBPN
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#~ msgid "Connect to Twenty"
|
||||
#~ msgstr "Connect to Twenty"
|
||||
|
||||
#. js-lingui-id: jPQSEz
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
#~ msgid "Create a new workspace"
|
||||
#~ msgstr "Create a new workspace"
|
||||
|
||||
#. js-lingui-id: JRzgV7
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#~ msgid "Dear"
|
||||
@@ -45,73 +250,73 @@ msgstr "Create a new workspace"
|
||||
|
||||
#. js-lingui-id: Lm5BBI
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Dear {userName}"
|
||||
msgstr "Dear {userName}"
|
||||
#~ msgid "Dear {userName}"
|
||||
#~ msgstr "Dear {userName}"
|
||||
|
||||
#. js-lingui-id: lIdkf2
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr "Dear {userName},"
|
||||
#~ msgid "Dear {userName},"
|
||||
#~ msgstr "Dear {userName},"
|
||||
|
||||
#. js-lingui-id: NTwcnq
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr "Deleted Workspace"
|
||||
#~ msgid "Deleted Workspace"
|
||||
#~ msgstr "Deleted Workspace"
|
||||
|
||||
#. js-lingui-id: S3uuQj
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "email addresses to join your workspace without requiring an invitation."
|
||||
msgstr "email addresses to join your workspace without requiring an invitation."
|
||||
#~ msgid "email addresses to join your workspace without requiring an invitation."
|
||||
#~ msgstr "email addresses to join your workspace without requiring an invitation."
|
||||
|
||||
#. js-lingui-id: tGme7M
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "has invited you to join a workspace called "
|
||||
msgstr "has invited you to join a workspace called "
|
||||
#~ msgid "has invited you to join a workspace called "
|
||||
#~ msgstr "has invited you to join a workspace called "
|
||||
|
||||
#. js-lingui-id: uzTaYi
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Hello"
|
||||
msgstr "Hello"
|
||||
#~ msgid "Hello"
|
||||
#~ msgstr "Hello"
|
||||
|
||||
#. js-lingui-id: Xa0d85
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr "Hello,"
|
||||
#~ msgid "Hello,"
|
||||
#~ msgstr "Hello,"
|
||||
|
||||
#. js-lingui-id: eE1nG1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
#~ msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
#~ msgstr "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
|
||||
#. js-lingui-id: Gz91L8
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
#~ msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
#~ msgstr "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
|
||||
#. js-lingui-id: 0weyko
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr "If you wish to use Twenty again, you can create a new workspace."
|
||||
#~ msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
#~ msgstr "If you wish to use Twenty again, you can create a new workspace."
|
||||
|
||||
#. js-lingui-id: 7JuhZQ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
#~ msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
#~ msgstr "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
|
||||
#. js-lingui-id: PviVyk
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr "Join your team on Twenty"
|
||||
#~ msgid "Join your team on Twenty"
|
||||
#~ msgstr "Join your team on Twenty"
|
||||
|
||||
#. js-lingui-id: ogtYkT
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "Password updated"
|
||||
#~ msgid "Password updated"
|
||||
#~ msgstr "Password updated"
|
||||
|
||||
#. js-lingui-id: Yucjaa
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Please validate this domain to allow users with"
|
||||
msgstr "Please validate this domain to allow users with"
|
||||
#~ msgid "Please validate this domain to allow users with"
|
||||
#~ msgstr "Please validate this domain to allow users with"
|
||||
|
||||
#. js-lingui-id: u3Ns4p
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
@@ -120,33 +325,33 @@ msgstr "Please validate this domain to allow users with"
|
||||
|
||||
#. js-lingui-id: OfhWJH
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr "Reset"
|
||||
#~ msgid "Reset"
|
||||
#~ msgstr "Reset"
|
||||
|
||||
#. js-lingui-id: RE5NiU
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr "Reset your password 🗝"
|
||||
#~ msgid "Reset your password 🗝"
|
||||
#~ msgstr "Reset your password 🗝"
|
||||
|
||||
#. js-lingui-id: UBadaJ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace "
|
||||
msgstr "Suspended Workspace "
|
||||
#~ msgid "Suspended Workspace "
|
||||
#~ msgstr "Suspended Workspace "
|
||||
|
||||
#. js-lingui-id: 7yDt8q
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr "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."
|
||||
#~ msgid "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."
|
||||
#~ msgstr "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."
|
||||
|
||||
#. js-lingui-id: igorB1
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
#~ msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
#~ msgstr "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
|
||||
#. js-lingui-id: 7OEHy1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
#~ msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
#~ msgstr "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
|
||||
#. js-lingui-id: wSOsS+
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -155,8 +360,8 @@ msgstr "This is a confirmation that password for your account ({email}) was succ
|
||||
|
||||
#. js-lingui-id: R4gMjN
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
#~ msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
#~ msgstr "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
|
||||
#. js-lingui-id: 2oA637
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
@@ -165,24 +370,24 @@ msgstr "This link is only valid for the next {duration}. If the link does not wo
|
||||
|
||||
#. js-lingui-id: H0v4yC
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr "Update your subscription"
|
||||
#~ msgid "Update your subscription"
|
||||
#~ msgstr "Update your subscription"
|
||||
|
||||
#. js-lingui-id: QbiUqd
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr "Validate domain"
|
||||
#~ msgid "Validate domain"
|
||||
#~ msgstr "Validate domain"
|
||||
|
||||
#. js-lingui-id: wCKkSr
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr "Verify Email"
|
||||
#~ msgid "Verify Email"
|
||||
#~ msgstr "Verify Email"
|
||||
|
||||
#. js-lingui-id: 9MqLGX
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
#~ msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
#~ msgstr "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
|
||||
#. js-lingui-id: KFmFrQ
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
|
||||
@@ -18,30 +18,235 @@ msgstr ""
|
||||
"X-Crowdin-File: /packages/twenty-emails/src/locales/en.po\n"
|
||||
"X-Crowdin-File-ID: 27\n"
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>): Please validate this domain to allow users with <1>@{domain}</1> email addresses to join your workspace without requiring an invitation."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/test.email.tsx
|
||||
msgid "Test email"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>) has invited you to join a workspace called <1>{workspaceName}</1>."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Accept invite"
|
||||
msgstr "Aceptar invitación"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "What is Twenty?"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "It's a CRM, a software to help businesses manage their customer data and relationships efficiently."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Website"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's website"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Github"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's GitHub repository"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "User guide"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Read Twenty's user guide"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Developers"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's developer documentation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Twenty.com, Public Benefit Corporation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "San Francisco / Paris"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
#~ msgid "Accept invite"
|
||||
#~ msgstr "Aceptar invitación"
|
||||
|
||||
#. js-lingui-id: Yxj+Uc
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr "Todos los datos de este espacio de trabajo han sido eliminados permanentemente."
|
||||
#~ msgid "All data in this workspace has been permanently deleted."
|
||||
#~ msgstr "Todos los datos de este espacio de trabajo han sido eliminados permanentemente."
|
||||
|
||||
#. js-lingui-id: RPHFhC
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr "Confirma tu dirección de correo electrónico"
|
||||
#~ msgid "Confirm your email address"
|
||||
#~ msgstr "Confirma tu dirección de correo electrónico"
|
||||
|
||||
#. js-lingui-id: nvkBPN
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr "Conéctate a Twenty"
|
||||
#~ msgid "Connect to Twenty"
|
||||
#~ msgstr "Conéctate a Twenty"
|
||||
|
||||
#. js-lingui-id: jPQSEz
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr "Crea un nuevo espacio de trabajo"
|
||||
#~ msgid "Create a new workspace"
|
||||
#~ msgstr "Crea un nuevo espacio de trabajo"
|
||||
|
||||
#. js-lingui-id: JRzgV7
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -50,73 +255,73 @@ msgstr "Crea un nuevo espacio de trabajo"
|
||||
|
||||
#. js-lingui-id: Lm5BBI
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Dear {userName}"
|
||||
msgstr "Estimado/a {userName}"
|
||||
#~ msgid "Dear {userName}"
|
||||
#~ msgstr "Estimado/a {userName}"
|
||||
|
||||
#. js-lingui-id: lIdkf2
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr "Estimado/a {userName},"
|
||||
#~ msgid "Dear {userName},"
|
||||
#~ msgstr "Estimado/a {userName},"
|
||||
|
||||
#. js-lingui-id: NTwcnq
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr "Espacio de trabajo eliminado"
|
||||
#~ msgid "Deleted Workspace"
|
||||
#~ msgstr "Espacio de trabajo eliminado"
|
||||
|
||||
#. js-lingui-id: S3uuQj
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "email addresses to join your workspace without requiring an invitation."
|
||||
msgstr "direcciones de correo electrónico para unirse a su espacio de trabajo sin requerir una invitación."
|
||||
#~ msgid "email addresses to join your workspace without requiring an invitation."
|
||||
#~ msgstr "direcciones de correo electrónico para unirse a su espacio de trabajo sin requerir una invitación."
|
||||
|
||||
#. js-lingui-id: tGme7M
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "has invited you to join a workspace called "
|
||||
msgstr "te ha invitado a unirte a un espacio de trabajo llamado "
|
||||
#~ msgid "has invited you to join a workspace called "
|
||||
#~ msgstr "te ha invitado a unirte a un espacio de trabajo llamado "
|
||||
|
||||
#. js-lingui-id: uzTaYi
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Hello"
|
||||
msgstr "Hola"
|
||||
#~ msgid "Hello"
|
||||
#~ msgstr "Hola"
|
||||
|
||||
#. js-lingui-id: Xa0d85
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr "Hola,"
|
||||
#~ msgid "Hello,"
|
||||
#~ msgstr "Hola,"
|
||||
|
||||
#. js-lingui-id: eE1nG1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr "Si no iniciaste este cambio, contacta inmediatamente al propietario de tu espacio de trabajo."
|
||||
#~ msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
#~ msgstr "Si no iniciaste este cambio, contacta inmediatamente al propietario de tu espacio de trabajo."
|
||||
|
||||
#. js-lingui-id: Gz91L8
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr "Si deseas seguir usando Twenty, actualiza tu suscripción en los próximos {remainingDays} {dayOrDays}."
|
||||
#~ msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
#~ msgstr "Si deseas seguir usando Twenty, actualiza tu suscripción en los próximos {remainingDays} {dayOrDays}."
|
||||
|
||||
#. js-lingui-id: 0weyko
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr "Si deseas usar Twenty nuevamente, puedes crear un nuevo espacio de trabajo."
|
||||
#~ msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
#~ msgstr "Si deseas usar Twenty nuevamente, puedes crear un nuevo espacio de trabajo."
|
||||
|
||||
#. js-lingui-id: 7JuhZQ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr "Parece que tu espacio de trabajo <0>{workspaceDisplayName}</0> ha estado suspendido durante {daysSinceInactive} días."
|
||||
#~ msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
#~ msgstr "Parece que tu espacio de trabajo <0>{workspaceDisplayName}</0> ha estado suspendido durante {daysSinceInactive} días."
|
||||
|
||||
#. js-lingui-id: PviVyk
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr "Únete a tu equipo en Twenty"
|
||||
#~ msgid "Join your team on Twenty"
|
||||
#~ msgstr "Únete a tu equipo en Twenty"
|
||||
|
||||
#. js-lingui-id: ogtYkT
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "Contraseña actualizada"
|
||||
#~ msgid "Password updated"
|
||||
#~ msgstr "Contraseña actualizada"
|
||||
|
||||
#. js-lingui-id: Yucjaa
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Please validate this domain to allow users with"
|
||||
msgstr "Por favor, valide este dominio para permitir a los usuarios con"
|
||||
#~ msgid "Please validate this domain to allow users with"
|
||||
#~ msgstr "Por favor, valide este dominio para permitir a los usuarios con"
|
||||
|
||||
#. js-lingui-id: u3Ns4p
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
@@ -125,33 +330,33 @@ msgstr "Por favor, valide este dominio para permitir a los usuarios con"
|
||||
|
||||
#. js-lingui-id: OfhWJH
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr "Restablecer"
|
||||
#~ msgid "Reset"
|
||||
#~ msgstr "Restablecer"
|
||||
|
||||
#. js-lingui-id: RE5NiU
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr "Restablece tu contraseña 🗝"
|
||||
#~ msgid "Reset your password 🗝"
|
||||
#~ msgstr "Restablece tu contraseña 🗝"
|
||||
|
||||
#. js-lingui-id: UBadaJ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace "
|
||||
msgstr "Espacio de trabajo suspendido "
|
||||
#~ msgid "Suspended Workspace "
|
||||
#~ msgstr "Espacio de trabajo suspendido "
|
||||
|
||||
#. js-lingui-id: 7yDt8q
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr "¡Gracias por registrarte en Twenty! Antes de comenzar, solo necesitamos confirmar que eres tú. Haz clic arriba para verificar tu dirección de correo electrónico."
|
||||
#~ msgid "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."
|
||||
#~ msgstr "¡Gracias por registrarte en Twenty! Antes de comenzar, solo necesitamos confirmar que eres tú. Haz clic arriba para verificar tu dirección de correo electrónico."
|
||||
|
||||
#. js-lingui-id: igorB1
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr "El espacio de trabajo se desactivará en {remainingDays} {dayOrDays} y se eliminarán todos sus datos."
|
||||
#~ msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
#~ msgstr "El espacio de trabajo se desactivará en {remainingDays} {dayOrDays} y se eliminarán todos sus datos."
|
||||
|
||||
#. js-lingui-id: 7OEHy1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr "Esta es una confirmación de que la contraseña de tu cuenta ({email}) se cambió correctamente el {formattedDate}."
|
||||
#~ msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
#~ msgstr "Esta es una confirmación de que la contraseña de tu cuenta ({email}) se cambió correctamente el {formattedDate}."
|
||||
|
||||
#. js-lingui-id: wSOsS+
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -160,8 +365,8 @@ msgstr "Esta es una confirmación de que la contraseña de tu cuenta ({email}) s
|
||||
|
||||
#. js-lingui-id: R4gMjN
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr "Este enlace solo es válido por los próximos {duration}. Si el enlace no funciona, puedes usar directamente el enlace de verificación de inicio de sesión:"
|
||||
#~ msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
#~ msgstr "Este enlace solo es válido por los próximos {duration}. Si el enlace no funciona, puedes usar directamente el enlace de verificación de inicio de sesión:"
|
||||
|
||||
#. js-lingui-id: 2oA637
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
@@ -170,24 +375,24 @@ msgstr "Este enlace solo es válido por los próximos {duration}. Si el enlace n
|
||||
|
||||
#. js-lingui-id: H0v4yC
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr "Actualiza tu suscripción"
|
||||
#~ msgid "Update your subscription"
|
||||
#~ msgstr "Actualiza tu suscripción"
|
||||
|
||||
#. js-lingui-id: QbiUqd
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr "Validar dominio"
|
||||
#~ msgid "Validate domain"
|
||||
#~ msgstr "Validar dominio"
|
||||
|
||||
#. js-lingui-id: wCKkSr
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr "Verificar correo electrónico"
|
||||
#~ msgid "Verify Email"
|
||||
#~ msgstr "Verificar correo electrónico"
|
||||
|
||||
#. js-lingui-id: 9MqLGX
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr "Tu espacio de trabajo <0>{workspaceDisplayName}</0> ha sido eliminado porque tu suscripción caducó hace {daysSinceInactive} días."
|
||||
#~ msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
#~ msgstr "Tu espacio de trabajo <0>{workspaceDisplayName}</0> ha sido eliminado porque tu suscripción caducó hace {daysSinceInactive} días."
|
||||
|
||||
#. js-lingui-id: KFmFrQ
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
|
||||
@@ -18,30 +18,235 @@ msgstr ""
|
||||
"X-Crowdin-File: /packages/twenty-emails/src/locales/en.po\n"
|
||||
"X-Crowdin-File-ID: 27\n"
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>): Please validate this domain to allow users with <1>@{domain}</1> email addresses to join your workspace without requiring an invitation."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/test.email.tsx
|
||||
msgid "Test email"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>) has invited you to join a workspace called <1>{workspaceName}</1>."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Accept invite"
|
||||
msgstr "Hyväksy kutsu"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "What is Twenty?"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "It's a CRM, a software to help businesses manage their customer data and relationships efficiently."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Website"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's website"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Github"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's GitHub repository"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "User guide"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Read Twenty's user guide"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Developers"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's developer documentation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Twenty.com, Public Benefit Corporation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "San Francisco / Paris"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
#~ msgid "Accept invite"
|
||||
#~ msgstr "Hyväksy kutsu"
|
||||
|
||||
#. js-lingui-id: Yxj+Uc
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr "Kaikki tiedot tässä työtilassa on pysyvästi poistettu."
|
||||
#~ msgid "All data in this workspace has been permanently deleted."
|
||||
#~ msgstr "Kaikki tiedot tässä työtilassa on pysyvästi poistettu."
|
||||
|
||||
#. js-lingui-id: RPHFhC
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr "Vahvista sähköpostiosoitteesi"
|
||||
#~ msgid "Confirm your email address"
|
||||
#~ msgstr "Vahvista sähköpostiosoitteesi"
|
||||
|
||||
#. js-lingui-id: nvkBPN
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr "Yhdistä Twenty"
|
||||
#~ msgid "Connect to Twenty"
|
||||
#~ msgstr "Yhdistä Twenty"
|
||||
|
||||
#. js-lingui-id: jPQSEz
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr "Luo uusi työtila"
|
||||
#~ msgid "Create a new workspace"
|
||||
#~ msgstr "Luo uusi työtila"
|
||||
|
||||
#. js-lingui-id: JRzgV7
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -50,73 +255,73 @@ msgstr "Luo uusi työtila"
|
||||
|
||||
#. js-lingui-id: Lm5BBI
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Dear {userName}"
|
||||
msgstr "Hyvä {userName}"
|
||||
#~ msgid "Dear {userName}"
|
||||
#~ msgstr "Hyvä {userName}"
|
||||
|
||||
#. js-lingui-id: lIdkf2
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr "Hyvä {userName},"
|
||||
#~ msgid "Dear {userName},"
|
||||
#~ msgstr "Hyvä {userName},"
|
||||
|
||||
#. js-lingui-id: NTwcnq
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr "Poistettu työtila"
|
||||
#~ msgid "Deleted Workspace"
|
||||
#~ msgstr "Poistettu työtila"
|
||||
|
||||
#. js-lingui-id: S3uuQj
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "email addresses to join your workspace without requiring an invitation."
|
||||
msgstr "sähköpostiosoitteet liittymään työtilaasi ilman kutsua."
|
||||
#~ msgid "email addresses to join your workspace without requiring an invitation."
|
||||
#~ msgstr "sähköpostiosoitteet liittymään työtilaasi ilman kutsua."
|
||||
|
||||
#. js-lingui-id: tGme7M
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "has invited you to join a workspace called "
|
||||
msgstr "on kutsunut sinut liittymään työtilaan nimeltä "
|
||||
#~ msgid "has invited you to join a workspace called "
|
||||
#~ msgstr "on kutsunut sinut liittymään työtilaan nimeltä "
|
||||
|
||||
#. js-lingui-id: uzTaYi
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Hello"
|
||||
msgstr "Hei"
|
||||
#~ msgid "Hello"
|
||||
#~ msgstr "Hei"
|
||||
|
||||
#. js-lingui-id: Xa0d85
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr "Hei,"
|
||||
#~ msgid "Hello,"
|
||||
#~ msgstr "Hei,"
|
||||
|
||||
#. js-lingui-id: eE1nG1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr "Jos et itse aloittanut tätä muutosta, ota heti yhteyttä työtilasi omistajaan."
|
||||
#~ msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
#~ msgstr "Jos et itse aloittanut tätä muutosta, ota heti yhteyttä työtilasi omistajaan."
|
||||
|
||||
#. js-lingui-id: Gz91L8
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr "Jos haluat jatkaa Twenty:n käyttöä, päivitä tilauksesi seuraavan {remainingDays} {dayOrDays} kuluessa."
|
||||
#~ msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
#~ msgstr "Jos haluat jatkaa Twenty:n käyttöä, päivitä tilauksesi seuraavan {remainingDays} {dayOrDays} kuluessa."
|
||||
|
||||
#. js-lingui-id: 0weyko
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr "Jos haluat käyttää Twentyä uudelleen, voit luoda uuden työtilan."
|
||||
#~ msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
#~ msgstr "Jos haluat käyttää Twentyä uudelleen, voit luoda uuden työtilan."
|
||||
|
||||
#. js-lingui-id: 7JuhZQ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr "Vaikuttaa siltä, että työtilasi <0>{workspaceDisplayName}</0> on ollut jäädytettynä {daysSinceInactive} päivää."
|
||||
#~ msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
#~ msgstr "Vaikuttaa siltä, että työtilasi <0>{workspaceDisplayName}</0> on ollut jäädytettynä {daysSinceInactive} päivää."
|
||||
|
||||
#. js-lingui-id: PviVyk
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr "Liity tiimiisi Twentyssä"
|
||||
#~ msgid "Join your team on Twenty"
|
||||
#~ msgstr "Liity tiimiisi Twentyssä"
|
||||
|
||||
#. js-lingui-id: ogtYkT
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "Salasana päivitetty"
|
||||
#~ msgid "Password updated"
|
||||
#~ msgstr "Salasana päivitetty"
|
||||
|
||||
#. js-lingui-id: Yucjaa
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Please validate this domain to allow users with"
|
||||
msgstr "Vahvista tämä verkkotunnus, jotta tämä sallitaan käyttäjille, joilla on"
|
||||
#~ msgid "Please validate this domain to allow users with"
|
||||
#~ msgstr "Vahvista tämä verkkotunnus, jotta tämä sallitaan käyttäjille, joilla on"
|
||||
|
||||
#. js-lingui-id: u3Ns4p
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
@@ -125,33 +330,33 @@ msgstr "Vahvista tämä verkkotunnus, jotta tämä sallitaan käyttäjille, joil
|
||||
|
||||
#. js-lingui-id: OfhWJH
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr "Nollaa"
|
||||
#~ msgid "Reset"
|
||||
#~ msgstr "Nollaa"
|
||||
|
||||
#. js-lingui-id: RE5NiU
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr "Nollaa salasanasi 🗝"
|
||||
#~ msgid "Reset your password 🗝"
|
||||
#~ msgstr "Nollaa salasanasi 🗝"
|
||||
|
||||
#. js-lingui-id: UBadaJ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace "
|
||||
msgstr "Keskeytetty työtila "
|
||||
#~ msgid "Suspended Workspace "
|
||||
#~ msgstr "Keskeytetty työtila "
|
||||
|
||||
#. js-lingui-id: 7yDt8q
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr "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."
|
||||
#~ msgid "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."
|
||||
#~ msgstr "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."
|
||||
|
||||
#. js-lingui-id: igorB1
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr "Työtila poistetaan käytöstä {remainingDays} {dayOrDays} kuluttua, ja kaikki sen tiedot poistetaan."
|
||||
#~ msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
#~ msgstr "Työtila poistetaan käytöstä {remainingDays} {dayOrDays} kuluttua, ja kaikki sen tiedot poistetaan."
|
||||
|
||||
#. js-lingui-id: 7OEHy1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr "Tämä on vahvistus siitä, että tilisi ({email}) salasana on vaihdettu onnistuneesti {formattedDate}."
|
||||
#~ msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
#~ msgstr "Tämä on vahvistus siitä, että tilisi ({email}) salasana on vaihdettu onnistuneesti {formattedDate}."
|
||||
|
||||
#. js-lingui-id: wSOsS+
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -160,8 +365,8 @@ msgstr "Tämä on vahvistus siitä, että tilisi ({email}) salasana on vaihdettu
|
||||
|
||||
#. js-lingui-id: R4gMjN
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr "Tämä linkki on voimassa vain seuraavat {duration}. Jos linkki ei toimi, voit käyttää suoraan kirjautumisen varmennuslinkkiä:"
|
||||
#~ msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
#~ msgstr "Tämä linkki on voimassa vain seuraavat {duration}. Jos linkki ei toimi, voit käyttää suoraan kirjautumisen varmennuslinkkiä:"
|
||||
|
||||
#. js-lingui-id: 2oA637
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
@@ -170,24 +375,24 @@ msgstr "Tämä linkki on voimassa vain seuraavat {duration}. Jos linkki ei toimi
|
||||
|
||||
#. js-lingui-id: H0v4yC
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr "Päivitä tilauksesi"
|
||||
#~ msgid "Update your subscription"
|
||||
#~ msgstr "Päivitä tilauksesi"
|
||||
|
||||
#. js-lingui-id: QbiUqd
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr "Vahvista verkkotunnus"
|
||||
#~ msgid "Validate domain"
|
||||
#~ msgstr "Vahvista verkkotunnus"
|
||||
|
||||
#. js-lingui-id: wCKkSr
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr "Vahvista sähköposti"
|
||||
#~ msgid "Verify Email"
|
||||
#~ msgstr "Vahvista sähköposti"
|
||||
|
||||
#. js-lingui-id: 9MqLGX
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr "Työtilasi <0>{workspaceDisplayName}</0> on poistettu, koska tilauksesi vanheni {daysSinceInactive} päivää sitten."
|
||||
#~ msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
#~ msgstr "Työtilasi <0>{workspaceDisplayName}</0> on poistettu, koska tilauksesi vanheni {daysSinceInactive} päivää sitten."
|
||||
|
||||
#. js-lingui-id: KFmFrQ
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
|
||||
@@ -18,30 +18,235 @@ msgstr ""
|
||||
"X-Crowdin-File: /packages/twenty-emails/src/locales/en.po\n"
|
||||
"X-Crowdin-File-ID: 27\n"
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>): Please validate this domain to allow users with <1>@{domain}</1> email addresses to join your workspace without requiring an invitation."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/test.email.tsx
|
||||
msgid "Test email"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "{senderName} (<0>{senderEmail}</0>) has invited you to join a workspace called <1>{workspaceName}</1>."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Accept invite"
|
||||
msgstr "Accepter l'invitation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "What is Twenty?"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/WhatIsTwenty.tsx
|
||||
msgid "It's a CRM, a software to help businesses manage their customer data and relationships efficiently."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Website"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's website"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Github"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's GitHub repository"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "User guide"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Read Twenty's user guide"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Developers"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Visit Twenty's developer documentation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "Twenty.com, Public Benefit Corporation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-explicit-id
|
||||
#: src/components/Footer.tsx
|
||||
msgid "San Francisco / Paris"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 4WPI3S
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
#~ msgid "Accept invite"
|
||||
#~ msgstr "Accepter l'invitation"
|
||||
|
||||
#. js-lingui-id: Yxj+Uc
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "All data in this workspace has been permanently deleted."
|
||||
msgstr "Toutes les données de cet espace de travail ont été supprimées définitivement."
|
||||
#~ msgid "All data in this workspace has been permanently deleted."
|
||||
#~ msgstr "Toutes les données de cet espace de travail ont été supprimées définitivement."
|
||||
|
||||
#. js-lingui-id: RPHFhC
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Confirm your email address"
|
||||
msgstr "Confirmez votre adresse e-mail"
|
||||
#~ msgid "Confirm your email address"
|
||||
#~ msgstr "Confirmez votre adresse e-mail"
|
||||
|
||||
#. js-lingui-id: nvkBPN
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Connect to Twenty"
|
||||
msgstr "Connectez-vous à Twenty"
|
||||
#~ msgid "Connect to Twenty"
|
||||
#~ msgstr "Connectez-vous à Twenty"
|
||||
|
||||
#. js-lingui-id: jPQSEz
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Create a new workspace"
|
||||
msgstr "Créez un nouvel espace de travail"
|
||||
#~ msgid "Create a new workspace"
|
||||
#~ msgstr "Créez un nouvel espace de travail"
|
||||
|
||||
#. js-lingui-id: JRzgV7
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -50,73 +255,73 @@ msgstr "Créez un nouvel espace de travail"
|
||||
|
||||
#. js-lingui-id: Lm5BBI
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Dear {userName}"
|
||||
msgstr "Cher {userName}"
|
||||
#~ msgid "Dear {userName}"
|
||||
#~ msgstr "Cher {userName}"
|
||||
|
||||
#. js-lingui-id: lIdkf2
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Dear {userName},"
|
||||
msgstr "Cher {userName},"
|
||||
#~ msgid "Dear {userName},"
|
||||
#~ msgstr "Cher {userName},"
|
||||
|
||||
#. js-lingui-id: NTwcnq
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Deleted Workspace"
|
||||
msgstr "Espace de travail supprimé"
|
||||
#~ msgid "Deleted Workspace"
|
||||
#~ msgstr "Espace de travail supprimé"
|
||||
|
||||
#. js-lingui-id: S3uuQj
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "email addresses to join your workspace without requiring an invitation."
|
||||
msgstr "adresses e-mail pour rejoindre votre espace de travail sans nécessiter d'invitation."
|
||||
#~ msgid "email addresses to join your workspace without requiring an invitation."
|
||||
#~ msgstr "adresses e-mail pour rejoindre votre espace de travail sans nécessiter d'invitation."
|
||||
|
||||
#. js-lingui-id: tGme7M
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "has invited you to join a workspace called "
|
||||
msgstr "vous a invité à rejoindre un espace de travail appelé "
|
||||
#~ msgid "has invited you to join a workspace called "
|
||||
#~ msgstr "vous a invité à rejoindre un espace de travail appelé "
|
||||
|
||||
#. js-lingui-id: uzTaYi
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Hello"
|
||||
msgstr "Bonjour"
|
||||
#~ msgid "Hello"
|
||||
#~ msgstr "Bonjour"
|
||||
|
||||
#. js-lingui-id: Xa0d85
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Hello,"
|
||||
msgstr "Bonjour,"
|
||||
#~ msgid "Hello,"
|
||||
#~ msgstr "Bonjour,"
|
||||
|
||||
#. js-lingui-id: eE1nG1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
msgstr "Si vous n'avez pas initié ce changement, veuillez contacter immédiatement le propriétaire de votre espace de travail."
|
||||
#~ msgid "If you did not initiate this change, please contact your workspace owner immediately."
|
||||
#~ msgstr "Si vous n'avez pas initié ce changement, veuillez contacter immédiatement le propriétaire de votre espace de travail."
|
||||
|
||||
#. js-lingui-id: Gz91L8
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
msgstr "Pour continuer à utiliser Twenty, veuillez mettre à jour votre abonnement dans les {remainingDays} {dayOrDays}."
|
||||
#~ msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}."
|
||||
#~ msgstr "Pour continuer à utiliser Twenty, veuillez mettre à jour votre abonnement dans les {remainingDays} {dayOrDays}."
|
||||
|
||||
#. js-lingui-id: 0weyko
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
msgstr "Pour réutiliser Twenty, vous pouvez créer un nouvel espace de travail."
|
||||
#~ msgid "If you wish to use Twenty again, you can create a new workspace."
|
||||
#~ msgstr "Pour réutiliser Twenty, vous pouvez créer un nouvel espace de travail."
|
||||
|
||||
#. js-lingui-id: 7JuhZQ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
msgstr "Il semble que votre espace de travail <0>{workspaceDisplayName}</0> soit suspendu depuis {daysSinceInactive} jours."
|
||||
#~ msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days."
|
||||
#~ msgstr "Il semble que votre espace de travail <0>{workspaceDisplayName}</0> soit suspendu depuis {daysSinceInactive} jours."
|
||||
|
||||
#. js-lingui-id: PviVyk
|
||||
#: src/emails/send-invite-link.email.tsx
|
||||
msgid "Join your team on Twenty"
|
||||
msgstr "Rejoignez votre équipe sur Twenty"
|
||||
#~ msgid "Join your team on Twenty"
|
||||
#~ msgstr "Rejoignez votre équipe sur Twenty"
|
||||
|
||||
#. js-lingui-id: ogtYkT
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "Password updated"
|
||||
msgstr "Mot de passe mis à jour"
|
||||
#~ msgid "Password updated"
|
||||
#~ msgstr "Mot de passe mis à jour"
|
||||
|
||||
#. js-lingui-id: Yucjaa
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Please validate this domain to allow users with"
|
||||
msgstr "Veuillez valider ce domaine pour permettre aux utilisateurs avec"
|
||||
#~ msgid "Please validate this domain to allow users with"
|
||||
#~ msgstr "Veuillez valider ce domaine pour permettre aux utilisateurs avec"
|
||||
|
||||
#. js-lingui-id: u3Ns4p
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
@@ -125,33 +330,33 @@ msgstr "Veuillez valider ce domaine pour permettre aux utilisateurs avec"
|
||||
|
||||
#. js-lingui-id: OfhWJH
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset"
|
||||
msgstr "Réinitialiser"
|
||||
#~ msgid "Reset"
|
||||
#~ msgstr "Réinitialiser"
|
||||
|
||||
#. js-lingui-id: RE5NiU
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "Reset your password 🗝"
|
||||
msgstr "Réinitialisez votre mot de passe 🗝"
|
||||
#~ msgid "Reset your password 🗝"
|
||||
#~ msgstr "Réinitialisez votre mot de passe 🗝"
|
||||
|
||||
#. js-lingui-id: UBadaJ
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Suspended Workspace "
|
||||
msgstr "Espace de travail suspendu "
|
||||
#~ msgid "Suspended Workspace "
|
||||
#~ msgstr "Espace de travail suspendu "
|
||||
|
||||
#. js-lingui-id: 7yDt8q
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "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."
|
||||
msgstr "Merci de vous être inscrit sur Twenty ! Avant de commencer, nous devons confirmer votre identité. Cliquez ci-dessus pour vérifier votre adresse e-mail."
|
||||
#~ msgid "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."
|
||||
#~ msgstr "Merci de vous être inscrit sur Twenty ! Avant de commencer, nous devons confirmer votre identité. Cliquez ci-dessus pour vérifier votre adresse e-mail."
|
||||
|
||||
#. js-lingui-id: igorB1
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
msgstr "L'espace de travail sera désactivé dans {remainingDays} {dayOrDays} et toutes ses données seront supprimées."
|
||||
#~ msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted."
|
||||
#~ msgstr "L'espace de travail sera désactivé dans {remainingDays} {dayOrDays} et toutes ses données seront supprimées."
|
||||
|
||||
#. js-lingui-id: 7OEHy1
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
msgstr "Ceci est une confirmation que le mot de passe de votre compte ({email}) a été modifié avec succès le {formattedDate}."
|
||||
#~ msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}."
|
||||
#~ msgstr "Ceci est une confirmation que le mot de passe de votre compte ({email}) a été modifié avec succès le {formattedDate}."
|
||||
|
||||
#. js-lingui-id: wSOsS+
|
||||
#: src/emails/password-update-notify.email.tsx
|
||||
@@ -160,8 +365,8 @@ msgstr "Ceci est une confirmation que le mot de passe de votre compte ({email})
|
||||
|
||||
#. js-lingui-id: R4gMjN
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
msgstr "Ce lien n'est valable que pour les {duration} suivants. Si le lien ne fonctionne pas, vous pouvez utiliser directement le lien de vérification de connexion :"
|
||||
#~ msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:"
|
||||
#~ msgstr "Ce lien n'est valable que pour les {duration} suivants. Si le lien ne fonctionne pas, vous pouvez utiliser directement le lien de vérification de connexion :"
|
||||
|
||||
#. js-lingui-id: 2oA637
|
||||
#: src/emails/password-reset-link.email.tsx
|
||||
@@ -170,24 +375,24 @@ msgstr "Ce lien n'est valable que pour les {duration} suivants. Si le lien ne fo
|
||||
|
||||
#. js-lingui-id: H0v4yC
|
||||
#: src/emails/warn-suspended-workspace.email.tsx
|
||||
msgid "Update your subscription"
|
||||
msgstr "Mettez à jour votre abonnement"
|
||||
#~ msgid "Update your subscription"
|
||||
#~ msgstr "Mettez à jour votre abonnement"
|
||||
|
||||
#. js-lingui-id: QbiUqd
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
#: src/emails/validate-approved-access-domain.email.tsx
|
||||
msgid "Validate domain"
|
||||
msgstr "Valider le domaine"
|
||||
#~ msgid "Validate domain"
|
||||
#~ msgstr "Valider le domaine"
|
||||
|
||||
#. js-lingui-id: wCKkSr
|
||||
#: src/emails/send-email-verification-link.email.tsx
|
||||
msgid "Verify Email"
|
||||
msgstr "Vérifiez l'e-mail"
|
||||
#~ msgid "Verify Email"
|
||||
#~ msgstr "Vérifiez l'e-mail"
|
||||
|
||||
#. js-lingui-id: 9MqLGX
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
msgstr "Votre espace de travail <0>{workspaceDisplayName}</0> a été supprimé car votre abonnement a expiré il y a {daysSinceInactive} jours."
|
||||
#~ msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {daysSinceInactive} days ago."
|
||||
#~ msgstr "Votre espace de travail <0>{workspaceDisplayName}</0> a été supprimé car votre abonnement a expiré il y a {daysSinceInactive} jours."
|
||||
|
||||
#. js-lingui-id: KFmFrQ
|
||||
#: src/emails/clean-suspended-workspace.email.tsx
|
||||
|
||||
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user