commit
d5766070c4
61 changed files with 639 additions and 2610 deletions
18
.github/workflows/alpha-release.yml
vendored
18
.github/workflows/alpha-release.yml
vendored
|
@ -15,7 +15,7 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Create Tag
|
||||
id: create_tag
|
||||
|
@ -32,13 +32,13 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v2
|
||||
|
@ -47,7 +47,7 @@ jobs:
|
|||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Build and push images
|
||||
uses: docker/build-push-action@v4
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
platforms: linux/amd64,linux/arm64
|
||||
|
@ -62,14 +62,14 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 18
|
||||
|
||||
- uses: pnpm/action-setup@v2.2.4
|
||||
- uses: pnpm/action-setup@v2.4.0
|
||||
name: Install pnpm
|
||||
id: pnpm-install
|
||||
with:
|
||||
|
@ -99,7 +99,7 @@ jobs:
|
|||
run: pnpm -r --filter cli package
|
||||
|
||||
- name: Upload CLI
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: cli
|
||||
path: packages/cli/dist
|
||||
|
@ -110,7 +110,7 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Download CLI
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: cli
|
||||
path: cli
|
||||
|
|
20
.github/workflows/beta-release.yml
vendored
20
.github/workflows/beta-release.yml
vendored
|
@ -14,7 +14,7 @@ jobs:
|
|||
tag: ${{ steps.get_tag.outputs.tag }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v3
|
||||
|
@ -32,13 +32,13 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v2
|
||||
|
@ -47,7 +47,7 @@ jobs:
|
|||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Build and push images
|
||||
uses: docker/build-push-action@v4
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
platforms: linux/amd64,linux/arm64
|
||||
|
@ -61,14 +61,14 @@ jobs:
|
|||
needs: get-tag
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 18
|
||||
|
||||
- uses: pnpm/action-setup@v2.2.4
|
||||
- uses: pnpm/action-setup@v2.4.0
|
||||
name: Install pnpm
|
||||
id: pnpm-install
|
||||
with:
|
||||
|
@ -98,7 +98,7 @@ jobs:
|
|||
run: pnpm -r --filter cli package
|
||||
|
||||
- name: Upload CLI
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: cli
|
||||
path: packages/cli/dist
|
||||
|
@ -111,7 +111,7 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Create Tag
|
||||
id: create_tag
|
||||
|
@ -129,7 +129,7 @@ jobs:
|
|||
id: ${{ steps.create_release.outputs.id }}
|
||||
steps:
|
||||
- name: Download CLI
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: cli
|
||||
path: cli
|
||||
|
|
8
.github/workflows/ci.yml
vendored
8
.github/workflows/ci.yml
vendored
|
@ -38,14 +38,14 @@ jobs:
|
|||
--health-retries 5
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 18
|
||||
|
||||
- uses: pnpm/action-setup@v2.2.4
|
||||
- uses: pnpm/action-setup@v2.4.0
|
||||
name: Install pnpm
|
||||
id: pnpm-install
|
||||
with:
|
||||
|
@ -101,14 +101,14 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 18
|
||||
|
||||
- uses: pnpm/action-setup@v2.2.4
|
||||
- uses: pnpm/action-setup@v2.4.0
|
||||
name: Install pnpm
|
||||
id: pnpm-install
|
||||
with:
|
||||
|
|
2
.github/workflows/dependency-review.yml
vendored
2
.github/workflows/dependency-review.yml
vendored
|
@ -15,6 +15,6 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: 'Checkout Repository'
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: 'Dependency Review'
|
||||
uses: actions/dependency-review-action@v3
|
||||
|
|
8
.github/workflows/e2e.yml
vendored
8
.github/workflows/e2e.yml
vendored
|
@ -29,7 +29,7 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install SSH key
|
||||
uses: shimataro/ssh-key-action@v2
|
||||
|
@ -110,9 +110,9 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
needs: [deploy]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: pnpm/action-setup@v2.2.4
|
||||
- uses: pnpm/action-setup@v2.4.0
|
||||
name: Install pnpm
|
||||
id: pnpm-install
|
||||
with:
|
||||
|
@ -181,7 +181,7 @@ jobs:
|
|||
uses: actions/configure-pages@v3
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v1
|
||||
uses: actions/upload-pages-artifact@v2
|
||||
with:
|
||||
path: playwright-report/
|
||||
|
||||
|
|
8
.github/workflows/release-candidate.yml
vendored
8
.github/workflows/release-candidate.yml
vendored
|
@ -9,13 +9,13 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v2
|
||||
|
@ -31,7 +31,7 @@ jobs:
|
|||
echo "tag=${TAG}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build and push images
|
||||
uses: docker/build-push-action@v4
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
platforms: linux/amd64,linux/arm64
|
||||
|
|
22
.github/workflows/release.yml
vendored
22
.github/workflows/release.yml
vendored
|
@ -9,7 +9,7 @@ jobs:
|
|||
tag: ${{ steps.get_tag.outputs.tag }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v3
|
||||
|
@ -28,13 +28,13 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v2
|
||||
|
@ -43,7 +43,7 @@ jobs:
|
|||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Build and push images
|
||||
uses: docker/build-push-action@v4
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
platforms: linux/amd64,linux/arm64
|
||||
|
@ -58,14 +58,14 @@ jobs:
|
|||
needs: get-tag
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 18
|
||||
|
||||
- uses: pnpm/action-setup@v2.2.4
|
||||
- uses: pnpm/action-setup@v2.4.0
|
||||
name: Install pnpm
|
||||
id: pnpm-install
|
||||
with:
|
||||
|
@ -95,7 +95,7 @@ jobs:
|
|||
run: pnpm -r --filter cli package
|
||||
|
||||
- name: Upload CLI
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: cli
|
||||
path: packages/cli/dist
|
||||
|
@ -107,7 +107,7 @@ jobs:
|
|||
tagname: ${{ steps.create_tag.outputs.tagname }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Create Tag
|
||||
id: create_tag
|
||||
|
@ -124,7 +124,7 @@ jobs:
|
|||
id: ${{ steps.create_release.outputs.id }}
|
||||
steps:
|
||||
- name: Download CLI
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: cli
|
||||
path: cli
|
||||
|
@ -175,7 +175,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Promote release
|
||||
uses: actions/github-script@v4
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
|
|
30
package.json
30
package.json
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "runtipi",
|
||||
"version": "2.0.6",
|
||||
"version": "2.0.7",
|
||||
"description": "A homeserver for everyone",
|
||||
"scripts": {
|
||||
"knip": "knip",
|
||||
|
@ -32,7 +32,7 @@
|
|||
"tsc": "tsc"
|
||||
},
|
||||
"dependencies": {
|
||||
"@hookform/resolvers": "^3.3.1",
|
||||
"@hookform/resolvers": "^3.3.2",
|
||||
"@otplib/core": "^12.0.1",
|
||||
"@otplib/plugin-crypto": "^12.0.1",
|
||||
"@otplib/plugin-thirty-two": "^12.0.1",
|
||||
|
@ -43,8 +43,8 @@
|
|||
"@radix-ui/react-tabs": "^1.0.4",
|
||||
"@runtipi/postgres-migrations": "^5.3.0",
|
||||
"@runtipi/shared": "workspace:^",
|
||||
"@tabler/core": "1.0.0-beta19",
|
||||
"@tabler/icons-react": "^2.38.0",
|
||||
"@tabler/core": "1.0.0-beta20",
|
||||
"@tabler/icons-react": "^2.39.0",
|
||||
"argon2": "^0.31.1",
|
||||
"bullmq": "^4.12.3",
|
||||
"clsx": "^2.0.0",
|
||||
|
@ -52,10 +52,10 @@
|
|||
"drizzle-orm": "^0.28.6",
|
||||
"fs-extra": "^11.1.1",
|
||||
"lodash.merge": "^4.6.2",
|
||||
"next": "13.5.4",
|
||||
"next": "13.5.5",
|
||||
"next-client-cookies": "^1.0.5",
|
||||
"next-intl": "^2.20.2",
|
||||
"next-safe-action": "^3.4.0",
|
||||
"next-safe-action": "^4.0.1",
|
||||
"pg": "^8.11.3",
|
||||
"qrcode.react": "^3.1.0",
|
||||
"react": "18.2.0",
|
||||
|
@ -70,7 +70,7 @@
|
|||
"rehype-raw": "^7.0.0",
|
||||
"remark-breaks": "^4.0.0",
|
||||
"remark-gfm": "^4.0.0",
|
||||
"sass": "^1.69.2",
|
||||
"sass": "^1.69.4",
|
||||
"semver": "^7.5.4",
|
||||
"sharp": "0.32.6",
|
||||
"swr": "^2.2.4",
|
||||
|
@ -78,7 +78,7 @@
|
|||
"uuid": "^9.0.1",
|
||||
"validator": "^13.11.0",
|
||||
"winston": "^3.11.0",
|
||||
"zod": "^3.21.4",
|
||||
"zod": "^3.22.4",
|
||||
"zustand": "^4.4.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
@ -92,17 +92,17 @@
|
|||
"@total-typescript/shoehorn": "^0.1.1",
|
||||
"@total-typescript/ts-reset": "^0.5.1",
|
||||
"@types/fs-extra": "^11.0.2",
|
||||
"@types/jest": "^29.5.5",
|
||||
"@types/jest": "^29.5.6",
|
||||
"@types/lodash.merge": "^4.6.7",
|
||||
"@types/node": "20.8.4",
|
||||
"@types/pg": "^8.10.5",
|
||||
"@types/react": "18.2.28",
|
||||
"@types/react": "18.2.31",
|
||||
"@types/react-dom": "18.2.13",
|
||||
"@types/semver": "^7.5.3",
|
||||
"@types/uuid": "^9.0.5",
|
||||
"@types/validator": "^13.11.2",
|
||||
"@typescript-eslint/eslint-plugin": "^6.7.5",
|
||||
"@typescript-eslint/parser": "^6.7.5",
|
||||
"@typescript-eslint/eslint-plugin": "^6.8.0",
|
||||
"@typescript-eslint/parser": "^6.8.0",
|
||||
"@vitejs/plugin-react": "^4.1.0",
|
||||
"@vitest/coverage-v8": "^0.34.6",
|
||||
"dotenv-cli": "^7.3.0",
|
||||
|
@ -118,7 +118,7 @@
|
|||
"eslint-plugin-jsx-a11y": "^6.7.1",
|
||||
"eslint-plugin-react": "^7.33.2",
|
||||
"eslint-plugin-react-hooks": "^4.6.0",
|
||||
"eslint-plugin-testing-library": "^6.0.2",
|
||||
"eslint-plugin-testing-library": "^6.1.0",
|
||||
"jest": "^29.7.0",
|
||||
"jest-environment-jsdom": "^29.7.0",
|
||||
"knip": "^2.33.1",
|
||||
|
@ -148,8 +148,6 @@
|
|||
},
|
||||
"homepage": "https://github.com/runtipi/runtipi#readme",
|
||||
"pnpm": {
|
||||
"patchedDependencies": {
|
||||
"next-safe-action@3.4.0": "patches/next-safe-action@3.4.0.patch"
|
||||
}
|
||||
"patchedDependencies": {}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@runtipi/cli",
|
||||
"version": "2.0.6",
|
||||
"version": "2.0.7",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"bin": "dist/index.js",
|
||||
|
@ -59,6 +59,6 @@
|
|||
"semver": "^7.5.4",
|
||||
"systeminformation": "^5.21.11",
|
||||
"web-push": "^3.6.6",
|
||||
"zod": "^3.21.4"
|
||||
"zod": "^3.22.4"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -152,10 +152,10 @@ export class AppExecutors {
|
|||
try {
|
||||
this.logger.info(`Stopping app ${appId}`);
|
||||
|
||||
this.logger.info(`Regenerating app.env file for app ${appId}`);
|
||||
await this.ensureAppDir(appId);
|
||||
|
||||
if (!skipEnvGeneration) {
|
||||
this.logger.info(`Regenerating app.env file for app ${appId}`);
|
||||
await generateEnvFile(appId, config);
|
||||
}
|
||||
await compose(appId, 'rm --force --stop');
|
||||
|
|
|
@ -97,6 +97,7 @@ export const generateEnvFile = async (appId: string, config: Record<string, unkn
|
|||
} else {
|
||||
envMap.set('APP_DOMAIN', `${internalIp}:${parsedConfig.data.port}`);
|
||||
envMap.set('APP_HOST', internalIp);
|
||||
envMap.set('APP_PROTOCOL', 'http');
|
||||
}
|
||||
|
||||
// Create app-data folder if it doesn't exist
|
||||
|
|
|
@ -4,7 +4,7 @@ import { program } from 'commander';
|
|||
import chalk from 'chalk';
|
||||
import { description, version } from '../package.json';
|
||||
import { startWorker } from './services/watcher/watcher';
|
||||
import { SystemExecutors } from './executors';
|
||||
import { AppExecutors, SystemExecutors } from './executors';
|
||||
|
||||
const main = async () => {
|
||||
program.description(description).version(version);
|
||||
|
@ -69,6 +69,25 @@ const main = async () => {
|
|||
await systemExecutors.cleanLogs();
|
||||
});
|
||||
|
||||
// Start app: ./cli app start <app>
|
||||
// Stop app: ./cli app stop <app>
|
||||
program
|
||||
.command('app [command] <app>')
|
||||
.description('App management')
|
||||
.action(async (command, app) => {
|
||||
const appExecutors = new AppExecutors();
|
||||
switch (command) {
|
||||
case 'start':
|
||||
await appExecutors.startApp(app, {});
|
||||
break;
|
||||
case 'stop':
|
||||
await appExecutors.stopApp(app, {}, true);
|
||||
break;
|
||||
default:
|
||||
console.log(chalk.red('✗'), 'Unknown command');
|
||||
}
|
||||
});
|
||||
|
||||
program.parse(process.argv);
|
||||
};
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"winston": "^3.9.0",
|
||||
"zod": "^3.21.4"
|
||||
"winston": "^3.11.0",
|
||||
"zod": "^3.22.4"
|
||||
}
|
||||
}
|
||||
|
|
2867
pnpm-lock.yaml
2867
pnpm-lock.yaml
File diff suppressed because it is too large
Load diff
|
@ -36,8 +36,8 @@ export function LoginContainer() {
|
|||
});
|
||||
|
||||
if (totpSessionId) {
|
||||
return <TotpForm loading={verifyTotpMutation.isExecuting} onSubmit={(totpCode) => verifyTotpMutation.execute({ totpCode, totpSessionId })} />;
|
||||
return <TotpForm loading={verifyTotpMutation.status === 'executing'} onSubmit={(totpCode) => verifyTotpMutation.execute({ totpCode, totpSessionId })} />;
|
||||
}
|
||||
|
||||
return <LoginForm loading={loginMutation.isExecuting} onSubmit={({ email, password }) => loginMutation.execute({ username: email, password })} />;
|
||||
return <LoginForm loading={loginMutation.status === 'executing'} onSubmit={({ email, password }) => loginMutation.execute({ username: email, password })} />;
|
||||
}
|
||||
|
|
|
@ -20,5 +20,5 @@ export const RegisterContainer: React.FC = () => {
|
|||
},
|
||||
});
|
||||
|
||||
return <RegisterForm onSubmit={({ email, password }) => registerMutation.execute({ username: email, password })} loading={registerMutation.isExecuting} />;
|
||||
return <RegisterForm onSubmit={({ email, password }) => registerMutation.execute({ username: email, password })} loading={registerMutation.status === 'executing'} />;
|
||||
};
|
||||
|
|
|
@ -30,11 +30,11 @@ export const ResetPasswordContainer: React.FC = () => {
|
|||
},
|
||||
});
|
||||
|
||||
if (resetPasswordMutation.res.data?.success && resetPasswordMutation.res.data?.email) {
|
||||
if (resetPasswordMutation.result.data?.success && resetPasswordMutation.result.data?.email) {
|
||||
return (
|
||||
<>
|
||||
<h2 className="h2 text-center mb-3">{t('auth.reset-password.success-title')}</h2>
|
||||
<p>{t('auth.reset-password.success', { email: resetPasswordMutation.res.data.email })}</p>
|
||||
<p>{t('auth.reset-password.success', { email: resetPasswordMutation.result.data.email })}</p>
|
||||
<Button onClick={() => router.push('/login')} type="button" className="btn btn-primary w-100">
|
||||
{t('auth.reset-password.back-to-login')}
|
||||
</Button>
|
||||
|
@ -44,7 +44,7 @@ export const ResetPasswordContainer: React.FC = () => {
|
|||
|
||||
return (
|
||||
<ResetPasswordForm
|
||||
loading={resetPasswordMutation.isExecuting}
|
||||
loading={resetPasswordMutation.status === 'executing' || cancelRequestMutation.status === 'executing'}
|
||||
onCancel={() => cancelRequestMutation.execute()}
|
||||
onSubmit={({ password }) => resetPasswordMutation.execute({ newPassword: password })}
|
||||
/>
|
||||
|
|
|
@ -193,7 +193,7 @@ export const AppDetailsContainer: React.FC<IProps> = ({ app, localDomain }) => {
|
|||
<div className="w-100 d-flex flex-column ms-md-3 align-items-center align-items-md-start">
|
||||
<div>
|
||||
<span className="mt-1 me-1">{t('apps.app-details.version')}: </span>
|
||||
<span className="badge bg-gray mt-2">{app.info.version}</span>
|
||||
<span className="badge bg-muted mt-2 text-white">{app.info.version}</span>
|
||||
</div>
|
||||
<span className="mt-1 text-muted text-center mb-2">{app.info.short_desc}</span>
|
||||
<div className="mb-1">{customStatus !== 'missing' && <AppStatus status={customStatus} />}</div>
|
||||
|
|
|
@ -36,7 +36,7 @@ export const AppDetailsTabs: React.FC<IProps> = ({ info }) => {
|
|||
</DataGridItem>
|
||||
<DataGridItem title={t('categories-title')}>
|
||||
{info.categories.map((c) => (
|
||||
<div key={c} className="badge bg-green me-1">
|
||||
<div key={c} className="badge text-white bg-green me-1">
|
||||
{t(`categories.${c}`)}
|
||||
</div>
|
||||
))}
|
||||
|
@ -45,7 +45,7 @@ export const AppDetailsTabs: React.FC<IProps> = ({ info }) => {
|
|||
{info.supported_architectures && (
|
||||
<DataGridItem title={t('supported-arch')}>
|
||||
{info.supported_architectures.map((a) => (
|
||||
<div key={a} className="badge bg-red me-1">
|
||||
<div key={a} className="badge text-white bg-red me-1">
|
||||
{a.toLowerCase()}
|
||||
</div>
|
||||
))}
|
||||
|
|
|
@ -27,7 +27,7 @@ export const AppStoreTile: React.FC<{ app: App }> = ({ app }) => {
|
|||
<h3 className="text-bold h-3 mb-2">{limitText(app.name, 20)}</h3>
|
||||
<p className="text-muted text-nowrap mb-2">{limitText(app.short_desc, 30)}</p>
|
||||
{app.categories?.map((category) => (
|
||||
<div className={`badge me-1 bg-${colorSchemeForCategory[category]}`} key={`${app.id}-${category}`}>
|
||||
<div className={`text-white badge me-1 bg-${colorSchemeForCategory[category]}`} key={`${app.id}-${category}`}>
|
||||
{t(`categories.${category}`)}
|
||||
</div>
|
||||
))}
|
||||
|
|
|
@ -55,7 +55,7 @@ export const colorSchemeForCategory: Record<AppCategory, string> = {
|
|||
development: 'red',
|
||||
utilities: 'muted',
|
||||
photography: 'purple',
|
||||
security: 'organge',
|
||||
security: 'orange',
|
||||
social: 'yellow',
|
||||
featured: 'lime',
|
||||
data: 'green',
|
||||
|
@ -63,7 +63,7 @@ export const colorSchemeForCategory: Record<AppCategory, string> = {
|
|||
music: 'cyan',
|
||||
finance: 'dark',
|
||||
gaming: 'pink',
|
||||
ai: 'gray',
|
||||
ai: 'muted',
|
||||
};
|
||||
|
||||
type AppCategoryEntry = {
|
||||
|
|
|
@ -38,7 +38,7 @@ export const NavBar: React.FC<IProps> = ({ isUpdateAvailable }) => {
|
|||
{renderItem(t('app-store'), 'app-store', IconBrandAppstore)}
|
||||
{renderItem(t('settings'), 'settings', IconSettings)}
|
||||
</ul>
|
||||
{Boolean(isUpdateAvailable) && <span className="ms-2 badge bg-green d-none d-lg-block">{t('update-available')}</span>}
|
||||
{Boolean(isUpdateAvailable) && <span className="ms-2 badge text-white bg-green d-none d-lg-block">{t('update-available')}</span>}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
|
|
@ -36,7 +36,7 @@ export const PageTitle = ({ apps }: Props) => {
|
|||
return (
|
||||
<>
|
||||
<div className="page-pretitle">{renderBreadcrumbs()}</div>
|
||||
<h2 className="page-title">{title}</h2>
|
||||
<h2 className="page-title mt-1">{title}</h2>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
.title {
|
||||
min-height: 50px;
|
||||
min-width: 200px;
|
||||
}
|
||||
|
|
|
@ -29,11 +29,11 @@ export default async function DashboardLayout({ children }: { children: React.Re
|
|||
<div className="page-wrapper">
|
||||
<div className="page-header d-print-none">
|
||||
<div className="container-xl">
|
||||
<div className={clsx(styles.title, 'align-items-stretch align-items-md-center d-flex flex-column flex-md-row ')}>
|
||||
<div className="me-3 text-white">
|
||||
<div className={clsx(styles.title, 'row g-2 align-items-center')}>
|
||||
<div className="col text-white">
|
||||
<PageTitle apps={apps} />
|
||||
</div>
|
||||
<div className="flex-fill">
|
||||
<div className="flex-fill col-auto ms-auto d-print-none">
|
||||
<LayoutActions />
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -58,17 +58,30 @@ export const ChangePasswordForm = () => {
|
|||
|
||||
return (
|
||||
<form onSubmit={handleSubmit(onSubmit)} className="mb-4 w-100 ">
|
||||
<Input disabled={changePasswordMutation.isExecuting} {...register('currentPassword')} error={errors.currentPassword?.message} type="password" placeholder={t('form.current-password')} />
|
||||
<Input disabled={changePasswordMutation.isExecuting} {...register('newPassword')} error={errors.newPassword?.message} className="mt-2" type="password" placeholder={t('form.new-password')} />
|
||||
<Input
|
||||
disabled={changePasswordMutation.isExecuting}
|
||||
disabled={changePasswordMutation.status === 'executing'}
|
||||
{...register('currentPassword')}
|
||||
error={errors.currentPassword?.message}
|
||||
type="password"
|
||||
placeholder={t('form.current-password')}
|
||||
/>
|
||||
<Input
|
||||
disabled={changePasswordMutation.status === 'executing'}
|
||||
{...register('newPassword')}
|
||||
error={errors.newPassword?.message}
|
||||
className="mt-2"
|
||||
type="password"
|
||||
placeholder={t('form.new-password')}
|
||||
/>
|
||||
<Input
|
||||
disabled={changePasswordMutation.status === 'executing'}
|
||||
{...register('newPasswordConfirm')}
|
||||
error={errors.newPasswordConfirm?.message}
|
||||
className="mt-2"
|
||||
type="password"
|
||||
placeholder={t('form.confirm-password')}
|
||||
/>
|
||||
<Button disabled={changePasswordMutation.isExecuting} className="mt-3" type="submit">
|
||||
<Button disabled={changePasswordMutation.status === 'executing'} className="mt-3" type="submit">
|
||||
{t('form.change-password')}
|
||||
</Button>
|
||||
</form>
|
||||
|
|
|
@ -103,7 +103,7 @@ export const OtpForm = (props: { totpEnabled: boolean }) => {
|
|||
return (
|
||||
<>
|
||||
{!key && <Switch onCheckedChange={handleTotp} checked={totpEnabled} label={t('enable-2fa')} />}
|
||||
{getTotpUriMutation.isExecuting && (
|
||||
{getTotpUriMutation.status === 'executing' && (
|
||||
<div className="progress w-50">
|
||||
<div className="progress-bar progress-bar-indeterminate bg-green" />
|
||||
</div>
|
||||
|
@ -123,7 +123,7 @@ export const OtpForm = (props: { totpEnabled: boolean }) => {
|
|||
>
|
||||
<p className="text-muted">{t('password-needed-hint')}</p>
|
||||
<Input name="password" type="password" onChange={(e) => setPassword(e.target.value)} placeholder={t('form.password')} />
|
||||
<Button loading={getTotpUriMutation.isExecuting} type="submit" className="btn-success mt-3">
|
||||
<Button loading={getTotpUriMutation.status === 'executing'} type="submit" className="btn-success mt-3">
|
||||
{t('enable-2fa')}
|
||||
</Button>
|
||||
</form>
|
||||
|
@ -144,7 +144,7 @@ export const OtpForm = (props: { totpEnabled: boolean }) => {
|
|||
>
|
||||
<p className="text-muted">{t('password-needed-hint')}</p>
|
||||
<Input name="password" type="password" onChange={(e) => setPassword(e.target.value)} placeholder={t('form.password')} />
|
||||
<Button loading={disableTotpMutation.isExecuting} type="submit" className="btn-danger mt-3">
|
||||
<Button loading={disableTotpMutation.status === 'executing'} type="submit" className="btn-danger mt-3">
|
||||
{t('disable-2fa')}
|
||||
</Button>
|
||||
</form>
|
||||
|
|
|
@ -32,7 +32,7 @@ export const SettingsContainer = ({ initialValues, currentLocale }: Props) => {
|
|||
|
||||
return (
|
||||
<div className="card-body">
|
||||
<SettingsForm initalValues={initialValues} currentLocale={currentLocale} loading={updateSettingsMutation.isExecuting} onSubmit={onSubmit} />
|
||||
<SettingsForm initalValues={initialValues} currentLocale={currentLocale} loading={updateSettingsMutation.status === 'executing'} onSubmit={onSubmit} />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -12,14 +12,23 @@ type Props = {
|
|||
export const ThemeProvider = (props: Props) => {
|
||||
const { children, initialTheme } = props;
|
||||
const cookies = useCookies();
|
||||
const { theme } = useUIStore();
|
||||
const { theme, setDarkMode } = useUIStore();
|
||||
|
||||
useEffect(() => {
|
||||
if (theme) {
|
||||
cookies.set('theme', theme || initialTheme || 'light', { path: '/' });
|
||||
cookies.set('theme', theme || initialTheme || 'light', { path: '/', expires: 365 });
|
||||
document.body.dataset.bsTheme = theme;
|
||||
} else if (!cookies.get('theme')) {
|
||||
// Detect system theme
|
||||
const systemTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
||||
setDarkMode(systemTheme === 'dark');
|
||||
cookies.set('theme', systemTheme, { path: '/', expires: 365 });
|
||||
document.body.dataset.bsTheme = systemTheme;
|
||||
}
|
||||
}, [cookies, initialTheme, theme]);
|
||||
|
||||
const cookieTheme = cookies.get('theme');
|
||||
setDarkMode(cookieTheme === 'dark');
|
||||
}, [cookies, initialTheme, setDarkMode, theme]);
|
||||
|
||||
return children;
|
||||
};
|
||||
|
|
|
@ -15,7 +15,7 @@ export const Button = React.forwardRef<HTMLButtonElement, IProps>(({ type, class
|
|||
const styles = { width: width ? `${width}px` : 'auto' };
|
||||
return (
|
||||
<button style={styles} onClick={onClick} disabled={disabled || loading} ref={ref} className={clsx('btn', className, { disabled: disabled || loading })} type={type} {...rest}>
|
||||
{loading ? <span className="spinner-border spinner-border-sm mb-1 mx-2" role="status" data-testid="loader" aria-hidden="true" /> : children}
|
||||
{loading ? <span className="spinner-border spinner-border-sm mx-2" role="status" data-testid="loader" aria-hidden="true" /> : children}
|
||||
</button>
|
||||
);
|
||||
});
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Domain {domain} is already in use by app {id}",
|
||||
"could-not-get-latest-version": "Could not get latest version",
|
||||
"current-version-is-latest": "Current version is already up to date",
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions on GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an other app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Maintenance",
|
||||
"maintenance-subtitle": "Common actions to perform on your instance",
|
||||
"restart": "Restart",
|
||||
"update": "Update to {version}",
|
||||
"already-latest": "Already up to date"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Dashboard",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "My Apps",
|
||||
"app-store": "App Store",
|
||||
"settings": "Settings",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Domain {domain} is already in use by app {id}",
|
||||
"could-not-get-latest-version": "Could not get latest version",
|
||||
"current-version-is-latest": "Current version is already up to date",
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions on GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an other app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Maintenance",
|
||||
"maintenance-subtitle": "Common actions to perform on your instance",
|
||||
"restart": "Restart",
|
||||
"update": "Update to {version}",
|
||||
"already-latest": "Already up to date"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Dashboard",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "My Apps",
|
||||
"app-store": "App Store",
|
||||
"settings": "Settings",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Domain {domain} is already in use by app {id}",
|
||||
"could-not-get-latest-version": "Could not get latest version",
|
||||
"current-version-is-latest": "Current version is already up to date",
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions on GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an other app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Maintenance",
|
||||
"maintenance-subtitle": "Common actions to perform on your instance",
|
||||
"restart": "Restart",
|
||||
"update": "Update to {version}",
|
||||
"already-latest": "Already up to date"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Dashboard",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "My Apps",
|
||||
"app-store": "App Store",
|
||||
"settings": "Settings",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Domain {domain} is already in use by app {id}",
|
||||
"could-not-get-latest-version": "Could not get latest version",
|
||||
"current-version-is-latest": "Current version is already up to date",
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions on GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an other app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Maintenance",
|
||||
"maintenance-subtitle": "Common actions to perform on your instance",
|
||||
"restart": "Restart",
|
||||
"update": "Update to {version}",
|
||||
"already-latest": "Already up to date"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Dashboard",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "My Apps",
|
||||
"app-store": "App Store",
|
||||
"settings": "Settings",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Domain {domain} is already in use by app {id}",
|
||||
"could-not-get-latest-version": "Could not get latest version",
|
||||
"current-version-is-latest": "Current version is already up to date",
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions on GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an other app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Maintenance",
|
||||
"maintenance-subtitle": "Common actions to perform on your instance",
|
||||
"restart": "Restart",
|
||||
"update": "Update to {version}",
|
||||
"already-latest": "Already up to date"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Dashboard",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "My Apps",
|
||||
"app-store": "App Store",
|
||||
"settings": "Settings",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Die Domain {domain} ist bereits in Verwendung von der App {id}",
|
||||
"could-not-get-latest-version": "Konnte aktuellste Version nicht abfragen",
|
||||
"current-version-is-latest": "Die aktuelle Version ist bereits auf dem neuesten Stand",
|
||||
"major-version-update": "Die Hauptversion hat sich geändert. Bitte aktualisieren Sie manuell. (Anleitung auf GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an other app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Wartung",
|
||||
"maintenance-subtitle": "Beliebte Aktionen, die Sie auf Ihrer Instanz durchführen können",
|
||||
"restart": "Neustart",
|
||||
"update": "Aktualisieren zu {version}",
|
||||
"already-latest": "Bereits auf dem neuesten Stand"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Dashboard",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "Meine Apps",
|
||||
"app-store": "App Store",
|
||||
"settings": "Einstellungen",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Ο τομέας {domain} χρησιμοποιείται ήδη από την εφαρμογή {id}",
|
||||
"could-not-get-latest-version": "Αδυναμία λήψης της τελευταίας έκδοσης",
|
||||
"current-version-is-latest": "Η τρέχουσα έκδοση είναι ενημερωμένη",
|
||||
"major-version-update": "Η κύρια έκδοση έχει αλλάξει. Παρακαλούμε ενημερώστε χειροκίνητα (οδηγίες στο GitHub)"
|
||||
"major-version-update": "Η κύρια έκδοση έχει αλλάξει. Παρακαλούμε ενημερώστε χειροκίνητα (οδηγίες σε σημειώσεις έκδοσης)",
|
||||
"demo-mode-limit": "Μόνο 6 εφαρμογές μπορούν να εγκατασταθούν στη λειτουργία επίδειξης. Παρακαλώ απεγκαταστήστε μια άλλη εφαρμογή για να εγκαταστήσετε μια νέα."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Συντήρηση",
|
||||
"maintenance-subtitle": "Κοινές ενέργειες για να εκτελέσετε",
|
||||
"restart": "Επανεκκίνηση",
|
||||
"update": "Αναβάθμιση στην έκδοση {version}",
|
||||
"already-latest": "Ήδη ενημερωμένο"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Πίνακας Ελέγχου",
|
||||
"apps": "Οι εφαρμογές μου",
|
||||
"my-apps": "Οι εφαρμογές μου",
|
||||
"app-store": "Κατάστημα εφαρμογών",
|
||||
"settings": "Ρυθμίσεις",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Domain {domain} is already in use by app {id}",
|
||||
"could-not-get-latest-version": "Could not get latest version",
|
||||
"current-version-is-latest": "Current version is already up to date",
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions on GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Maintenance",
|
||||
"maintenance-subtitle": "Common actions to perform on your instance",
|
||||
"restart": "Restart",
|
||||
"update": "Update to {version}",
|
||||
"already-latest": "Already up to date"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Dashboard",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "My Apps",
|
||||
"app-store": "App Store",
|
||||
"settings": "Settings",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "El dominio {domain} ya está en uso por la aplicación {id}",
|
||||
"could-not-get-latest-version": "No se pudo obtener la última versión",
|
||||
"current-version-is-latest": "La versión ya está actualizada",
|
||||
"major-version-update": "La versión principal ha cambiado. Por favor, actualice manualmente (instrucciones en GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an other app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Mantenimiento",
|
||||
"maintenance-subtitle": "Acciones comunes a realizar en tu instancia",
|
||||
"restart": "Reiniciar",
|
||||
"update": "Actualizar a {version}",
|
||||
"already-latest": "Ya está actualizado"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Dashboard",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "Mis aplicaciones",
|
||||
"app-store": "Tienda de aplicaciones",
|
||||
"settings": "Configuración",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Domain {domain} is already in use by app {id}",
|
||||
"could-not-get-latest-version": "Could not get latest version",
|
||||
"current-version-is-latest": "Current version is already up to date",
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions on GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an other app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Maintenance",
|
||||
"maintenance-subtitle": "Common actions to perform on your instance",
|
||||
"restart": "Restart",
|
||||
"update": "Update to {version}",
|
||||
"already-latest": "Already up to date"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Dashboard",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "My Apps",
|
||||
"app-store": "App Store",
|
||||
"settings": "Settings",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Le domaine {domain} est déjà utilisé par l'application {id}",
|
||||
"could-not-get-latest-version": "Impossible d'obtenir la dernière version",
|
||||
"current-version-is-latest": "La version actuelle est déjà à jour",
|
||||
"major-version-update": "La version majeure a changé. Veuillez mettre à jour manuellement (instructions sur GitHub)"
|
||||
"major-version-update": "La version majeure a changé. Veuillez mettre à jour manuellement (instructions dans les notes de version)",
|
||||
"demo-mode-limit": "Seulement 6 applications peuvent être installées en mode démo. Veuillez désinstaller une autre application pour en installer une nouvelle."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Maintenance",
|
||||
"maintenance-subtitle": "Actions courantes à effectuer sur votre instance",
|
||||
"restart": "Redémarrer",
|
||||
"update": "Mettre à jour vers {version}",
|
||||
"already-latest": "Déjà à jour"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Tableau de bord",
|
||||
"apps": "Mes Applications",
|
||||
"my-apps": "Mes applications",
|
||||
"app-store": "App Store",
|
||||
"settings": "Paramètres",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Domain {domain} is already in use by app {id}",
|
||||
"could-not-get-latest-version": "Could not get latest version",
|
||||
"current-version-is-latest": "Current version is already up to date",
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions on GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an other app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Maintenance",
|
||||
"maintenance-subtitle": "Common actions to perform on your instance",
|
||||
"restart": "Restart",
|
||||
"update": "Update to {version}",
|
||||
"already-latest": "Already up to date"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Dashboard",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "My Apps",
|
||||
"app-store": "App Store",
|
||||
"settings": "Settings",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "A(z) {domain} domaint már használja a(z) {id} alkalmazás",
|
||||
"could-not-get-latest-version": "Nem sikerült letölteni a legújabb verziót",
|
||||
"current-version-is-latest": "A jelenlegi verzió már naprakész",
|
||||
"major-version-update": "A fő verzió megváltozott. Kérjük, frissítse manuálisan (utasítások a GitHubon)"
|
||||
"major-version-update": "A fő verzió megváltozott, kérjük frissítse manuálisan (utasítások a kiadás megjegyzéseiben)",
|
||||
"demo-mode-limit": "A demo verzióban csak 6 applikáció telepíthető. Kérjük töröljön egy applikációt, hogy újat telepíthessen."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Karbantartás",
|
||||
"maintenance-subtitle": "Általános műveletek ezen a példányon",
|
||||
"restart": "Újraindítás",
|
||||
"update": "Frissítés erre {version}",
|
||||
"already-latest": "Már naprakész"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Irányítópult",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "Alkalmazásaim",
|
||||
"app-store": "Alkalmazásbolt",
|
||||
"settings": "Beállítások",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Il dominio {domain} è già in uso dall'app {id}",
|
||||
"could-not-get-latest-version": "Impossibile ottenere l'ultima versione",
|
||||
"current-version-is-latest": "La versione corrente è già la più recente",
|
||||
"major-version-update": "La version major è cambiata. Aggiorna manualmente (istruzioni su GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an other app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Manutenzione",
|
||||
"maintenance-subtitle": "Azioni comuni da eseguire sulla tua istanza",
|
||||
"restart": "Riavvia",
|
||||
"update": "Aggiorna alla {version}",
|
||||
"already-latest": "Già aggiornato"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Dashboard",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "Le mie App",
|
||||
"app-store": "App Store",
|
||||
"settings": "Impostazioni",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "ドメイン {domain} はすでにアプリ {id} によって使用されています",
|
||||
"could-not-get-latest-version": "最新バージョンを取得できませんでした",
|
||||
"current-version-is-latest": "現在のバージョンは既に最新です",
|
||||
"major-version-update": "メジャーバージョンが変更されました。GitHubの手順に従って、手動で更新してください。"
|
||||
"major-version-update": "メジャーバージョンが変更されました。リリースノートの手順に従って、手動で更新してください。",
|
||||
"demo-mode-limit": "デモモードには、6つのアプリのみインストールできます。新しいアプリをインストールするには、他のアプリをアンインストールしてください。"
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "メンテナンス",
|
||||
"maintenance-subtitle": "あなたのインスタンスで実行する一般的なアクション",
|
||||
"restart": "再起動",
|
||||
"update": "{version} に更新",
|
||||
"already-latest": "既に最新です"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "ダッシュボード",
|
||||
"apps": "マイアプリ",
|
||||
"my-apps": "マイアプリ",
|
||||
"app-store": "アプリストア",
|
||||
"settings": "設定",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Domain {domain} is already in use by app {id}",
|
||||
"could-not-get-latest-version": "Could not get latest version",
|
||||
"current-version-is-latest": "Current version is already up to date",
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions on GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an other app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Maintenance",
|
||||
"maintenance-subtitle": "Common actions to perform on your instance",
|
||||
"restart": "Restart",
|
||||
"update": "Update to {version}",
|
||||
"already-latest": "Already up to date"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Dashboard",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "My Apps",
|
||||
"app-store": "App Store",
|
||||
"settings": "Settings",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Domain {domain} is already in use by app {id}",
|
||||
"could-not-get-latest-version": "Could not get latest version",
|
||||
"current-version-is-latest": "Current version is already up to date",
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions on GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an other app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Maintenance",
|
||||
"maintenance-subtitle": "Common actions to perform on your instance",
|
||||
"restart": "Restart",
|
||||
"update": "Update to {version}",
|
||||
"already-latest": "Already up to date"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Dashboard",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "My Apps",
|
||||
"app-store": "App Store",
|
||||
"settings": "Settings",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Domain {domain} is already in use by app {id}",
|
||||
"could-not-get-latest-version": "Could not get latest version",
|
||||
"current-version-is-latest": "Current version is already up to date",
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions on GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an other app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Maintenance",
|
||||
"maintenance-subtitle": "Common actions to perform on your instance",
|
||||
"restart": "Restart",
|
||||
"update": "Update to {version}",
|
||||
"already-latest": "Already up to date"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Dashboard",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "My Apps",
|
||||
"app-store": "App Store",
|
||||
"settings": "Settings",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Domena {domain} jest już w użyciu przez aplikację {id}",
|
||||
"could-not-get-latest-version": "Nie udało się pobrać najnowszej wersji",
|
||||
"current-version-is-latest": "Bieżąca wersja jest już aktualna",
|
||||
"major-version-update": "Główna wersja uległa zmianie. Proszę zaktualizować ręcznie (instrukcje na GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an other app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Przerwa techniczna",
|
||||
"maintenance-subtitle": "Wspólne działania do wykonania na twojej instancji",
|
||||
"restart": "Uruchom ponownie",
|
||||
"update": "Zaktualizuj do {version}",
|
||||
"already-latest": "Już aktualne"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Panel nawigacyjny",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "Moje aplikacje",
|
||||
"app-store": "Sklep z aplikacjami",
|
||||
"settings": "Ustawienia",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Domain {domain} is already in use by app {id}",
|
||||
"could-not-get-latest-version": "Could not get latest version",
|
||||
"current-version-is-latest": "Current version is already up to date",
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions on GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an other app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Maintenance",
|
||||
"maintenance-subtitle": "Common actions to perform on your instance",
|
||||
"restart": "Restart",
|
||||
"update": "Update to {version}",
|
||||
"already-latest": "Already up to date"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Dashboard",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "My Apps",
|
||||
"app-store": "App Store",
|
||||
"settings": "Settings",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Domain {domain} is already in use by app {id}",
|
||||
"could-not-get-latest-version": "Could not get latest version",
|
||||
"current-version-is-latest": "Current version is already up to date",
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions on GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an other app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Maintenance",
|
||||
"maintenance-subtitle": "Common actions to perform on your instance",
|
||||
"restart": "Restart",
|
||||
"update": "Update to {version}",
|
||||
"already-latest": "Already up to date"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Dashboard",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "My Apps",
|
||||
"app-store": "App Store",
|
||||
"settings": "Settings",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Domeniul {domain} este deja utilizat de către aplicația {id}",
|
||||
"could-not-get-latest-version": "Nu s-a putut obține cea mai recentă versiune",
|
||||
"current-version-is-latest": "Versiunea curentă este deja actualizată",
|
||||
"major-version-update": "Versiunea majoră s-a schimbat. Vă rugăm să actualizați manual (instrucțiuni pe GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an other app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Mentenanță",
|
||||
"maintenance-subtitle": "Acțiuni comune de efectuat în instanța ta",
|
||||
"restart": "Repornire",
|
||||
"update": "Actualizează la {version}",
|
||||
"already-latest": "Actualizat deja"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Panou de bord",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "Aplicaţiile mele",
|
||||
"app-store": "Magazin Aplicații",
|
||||
"settings": "Setări",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Домен {domain} уже используется приложением {id}",
|
||||
"could-not-get-latest-version": "Не удалось получить последнюю версию",
|
||||
"current-version-is-latest": "Текущая версия уже актуальна",
|
||||
"major-version-update": "Мажорная версия изменилась. Пожалуйста, обновите вручную (инструкции на GitHub)"
|
||||
"major-version-update": "Основная версия была изменена. Пожалуйста, обновите вручную (инструкции в примечаниях к релизу)",
|
||||
"demo-mode-limit": "Только 6 приложений могут быть установлены в демо режиме. Пожалуйста, удалите другое приложение, чтобы установить новое."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Обслуживание",
|
||||
"maintenance-subtitle": "Общие действия для выполнения на вашем экземпляре",
|
||||
"restart": "Перезапустить",
|
||||
"update": "Обновить до {version}",
|
||||
"already-latest": "Уже обновлено"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Обзор",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "Мои приложения",
|
||||
"app-store": "Магазин приложений",
|
||||
"settings": "Настройки",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Domain {domain} is already in use by app {id}",
|
||||
"could-not-get-latest-version": "Could not get latest version",
|
||||
"current-version-is-latest": "Current version is already up to date",
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions on GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an other app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Maintenance",
|
||||
"maintenance-subtitle": "Common actions to perform on your instance",
|
||||
"restart": "Restart",
|
||||
"update": "Update to {version}",
|
||||
"already-latest": "Already up to date"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Dashboard",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "My Apps",
|
||||
"app-store": "App Store",
|
||||
"settings": "Settings",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Domän {domain} används redan av appen {id}",
|
||||
"could-not-get-latest-version": "Kunde inte hämta senaste versionen",
|
||||
"current-version-is-latest": "Den nuvarande versionen är redan uppdaterad",
|
||||
"major-version-update": "Huvudversionen har ändrats. Vänligen uppdatera manuellt (instruktioner på GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Endast 6 appar kan installeras i demoläget. Avinstallera en annan app för att installera en ny."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Underhåll",
|
||||
"maintenance-subtitle": "Vanliga åtgärder att utföra på din instans",
|
||||
"restart": "Starta om",
|
||||
"update": "Uppdatera till {version}",
|
||||
"already-latest": "Redan uppdaterad"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Kontrollpanel",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "Mina appar",
|
||||
"app-store": "App Store",
|
||||
"settings": "Inställningar",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "{domain} alan adı zaten {id} uygulaması tarafından kullanılıyor",
|
||||
"could-not-get-latest-version": "En son sürüm alınamadı",
|
||||
"current-version-is-latest": "Son versiyon zaten yüklü",
|
||||
"major-version-update": "Ana sürüm değişti. Lütfen manuel olarak güncelleyin (GitHub'daki talimatlar)"
|
||||
"major-version-update": "Ana sürüm değişti. Lütfen manuel olarak güncelleyin (sürüm notlarındaki talimatlar)",
|
||||
"demo-mode-limit": "Demo modunda yalnızca 6 uygulama yüklenebilir. Yeni bir uygulama yüklemek için lütfen başka bir uygulamayı kaldırın."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Bakım",
|
||||
"maintenance-subtitle": "Sunucunuz üzerinde gerçekleştirilecek ana işlemler",
|
||||
"restart": "Yeniden Başlat",
|
||||
"update": "{version} Sürümüne güncelle",
|
||||
"already-latest": "Zaten güncel"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Kontrol Paneli",
|
||||
"apps": "Uygulamalarım",
|
||||
"my-apps": "Uygulamalarım",
|
||||
"app-store": "Uygulama mağazası",
|
||||
"settings": "Ayarlar",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Domain {domain} is already in use by app {id}",
|
||||
"could-not-get-latest-version": "Could not get latest version",
|
||||
"current-version-is-latest": "Current version is already up to date",
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions on GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an other app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Maintenance",
|
||||
"maintenance-subtitle": "Common actions to perform on your instance",
|
||||
"restart": "Restart",
|
||||
"update": "Update to {version}",
|
||||
"already-latest": "Already up to date"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Dashboard",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "My Apps",
|
||||
"app-store": "App Store",
|
||||
"settings": "Settings",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "Tên miền {domain} đã được sử dụng bởi ứng dụng {id}",
|
||||
"could-not-get-latest-version": "Không thể kiểm tra phiên bản mới nhất",
|
||||
"current-version-is-latest": "Phiên bản hiện tại đã được cập nhật",
|
||||
"major-version-update": "Ứng dụng được cập nhật phiên bản lớn. Vui lòng cập nhật thủ công (hướng dẫn được tim thấy ở GitHub)"
|
||||
"major-version-update": "The major version has changed. Please update manually (instructions in release notes)",
|
||||
"demo-mode-limit": "Only 6 apps can be installed in the demo mode. Please uninstall an other app to install a new one."
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "Bảo trì",
|
||||
"maintenance-subtitle": "Những thao tác thường sử dụng trên máy chủ của bạn",
|
||||
"restart": "Khởi động lại",
|
||||
"update": "Cập nhật lên phiên bản {version}",
|
||||
"already-latest": "Đã cập nhật"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "Bảng điều khiển",
|
||||
"apps": "My Apps",
|
||||
"my-apps": "Ứng dụng của tôi",
|
||||
"app-store": "Cửa hàng ứng dụng",
|
||||
"settings": "Cài đặt",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "域名 {domain} 已被应用程序 {id} 使用",
|
||||
"could-not-get-latest-version": "无法获取最新版本",
|
||||
"current-version-is-latest": "当前版本已经是最新版本",
|
||||
"major-version-update": "主要版本已更新。请手动更新 (参照GitHub上的指示)"
|
||||
"major-version-update": "主要版本已更新。请手动更新 (参照更新记录上的指示)",
|
||||
"demo-mode-limit": "在演示模式下只能安装6个应用。请卸载其他应用来安装新应用。"
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "维护",
|
||||
"maintenance-subtitle": "在您的实例中执行的常见操作",
|
||||
"restart": "重启",
|
||||
"update": "更新到 {version}",
|
||||
"already-latest": "已是最新版本"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "控制面板",
|
||||
"apps": "我的应用",
|
||||
"my-apps": "我的应用",
|
||||
"app-store": "应用市场",
|
||||
"settings": "设置",
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
"domain-already-in-use": "域名 {domain} 已被應用程序 {id} 使用",
|
||||
"could-not-get-latest-version": "無法檢查最新版本",
|
||||
"current-version-is-latest": "當前版本已經是最新的",
|
||||
"major-version-update": "主要版本已更改。 請手動更新(参照GitHub 上的說明)"
|
||||
"major-version-update": "主要版本已更改。 請手動更新(参照更新說明)",
|
||||
"demo-mode-limit": "在演示模式下只能安裝6個應用。請卸載其他應用來安裝新應用。"
|
||||
},
|
||||
"success": {}
|
||||
},
|
||||
|
@ -228,7 +229,6 @@
|
|||
"maintenance-title": "維護",
|
||||
"maintenance-subtitle": "在您的實例上執行的常見操作",
|
||||
"restart": "重新啟動",
|
||||
"update": "更新到 {{version}}",
|
||||
"already-latest": "已是最新版本"
|
||||
},
|
||||
"settings": {
|
||||
|
@ -286,6 +286,7 @@
|
|||
},
|
||||
"header": {
|
||||
"dashboard": "儀表板",
|
||||
"apps": "我的應用程式",
|
||||
"my-apps": "我的應用程式",
|
||||
"app-store": "應用程式商店",
|
||||
"settings": "設定",
|
||||
|
|
|
@ -25,8 +25,7 @@ export const useUIStore = create<UIStore>((set) => ({
|
|||
setDarkMode: (darkMode: boolean) => {
|
||||
if (darkMode) {
|
||||
set({ theme: 'dark' });
|
||||
}
|
||||
if (!darkMode) {
|
||||
} else {
|
||||
set({ theme: 'light' });
|
||||
}
|
||||
set({ darkMode });
|
||||
|
|
Loading…
Reference in a new issue