web: project monolith, localization extracted

This commit is contained in:
Ken Sternberg 2023-12-22 09:21:57 -08:00
parent ac6b8e9d80
commit 57cbcf6899
38 changed files with 17282 additions and 135 deletions

View File

@ -1,6 +1,7 @@
module.exports = { module.exports = {
pipeline: { pipeline: {
build: ["^build"], "build": ["^build"],
lint: ["^lint"], "lint": ["^lint"],
"localize": ["^localization:extract"],
}, },
}; };

73
web/package-lock.json generated
View File

@ -9,7 +9,8 @@
"version": "0.0.0", "version": "0.0.0",
"license": "MIT", "license": "MIT",
"workspaces": [ "workspaces": [
"packages/monolith" "packages/monolith",
"packages/localization"
], ],
"dependencies": { "dependencies": {
"@manypkg/cli": "^0.21.1", "@manypkg/cli": "^0.21.1",
@ -2148,12 +2149,10 @@
"cpu": [ "cpu": [
"ppc64" "ppc64"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"aix" "aix"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -2671,6 +2670,10 @@
"node_modules/@goauthentik/api": { "node_modules/@goauthentik/api": {
"version": "2023.10.5-1703167718" "version": "2023.10.5-1703167718"
}, },
"node_modules/@goauthentik/localization": {
"resolved": "packages/localization",
"link": true
},
"node_modules/@goauthentik/monolith": { "node_modules/@goauthentik/monolith": {
"resolved": "packages/monolith", "resolved": "packages/monolith",
"link": true "link": true
@ -9830,10 +9833,9 @@
}, },
"node_modules/esbuild": { "node_modules/esbuild": {
"version": "0.19.10", "version": "0.19.10",
"dev": true, "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.10.tgz",
"integrity": "sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==",
"hasInstallScript": true, "hasInstallScript": true,
"license": "MIT",
"peer": true,
"bin": { "bin": {
"esbuild": "bin/esbuild" "esbuild": "bin/esbuild"
}, },
@ -9889,12 +9891,10 @@
"cpu": [ "cpu": [
"arm" "arm"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"android" "android"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -9906,12 +9906,10 @@
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"android" "android"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -9923,12 +9921,10 @@
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"android" "android"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -9940,12 +9936,10 @@
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"darwin" "darwin"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -9957,12 +9951,10 @@
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"freebsd" "freebsd"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -9974,12 +9966,10 @@
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"freebsd" "freebsd"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -9991,12 +9981,10 @@
"cpu": [ "cpu": [
"arm" "arm"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"linux" "linux"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -10008,12 +9996,10 @@
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"linux" "linux"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -10025,12 +10011,10 @@
"cpu": [ "cpu": [
"loong64" "loong64"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"linux" "linux"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -10042,12 +10026,10 @@
"cpu": [ "cpu": [
"mips64el" "mips64el"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"linux" "linux"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -10059,12 +10041,10 @@
"cpu": [ "cpu": [
"ppc64" "ppc64"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"linux" "linux"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -10076,12 +10056,10 @@
"cpu": [ "cpu": [
"riscv64" "riscv64"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"linux" "linux"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -10093,12 +10071,10 @@
"cpu": [ "cpu": [
"s390x" "s390x"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"linux" "linux"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -10110,12 +10086,10 @@
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"linux" "linux"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -10127,12 +10101,10 @@
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"netbsd" "netbsd"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -10144,12 +10116,10 @@
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"openbsd" "openbsd"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -10161,12 +10131,10 @@
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"sunos" "sunos"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -10178,12 +10146,10 @@
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"win32" "win32"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -10195,12 +10161,10 @@
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"win32" "win32"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -10212,12 +10176,10 @@
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true,
"optional": true, "optional": true,
"os": [ "os": [
"win32" "win32"
], ],
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
@ -17332,8 +17294,9 @@
}, },
"node_modules/typescript": { "node_modules/typescript": {
"version": "5.3.3", "version": "5.3.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
"integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
"dev": true, "dev": true,
"license": "Apache-2.0",
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",
"tsserver": "bin/tsserver" "tsserver": "bin/tsserver"
@ -18144,6 +18107,20 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"packages/localization": {
"name": "@goauthentik/localization",
"version": "0.0.0",
"license": "MIT",
"dependencies": {
"esbuild": "^0.19.10"
},
"devDependencies": {
"@lit/localize-tools": "^0.7.1",
"prettier": "^3.1.1",
"pseudolocale": "^2.0.0",
"typescript": "^5.3.3"
}
},
"packages/monolith": { "packages/monolith": {
"name": "@goauthentik/monolith", "name": "@goauthentik/monolith",
"version": "0.0.0", "version": "0.0.0",
@ -18194,7 +18171,6 @@
"@hcaptcha/types": "^1.0.3", "@hcaptcha/types": "^1.0.3",
"@jackfranklin/rollup-plugin-markdown": "^0.4.0", "@jackfranklin/rollup-plugin-markdown": "^0.4.0",
"@jeysal/storybook-addon-css-user-preferences": "^0.2.0", "@jeysal/storybook-addon-css-user-preferences": "^0.2.0",
"@lit/localize-tools": "^0.7.1",
"@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-commonjs": "^25.0.7",
"@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-node-resolve": "^15.2.3",
@ -18226,7 +18202,6 @@
"lit-analyzer": "^2.0.2", "lit-analyzer": "^2.0.2",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"prettier": "^3.1.1", "prettier": "^3.1.1",
"pseudolocale": "^2.0.0",
"pyright": "=1.1.338", "pyright": "=1.1.338",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",

View File

@ -5,7 +5,8 @@
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
"build": "lage build", "build": "lage build",
"lint": "lage lint" "lint": "lage lint",
"localize": "lage localize"
}, },
"optionalDependencies": { "optionalDependencies": {
"@esbuild/darwin-arm64": "^0.19.10", "@esbuild/darwin-arm64": "^0.19.10",
@ -17,7 +18,8 @@
"lage": "^2.7.9" "lage": "^2.7.9"
}, },
"workspaces": [ "workspaces": [
"packages/monolith" "packages/monolith",
"packages/localization"
], ],
"engines": { "engines": {
"node": ">=20" "node": ">=20"

1
web/packages/localization/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
scripts/pseudolocalize.js*

View File

@ -13,7 +13,7 @@
"zh-Hant", "zh-Hant",
"de" "de"
], ],
"tsConfig": "./tsconfig.json", "inputFiles": ["../monolith/src/**/*.ts"],
"output": { "output": {
"mode": "runtime", "mode": "runtime",
"outputDir": "./src/locales", "outputDir": "./src/locales",

View File

@ -0,0 +1,34 @@
{
"name": "@goauthentik/localization",
"version": "0.0.0",
"private": true,
"license": "MIT",
"type": "module",
"main": "./src/locale-codes.js",
"scripts": {
"localization:extract": "lit-localize extract",
"extract": "run-s localization-extract",
"build:localize": "lit-localize build",
"build": "run-s build:localize compile",
"compile": "esbuild src/locale-codes.ts --outfile=src/locale-codes.js",
"prettier": "prettier --write ./src/**/* ./package.json ./lit-localize.json",
"pseudolocalize:build-extract-script": "cd scripts && tsc --esModuleInterop --module es2020 --moduleResolution 'node' pseudolocalize.ts && mv pseudolocalize.js pseudolocalize.mjs",
"pseudolocalize:extract": "node scripts/pseudolocalize.mjs",
"pseudolocalize": "run-s pseudolocalize:build-extract-script pseudolocalize:extract"
},
"exports": {
".": "./src/locale-codes.js",
"./*": "./src/locales/*"
},
"files": [
"./src/"
],
"devDependencies": {
"@lit/localize-tools": "^0.7.1",
"npm-run-all": "^4.1.5",
"prettier": "^3.1.1",
"pseudolocale": "^2.0.0",
"typescript": "^5.3.3",
"esbuild": "^0.19.10"
}
}

View File

@ -0,0 +1,27 @@
"use strict";
export const sourceLocale = `en`;
export const targetLocales = [
`de`,
`en`,
`es`,
`fr`,
`pl`,
`pseudo-LOCALE`,
`tr`,
`zh_TW`,
`zh-Hans`,
`zh-Hant`
];
export const allLocales = [
`de`,
`en`,
`en`,
`es`,
`fr`,
`pl`,
`pseudo-LOCALE`,
`tr`,
`zh_TW`,
`zh-Hans`,
`zh-Hant`
];

View File

@ -0,0 +1 @@
{"version":3,"file":"locale-codes.js","sourceRoot":"","sources":["locale-codes.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,iDAAiD;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AAEjC;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,eAAe;IACf,IAAI;IACJ,OAAO;IACP,SAAS;IACT,SAAS;CACD,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,eAAe;IACf,IAAI;IACJ,OAAO;IACP,SAAS;IACT,SAAS;CACD,CAAC"}

View File

@ -0,0 +1,41 @@
// Do not modify this file by hand!
// Re-generate this file by running lit-localize.
/**
* The locale code that templates in this source code are written in.
*/
export const sourceLocale = `en`;
/**
* The other locale codes that this application is localized into. Sorted
* lexicographically.
*/
export const targetLocales = [
`de`,
`en`,
`es`,
`fr`,
`pl`,
`pseudo-LOCALE`,
`tr`,
`zh_TW`,
`zh-Hans`,
`zh-Hant`,
] as const;
/**
* All valid project locale codes. Sorted lexicographically.
*/
export const allLocales = [
`de`,
`en`,
`en`,
`es`,
`fr`,
`pl`,
`pseudo-LOCALE`,
`tr`,
`zh_TW`,
`zh-Hans`,
`zh-Hant`,
] as const;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,4 @@
{
"extends": "../../tsconfig.base.json",
"include": ["./src/**/*.ts"]
}

View File

@ -1363,9 +1363,9 @@
<target>Aktualisieren</target> <target>Aktualisieren</target>
</trans-unit> </trans-unit>
<trans-unit id="sc9175cb129fdc306"> <trans-unit id="sc9175cb129fdc306">
<source>Update <x id="0" equiv-text="${item.verboseName}"/></source> <source>Update <x id="0" equiv-text="${item.stageObj?.verboseName}"/></source>
<target>Aktualisiere <target>Aktualisiere
<x id="0" equiv-text="${item.verboseName}"/></target> <x id="0" equiv-text="${item.stageObj?.verboseName}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="s398f6ba74ba8943a"> <trans-unit id="s398f6ba74ba8943a">
<source>Select providers to add to application</source> <source>Select providers to add to application</source>
@ -2073,9 +2073,9 @@ doesn't pass when either or both of the selected options are equal or above the
<x id="0" equiv-text="${item.policyObj?.name}"/></target> <x id="0" equiv-text="${item.policyObj?.name}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="s2a64d2dca3da9b0e"> <trans-unit id="s2a64d2dca3da9b0e">
<source>Group <x id="0" equiv-text="${item.groupObj?.name}"/></source> <source>Group <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></source>
<target>Gruppe <target>Gruppe
<x id="0" equiv-text="${item.groupObj?.name}"/></target> <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="se5dc026819a32ff8"> <trans-unit id="se5dc026819a32ff8">
<source>User <x id="0" equiv-text="${item.userObj?.name}"/></source> <source>User <x id="0" equiv-text="${item.userObj?.name}"/></source>

View File

@ -1431,9 +1431,9 @@
<target>Update</target> <target>Update</target>
</trans-unit> </trans-unit>
<trans-unit id="sc9175cb129fdc306"> <trans-unit id="sc9175cb129fdc306">
<source>Update <x id="0" equiv-text="${item.verboseName}"/></source> <source>Update <x id="0" equiv-text="${item.stageObj?.verboseName}"/></source>
<target>Update <target>Update
<x id="0" equiv-text="${item.verboseName}"/></target> <x id="0" equiv-text="${item.stageObj?.verboseName}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="s398f6ba74ba8943a"> <trans-unit id="s398f6ba74ba8943a">
<source>Select providers to add to application</source> <source>Select providers to add to application</source>
@ -2181,9 +2181,9 @@ doesn't pass when either or both of the selected options are equal or above the
<x id="0" equiv-text="${item.policyObj?.name}"/></target> <x id="0" equiv-text="${item.policyObj?.name}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="s2a64d2dca3da9b0e"> <trans-unit id="s2a64d2dca3da9b0e">
<source>Group <x id="0" equiv-text="${item.groupObj?.name}"/></source> <source>Group <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></source>
<target>Group <target>Group
<x id="0" equiv-text="${item.groupObj?.name}"/></target> <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="se5dc026819a32ff8"> <trans-unit id="se5dc026819a32ff8">
<source>User <x id="0" equiv-text="${item.userObj?.name}"/></source> <source>User <x id="0" equiv-text="${item.userObj?.name}"/></source>

View File

@ -1337,9 +1337,9 @@
<target>Actualización</target> <target>Actualización</target>
</trans-unit> </trans-unit>
<trans-unit id="sc9175cb129fdc306"> <trans-unit id="sc9175cb129fdc306">
<source>Update <x id="0" equiv-text="${item.verboseName}"/></source> <source>Update <x id="0" equiv-text="${item.stageObj?.verboseName}"/></source>
<target>Actualización <target>Actualización
<x id="0" equiv-text="${item.verboseName}"/></target> <x id="0" equiv-text="${item.stageObj?.verboseName}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="s398f6ba74ba8943a"> <trans-unit id="s398f6ba74ba8943a">
<source>Select providers to add to application</source> <source>Select providers to add to application</source>
@ -2039,9 +2039,9 @@ doesn't pass when either or both of the selected options are equal or above the
<x id="0" equiv-text="${item.policyObj?.name}"/></target> <x id="0" equiv-text="${item.policyObj?.name}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="s2a64d2dca3da9b0e"> <trans-unit id="s2a64d2dca3da9b0e">
<source>Group <x id="0" equiv-text="${item.groupObj?.name}"/></source> <source>Group <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></source>
<target>Grupo <target>Grupo
<x id="0" equiv-text="${item.groupObj?.name}"/></target> <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="se5dc026819a32ff8"> <trans-unit id="se5dc026819a32ff8">
<source>User <x id="0" equiv-text="${item.userObj?.name}"/></source> <source>User <x id="0" equiv-text="${item.userObj?.name}"/></source>

View File

@ -1782,9 +1782,9 @@ Il y a <x id="0" equiv-text="${ago}"/> jour(s)</target>
</trans-unit> </trans-unit>
<trans-unit id="sc9175cb129fdc306"> <trans-unit id="sc9175cb129fdc306">
<source>Update <x id="0" equiv-text="${item.verboseName}"/></source> <source>Update <x id="0" equiv-text="${item.stageObj?.verboseName}"/></source>
<target>Mettre à jour <target>Mettre à jour
<x id="0" equiv-text="${item.verboseName}"/></target> <x id="0" equiv-text="${item.stageObj?.verboseName}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="s398f6ba74ba8943a"> <trans-unit id="s398f6ba74ba8943a">
@ -2719,9 +2719,9 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s2a64d2dca3da9b0e"> <trans-unit id="s2a64d2dca3da9b0e">
<source>Group <x id="0" equiv-text="${item.groupObj?.name}"/></source> <source>Group <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></source>
<target>Groupe <target>Groupe
<x id="0" equiv-text="${item.groupObj?.name}"/></target> <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="se5dc026819a32ff8"> <trans-unit id="se5dc026819a32ff8">

View File

@ -1783,8 +1783,8 @@
</trans-unit> </trans-unit>
<trans-unit id="sc9175cb129fdc306"> <trans-unit id="sc9175cb129fdc306">
<source>Update <x id="0" equiv-text="${item.verboseName}"/></source> <source>Update <x id="0" equiv-text="${item.stageObj?.verboseName}"/></source>
<target>Update <x id="0" equiv-text="${item.verboseName}"/></target> <target>Update <x id="0" equiv-text="${item.stageObj?.verboseName}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="s398f6ba74ba8943a"> <trans-unit id="s398f6ba74ba8943a">
@ -2960,8 +2960,8 @@ slaagt niet wanneer een of beide geselecteerde opties gelijk zijn aan of boven d
</trans-unit> </trans-unit>
<trans-unit id="s2a64d2dca3da9b0e"> <trans-unit id="s2a64d2dca3da9b0e">
<source>Group <x id="0" equiv-text="${item.groupObj?.name}"/></source> <source>Group <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></source>
<target>Groep <x id="0" equiv-text="${item.groupObj?.name}"/></target> <target>Groep <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="se5dc026819a32ff8"> <trans-unit id="se5dc026819a32ff8">
@ -7713,4 +7713,4 @@ Bindingen naar groepen/gebruikers worden gecontroleerd tegen de gebruiker van de
</trans-unit> </trans-unit>
</body> </body>
</file> </file>
</xliff> </xliff>

View File

@ -1377,9 +1377,9 @@
<target>Aktualizuj</target> <target>Aktualizuj</target>
</trans-unit> </trans-unit>
<trans-unit id="sc9175cb129fdc306"> <trans-unit id="sc9175cb129fdc306">
<source>Update <x id="0" equiv-text="${item.verboseName}"/></source> <source>Update <x id="0" equiv-text="${item.stageObj?.verboseName}"/></source>
<target>Zaktualizuj <target>Zaktualizuj
<x id="0" equiv-text="${item.verboseName}"/></target> <x id="0" equiv-text="${item.stageObj?.verboseName}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="s398f6ba74ba8943a"> <trans-unit id="s398f6ba74ba8943a">
<source>Select providers to add to application</source> <source>Select providers to add to application</source>
@ -2111,9 +2111,9 @@ doesn't pass when either or both of the selected options are equal or above the
<x id="0" equiv-text="${item.policyObj?.name}"/></target> <x id="0" equiv-text="${item.policyObj?.name}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="s2a64d2dca3da9b0e"> <trans-unit id="s2a64d2dca3da9b0e">
<source>Group <x id="0" equiv-text="${item.groupObj?.name}"/></source> <source>Group <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></source>
<target>Grupa <target>Grupa
<x id="0" equiv-text="${item.groupObj?.name}"/></target> <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="se5dc026819a32ff8"> <trans-unit id="se5dc026819a32ff8">
<source>User <x id="0" equiv-text="${item.userObj?.name}"/></source> <source>User <x id="0" equiv-text="${item.userObj?.name}"/></source>

View File

@ -1764,8 +1764,8 @@
</trans-unit> </trans-unit>
<trans-unit id="sc9175cb129fdc306"> <trans-unit id="sc9175cb129fdc306">
<source>Update <x id="0" equiv-text="${item.verboseName}"/></source> <source>Update <x id="0" equiv-text="${item.stageObj?.verboseName}"/></source>
<target>Ũƥďàţē <x id="0" equiv-text="${item.verboseName}"/></target> <target>Ũƥďàţē <x id="0" equiv-text="${item.stageObj?.verboseName}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="s398f6ba74ba8943a"> <trans-unit id="s398f6ba74ba8943a">
@ -2700,8 +2700,8 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s2a64d2dca3da9b0e"> <trans-unit id="s2a64d2dca3da9b0e">
<source>Group <x id="0" equiv-text="${item.groupObj?.name}"/></source> <source>Group <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></source>
<target>Ĝŕōũƥ <x id="0" equiv-text="${item.groupObj?.name}"/></target> <target>Ĝŕōũƥ <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="se5dc026819a32ff8"> <trans-unit id="se5dc026819a32ff8">

View File

@ -1336,9 +1336,9 @@
<target>Güncelleme</target> <target>Güncelleme</target>
</trans-unit> </trans-unit>
<trans-unit id="sc9175cb129fdc306"> <trans-unit id="sc9175cb129fdc306">
<source>Update <x id="0" equiv-text="${item.verboseName}"/></source> <source>Update <x id="0" equiv-text="${item.stageObj?.verboseName}"/></source>
<target>Güncelleme <target>Güncelleme
<x id="0" equiv-text="${item.verboseName}"/></target> <x id="0" equiv-text="${item.stageObj?.verboseName}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="s398f6ba74ba8943a"> <trans-unit id="s398f6ba74ba8943a">
<source>Select providers to add to application</source> <source>Select providers to add to application</source>
@ -2038,9 +2038,9 @@ doesn't pass when either or both of the selected options are equal or above the
<x id="0" equiv-text="${item.policyObj?.name}"/></target> <x id="0" equiv-text="${item.policyObj?.name}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="s2a64d2dca3da9b0e"> <trans-unit id="s2a64d2dca3da9b0e">
<source>Group <x id="0" equiv-text="${item.groupObj?.name}"/></source> <source>Group <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></source>
<target>Grup <target>Grup
<x id="0" equiv-text="${item.groupObj?.name}"/></target> <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="se5dc026819a32ff8"> <trans-unit id="se5dc026819a32ff8">
<source>User <x id="0" equiv-text="${item.userObj?.name}"/></source> <source>User <x id="0" equiv-text="${item.userObj?.name}"/></source>

View File

@ -1783,9 +1783,9 @@
</trans-unit> </trans-unit>
<trans-unit id="sc9175cb129fdc306"> <trans-unit id="sc9175cb129fdc306">
<source>Update <x id="0" equiv-text="${item.verboseName}"/></source> <source>Update <x id="0" equiv-text="${item.stageObj?.verboseName}"/></source>
<target>更新 <target>更新
<x id="0" equiv-text="${item.verboseName}"/></target> <x id="0" equiv-text="${item.stageObj?.verboseName}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="s398f6ba74ba8943a"> <trans-unit id="s398f6ba74ba8943a">
@ -2721,9 +2721,9 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s2a64d2dca3da9b0e"> <trans-unit id="s2a64d2dca3da9b0e">
<source>Group <x id="0" equiv-text="${item.groupObj?.name}"/></source> <source>Group <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></source>
<target>组 <target>组
<x id="0" equiv-text="${item.groupObj?.name}"/></target> <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="se5dc026819a32ff8"> <trans-unit id="se5dc026819a32ff8">

View File

@ -1349,9 +1349,9 @@
<target>更新</target> <target>更新</target>
</trans-unit> </trans-unit>
<trans-unit id="sc9175cb129fdc306"> <trans-unit id="sc9175cb129fdc306">
<source>Update <x id="0" equiv-text="${item.verboseName}"/></source> <source>Update <x id="0" equiv-text="${item.stageObj?.verboseName}"/></source>
<target>更新 <target>更新
<x id="0" equiv-text="${item.verboseName}"/></target> <x id="0" equiv-text="${item.stageObj?.verboseName}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="s398f6ba74ba8943a"> <trans-unit id="s398f6ba74ba8943a">
<source>Select providers to add to application</source> <source>Select providers to add to application</source>
@ -2058,9 +2058,9 @@ doesn't pass when either or both of the selected options are equal or above the
<x id="0" equiv-text="${item.policyObj?.name}"/></target> <x id="0" equiv-text="${item.policyObj?.name}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="s2a64d2dca3da9b0e"> <trans-unit id="s2a64d2dca3da9b0e">
<source>Group <x id="0" equiv-text="${item.groupObj?.name}"/></source> <source>Group <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></source>
<target>组 <target>组
<x id="0" equiv-text="${item.groupObj?.name}"/></target> <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="se5dc026819a32ff8"> <trans-unit id="se5dc026819a32ff8">
<source>User <x id="0" equiv-text="${item.userObj?.name}"/></source> <source>User <x id="0" equiv-text="${item.userObj?.name}"/></source>

View File

@ -1783,9 +1783,9 @@
</trans-unit> </trans-unit>
<trans-unit id="sc9175cb129fdc306"> <trans-unit id="sc9175cb129fdc306">
<source>Update <x id="0" equiv-text="${item.verboseName}"/></source> <source>Update <x id="0" equiv-text="${item.stageObj?.verboseName}"/></source>
<target>更新 <target>更新
<x id="0" equiv-text="${item.verboseName}"/></target> <x id="0" equiv-text="${item.stageObj?.verboseName}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="s398f6ba74ba8943a"> <trans-unit id="s398f6ba74ba8943a">
@ -2726,9 +2726,9 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s2a64d2dca3da9b0e"> <trans-unit id="s2a64d2dca3da9b0e">
<source>Group <x id="0" equiv-text="${item.groupObj?.name}"/></source> <source>Group <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></source>
<target>组 <target>组
<x id="0" equiv-text="${item.groupObj?.name}"/></target> <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="se5dc026819a32ff8"> <trans-unit id="se5dc026819a32ff8">
@ -8051,4 +8051,4 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>
</xliff> </xliff>

View File

@ -1765,8 +1765,8 @@
</trans-unit> </trans-unit>
<trans-unit id="sc9175cb129fdc306"> <trans-unit id="sc9175cb129fdc306">
<source>Update <x id="0" equiv-text="${item.verboseName}"/></source> <source>Update <x id="0" equiv-text="${item.stageObj?.verboseName}"/></source>
<target>更新 <x id="0" equiv-text="${item.verboseName}"/></target> <target>更新 <x id="0" equiv-text="${item.stageObj?.verboseName}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="s398f6ba74ba8943a"> <trans-unit id="s398f6ba74ba8943a">
@ -2700,8 +2700,8 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s2a64d2dca3da9b0e"> <trans-unit id="s2a64d2dca3da9b0e">
<source>Group <x id="0" equiv-text="${item.groupObj?.name}"/></source> <source>Group <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></source>
<target>群組 <x id="0" equiv-text="${item.groupObj?.name}"/></target> <target>群組 <x id="0" equiv-text="${this.group?.name || &quot;&quot;}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="se5dc026819a32ff8"> <trans-unit id="se5dc026819a32ff8">

View File

@ -4,29 +4,21 @@
"private": true, "private": true,
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
"extract-locales": "lit-localize extract",
"build-locales": "run-s build-locales:build",
"build-locales:build": "lit-localize build",
"build-locales:repair": "prettier --write ./src/locale-codes.ts",
"rollup:build": "cross-env NODE_OPTIONS='--max_old_space_size=4096' rollup -c ./rollup.config.mjs", "rollup:build": "cross-env NODE_OPTIONS='--max_old_space_size=4096' rollup -c ./rollup.config.mjs",
"rollup:build-proxy": "cross-env NODE_OPTIONS='--max_old_space_size=4096' rollup -c ./rollup.proxy.mjs", "rollup:build-proxy": "cross-env NODE_OPTIONS='--max_old_space_size=4096' rollup -c ./rollup.proxy.mjs",
"rollup:watch": "cross-env NODE_OPTIONS='--max_old_space_size=4096' rollup -c -w", "rollup:watch": "cross-env NODE_OPTIONS='--max_old_space_size=4096' rollup -c -w",
"build": "run-s build-locales rollup:build", "build": "run-s rollup:build",
"build-proxy": "run-s build-locales rollup:build-proxy", "build-proxy": "run-s rollup:build-proxy",
"watch": "run-s build-locales rollup:watch", "watch": "run-s rollup:watch",
"lint": "eslint . --max-warnings 0 --fix", "lint": "eslint . --max-warnings 0 --fix",
"lint:precommit": "eslint --max-warnings 0 --config ./.eslintrc.precommit.json $(git status --porcelain . | grep '^[M?][M?]' | cut -c8- | grep -E '\\.(ts|js|tsx|jsx)$') ", "lint:precommit": "eslint --max-warnings 0 --config ./.eslintrc.precommit.json $(git status --porcelain . | grep '^[M?][M?]' | cut -c8- | grep -E '\\.(ts|js|tsx|jsx)$') ",
"lint:spelling": "codespell -D - -D ../../../.github/codespell-dictionary.txt -I ../../../.github/codespell-words.txt -S './src/locales/**' ./src -s", "lint:spelling": "codespell -D - -D ../../../.github/codespell-dictionary.txt -I ../../../.github/codespell-words.txt ./src -s",
"lit-analyse": "lit-analyzer src", "lit-analyse": "lit-analyzer src",
"precommit": "run-s tsc lit-analyse lint:precommit lint:spelling prettier", "precommit": "run-s tsc lit-analyse lint:precommit lint:spelling prettier",
"prequick": "run-s tsc:execute lit-analyse lint:precommit lint:spelling", "prequick": "run-s tsc:execute lit-analyse lint:precommit lint:spelling",
"prettier-check": "prettier --check .", "prettier-check": "prettier --check .",
"prettier": "prettier --write .", "prettier": "prettier --write .",
"pseudolocalize:build-extract-script": "cd scripts && tsc --esModuleInterop --module es2020 --moduleResolution 'node' pseudolocalize.ts && mv pseudolocalize.js pseudolocalize.mjs", "tsc": "tsc --noEmit -p .",
"pseudolocalize:extract": "node scripts/pseudolocalize.mjs",
"pseudolocalize": "run-s pseudolocalize:build-extract-script pseudolocalize:extract",
"tsc:execute": "tsc --noEmit -p .",
"tsc": "run-s build-locales tsc:execute",
"storybook": "storybook dev -p 6006", "storybook": "storybook dev -p 6006",
"storybook:build": "cross-env NODE_OPTIONS='--max_old_space_size=4096' storybook build", "storybook:build": "cross-env NODE_OPTIONS='--max_old_space_size=4096' storybook build",
"storybook:build-import-map": "run-s storybook:build-import-map-script storybook:run-import-map-script", "storybook:build-import-map": "run-s storybook:build-import-map-script storybook:run-import-map-script",
@ -43,6 +35,7 @@
"@formatjs/intl-listformat": "^7.5.3", "@formatjs/intl-listformat": "^7.5.3",
"@fortawesome/fontawesome-free": "^6.5.1", "@fortawesome/fontawesome-free": "^6.5.1",
"@goauthentik/api": "^2023.10.5-1703167718", "@goauthentik/api": "^2023.10.5-1703167718",
"@goauthentik/localization": "*",
"@lit-labs/context": "^0.4.0", "@lit-labs/context": "^0.4.0",
"@lit-labs/task": "^3.1.0", "@lit-labs/task": "^3.1.0",
"@lit/localize": "^0.11.4", "@lit/localize": "^0.11.4",
@ -79,7 +72,6 @@
"@hcaptcha/types": "^1.0.3", "@hcaptcha/types": "^1.0.3",
"@jackfranklin/rollup-plugin-markdown": "^0.4.0", "@jackfranklin/rollup-plugin-markdown": "^0.4.0",
"@jeysal/storybook-addon-css-user-preferences": "^0.2.0", "@jeysal/storybook-addon-css-user-preferences": "^0.2.0",
"@lit/localize-tools": "^0.7.1",
"@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-commonjs": "^25.0.7",
"@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-node-resolve": "^15.2.3",
@ -111,7 +103,6 @@
"lit-analyzer": "^2.0.2", "lit-analyzer": "^2.0.2",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"prettier": "^3.1.1", "prettier": "^3.1.1",
"pseudolocale": "^2.0.0",
"pyright": "=1.1.338", "pyright": "=1.1.338",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",

View File

@ -1,4 +1,4 @@
import { sourceLocale, targetLocales } from "@goauthentik/app/locale-codes"; import { sourceLocale, targetLocales } from "@goauthentik/localization";
import { configureLocalization } from "@lit/localize"; import { configureLocalization } from "@lit/localize";

View File

@ -1,4 +1,4 @@
import * as _enLocale from "@goauthentik/locales/en"; import * as _enLocale from "@goauthentik/localization/en.js";
import type { LocaleModule } from "@lit/localize"; import type { LocaleModule } from "@lit/localize";
import { msg } from "@lit/localize"; import { msg } from "@lit/localize";
@ -37,20 +37,20 @@ export { enLocale };
// prettier-ignore // prettier-ignore
const debug: LocaleRow = [ const debug: LocaleRow = [
"pseudo-LOCALE", /^pseudo/i, () => msg("Pseudolocale (for testing)"), async () => await import("@goauthentik/locales/pseudo-LOCALE"), "pseudo-LOCALE", /^pseudo/i, () => msg("Pseudolocale (for testing)"), async () => await import("@goauthentik/localization/pseudo-LOCALE.js"),
]; ];
// prettier-ignore // prettier-ignore
const LOCALE_TABLE: LocaleRow[] = [ const LOCALE_TABLE: LocaleRow[] = [
["en", /^en([_-]|$)/i, () => msg("English"), async () => await import("@goauthentik/locales/en")], ["en", /^en([_-]|$)/i, () => msg("English"), async () => await import("@goauthentik/localization/en.js")],
["es", /^es([_-]|$)/i, () => msg("Spanish"), async () => await import("@goauthentik/locales/es")], ["es", /^es([_-]|$)/i, () => msg("Spanish"), async () => await import("@goauthentik/localization/es.js")],
["de", /^de([_-]|$)/i, () => msg("German"), async () => await import("@goauthentik/locales/de")], ["de", /^de([_-]|$)/i, () => msg("German"), async () => await import("@goauthentik/localization/de.js")],
["fr", /^fr([_-]|$)/i, () => msg("French"), async () => await import("@goauthentik/locales/fr")], ["fr", /^fr([_-]|$)/i, () => msg("French"), async () => await import("@goauthentik/localization/fr.js")],
["pl", /^pl([_-]|$)/i, () => msg("Polish"), async () => await import("@goauthentik/locales/pl")], ["pl", /^pl([_-]|$)/i, () => msg("Polish"), async () => await import("@goauthentik/localization/pl.js")],
["tr", /^tr([_-]|$)/i, () => msg("Turkish"), async () => await import("@goauthentik/locales/tr")], ["tr", /^tr([_-]|$)/i, () => msg("Turkish"), async () => await import("@goauthentik/localization/tr.js")],
["zh-Hant", /^zh[_-](HK|Hant)/i, () => msg("Chinese (traditional)"), async () => await import("@goauthentik/locales/zh-Hant")], ["zh-Hant", /^zh[_-](HK|Hant)/i, () => msg("Chinese (traditional)"), async () => await import("@goauthentik/localization/zh-Hant.js")],
["zh_TW", /^zh[_-]TW$/i, () => msg("Taiwanese Mandarin"), async () => await import("@goauthentik/locales/zh_TW")], ["zh_TW", /^zh[_-]TW$/i, () => msg("Taiwanese Mandarin"), async () => await import("@goauthentik/localization/zh_TW.js")],
["zh-Hans", /^zh(\b|_)/i, () => msg("Chinese (simplified)"), async () => await import("@goauthentik/locales/zh-Hans")], ["zh-Hans", /^zh(\b|_)/i, () => msg("Chinese (simplified)"), async () => await import("@goauthentik/localization/zh-Hans.js")],
debug debug
]; ];

View File

@ -14,7 +14,7 @@ const TOMBSTONE = "⛼⛼tombstone⛼⛼";
// application is first instantiated. // application is first instantiated.
export const LOCALES = RAW_LOCALES.map((locale) => export const LOCALES = RAW_LOCALES.map((locale) =>
locale.code === "en" ? { ...locale, locale: async () => enLocale } : locale, locale.code === "en" ? { ...locale, locale: async () => enLocale } : locale
); );
export function getBestMatchLocale(locale: string): AkLocale | undefined { export function getBestMatchLocale(locale: string): AkLocale | undefined {
@ -47,8 +47,8 @@ const isLocaleCandidate = (v: unknown): v is string =>
export function autoDetectLanguage(requestedCode?: string): string { export function autoDetectLanguage(requestedCode?: string): string {
const localeCandidates: string[] = [ const localeCandidates: string[] = [
globalAK()?.locale ?? TOMBSTONE,
localeCodeFromUrl("locale"), localeCodeFromUrl("locale"),
globalAK()?.locale ?? TOMBSTONE,
requestedCode ?? TOMBSTONE, requestedCode ?? TOMBSTONE,
window.navigator?.language ?? TOMBSTONE, window.navigator?.language ?? TOMBSTONE,
DEFAULT_LOCALE, DEFAULT_LOCALE,
@ -58,7 +58,7 @@ export function autoDetectLanguage(requestedCode?: string): string {
if (!firstSupportedLocale) { if (!firstSupportedLocale) {
console.debug( console.debug(
`authentik/locale: No locale found for '[${localeCandidates}.join(',')]', falling back to ${DEFAULT_LOCALE}`, `authentik/locale: No locale found for '[${localeCandidates}.join(',')]', falling back to ${DEFAULT_LOCALE}`
); );
return DEFAULT_LOCALE; return DEFAULT_LOCALE;
} }

View File

@ -9,7 +9,6 @@
"@goauthentik/docs/*": ["../../../website/docs/*"], "@goauthentik/docs/*": ["../../../website/docs/*"],
"@goauthentik/elements/*": ["./src/elements/*"], "@goauthentik/elements/*": ["./src/elements/*"],
"@goauthentik/flow/*": ["./src/flow/*"], "@goauthentik/flow/*": ["./src/flow/*"],
"@goauthentik/locales/*": ["./src/locales/*"],
"@goauthentik/polyfill/*": ["./src/polyfill/*"], "@goauthentik/polyfill/*": ["./src/polyfill/*"],
"@goauthentik/standalone/*": ["./src/standalone/*"], "@goauthentik/standalone/*": ["./src/standalone/*"],
"@goauthentik/user/*": ["./src/user/*"] "@goauthentik/user/*": ["./src/user/*"]