mirror of
https://github.com/Kovah/LinkAce.git
synced 2025-04-21 07:22:20 +02:00
Merge remote-tracking branch 'origin/1.x' into 2.x
This commit is contained in:
commit
b76b6a9eb4
2
.github/workflows/analyze.yml
vendored
2
.github/workflows/analyze.yml
vendored
@ -50,7 +50,7 @@ jobs:
|
||||
run: composer install --prefer-dist --no-progress --no-suggest
|
||||
|
||||
- name: Test & publish code coverage
|
||||
uses: paambaati/codeclimate-action@v5.0.0
|
||||
uses: paambaati/codeclimate-action@v8.0.0
|
||||
env:
|
||||
CC_TEST_REPORTER_ID: ${{secrets.CC_TEST_REPORTER_ID}}
|
||||
with:
|
||||
|
32
.github/workflows/build-docker.yml
vendored
32
.github/workflows/build-docker.yml
vendored
@ -26,8 +26,8 @@ jobs:
|
||||
username: ${{ secrets.DOCKER_HUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_HUB_TOKEN }}
|
||||
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v2
|
||||
- name: Login to GitHub Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
@ -37,16 +37,36 @@ jobs:
|
||||
id: prep
|
||||
run: |
|
||||
DOCKER_IMAGE=linkace/linkace
|
||||
DOCKER_IMAGE_GITUHB=ghcr.io/kovah/linkace
|
||||
DOCKER_IMAGE_GITHUB=ghcr.io/kovah/linkace
|
||||
MAJOR_VERSION=1.x
|
||||
VERSION=${GITHUB_REF#refs/tags/}
|
||||
TAGS="${DOCKER_IMAGE}:${VERSION},${DOCKER_IMAGE_GITUHB}:${VERSION}"
|
||||
TAGS="${DOCKER_IMAGE}:${VERSION},${DOCKER_IMAGE}:${MAJOR_VERSION},${DOCKER_IMAGE}:latest,${DOCKER_IMAGE_GITHUB}:${VERSION},${DOCKER_IMAGE_GITHUB}:${MAJOR_VERSION},${DOCKER_IMAGE_GITHUB}:latest"
|
||||
echo "tags=${TAGS}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@v5
|
||||
- name: Build and push advanced image
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: .
|
||||
file: ./resources/docker/dockerfiles/release-multiplatform.Dockerfile
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||
push: true
|
||||
tags: ${{ steps.prep.outputs.tags }}
|
||||
|
||||
- name: Prepare simple tags
|
||||
id: prep-simple
|
||||
run: |
|
||||
DOCKER_IMAGE=linkace/linkace
|
||||
DOCKER_IMAGE_GITHUB=ghcr.io/kovah/linkace
|
||||
VERSION=${GITHUB_REF#refs/tags/}
|
||||
MAJOR_VERSION=1.x
|
||||
TAGS="${DOCKER_IMAGE}:${VERSION}-php-nginx,${DOCKER_IMAGE}:${MAJOR_VERSION}-php-nginx,${DOCKER_IMAGE}:php-nginx,${DOCKER_IMAGE}:${VERSION}-simple,${DOCKER_IMAGE}:${MAJOR_VERSION}-simple,${DOCKER_IMAGE}:simple,${DOCKER_IMAGE_GITHUB}:${VERSION}-php-nginx,${DOCKER_IMAGE_GITHUB}:${MAJOR_VERSION}-php-nginx,${DOCKER_IMAGE_GITHUB}:php-nginx,${DOCKER_IMAGE_GITHUB}:${VERSION}-simple,${DOCKER_IMAGE_GITHUB}:${MAJOR_VERSION}-simple,${DOCKER_IMAGE_GITHUB}:simple"
|
||||
echo "tags=${TAGS}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build and push simple image
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: .
|
||||
file: ./resources/docker/dockerfiles/release-multiplatform-simple.Dockerfile
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||
push: true
|
||||
tags: ${{ steps.prep-simple.outputs.tags }}
|
||||
|
@ -1,50 +1,55 @@
|
||||
# :construction: Contribution
|
||||
|
||||
If you want to contribute to the project please open a [ticket](https://github.com/Kovah/LinkAce/issues) first and
|
||||
describe what you want to do or what your idea is. Maybe there already is an existing ticket for your or a very similar
|
||||
If you want to contribute to the project please open an [issue](https://github.com/Kovah/LinkAce/issues) first and
|
||||
describe what you want to do or what your idea is. Maybe there already is an existing issue for your or a very similar
|
||||
topic.
|
||||
|
||||
I may decline contributions for features that may not fit into the application, so please make sure to talk to me before
|
||||
starting to code.
|
||||
|
||||
|
||||
## Contribution Guidelines
|
||||
|
||||
* Always use the `dev` branch to work on the application. The dev branch will contain the latest version of the app
|
||||
while the `main` branch contains the stable version (which may be outdated in terms of development).
|
||||
* Consider using a separate branch if you are working on a larger feature.
|
||||
* LinkAce uses two primary branches for the different major versions:
|
||||
* `1.x`
|
||||
* `2.x`
|
||||
* Those two branches hold the latest nightly (i.e. possibly unstable) code for the respective version. The latest stable
|
||||
version is accessible through the releases section and the corresponding tag.
|
||||
* Use the appropriate branch as a starting point for your contribution. Then open a pull request with your changes.
|
||||
* Reference the issue number in your commits please.
|
||||
* When opening a pull request, link to your ticket and describe what you did to solve the problem.
|
||||
|
||||
* When opening a pull request, link to your issue and describe what you did to solve the problem.
|
||||
|
||||
---
|
||||
|
||||
|
||||
## Development
|
||||
|
||||
### Minimum Requirements
|
||||
|
||||
* [Docker](https://www.docker.com/products/docker-desktop) _or_ PHP 7.4
|
||||
* [Node](https://nodejs.org/en/) (16 LTS)
|
||||
* [Docker](https://www.docker.com/products/docker-desktop)/[Podman](https://podman.io/docs/installation) _or_ a [currently-supported PHP version](https://www.php.net/supported-versions.php)
|
||||
* For Podman, you also need to `apt`, `dnf`, or otherwise install [`podman-compose`](https://github.com/containers/podman-compose)
|
||||
* [Node](https://nodejs.org/en/) (20 LTS)
|
||||
|
||||
### 1. Basic Setup
|
||||
|
||||
The following steps assume that you are using Docker for development, which I highly encourage. If you use other ways to work with PHP projects you must adapt the commands to your system. Clone the repository to your machine and run the following commands to start the Docker container system:
|
||||
The following steps assume that you are using Docker or Podman for development, which I highly encourage. If you use
|
||||
other ways to work with PHP projects you must adapt the commands to your system. If you want to use Podman, simply
|
||||
replace the word `docker` with `podman` in each command. Clone the repository to your machine and run the following
|
||||
commands to start the Docker container system:
|
||||
|
||||
```bash
|
||||
cp .env.docker .env
|
||||
docker-compose up -d --build
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
Now, install all dependencies from inside the PHP container:
|
||||
|
||||
```bash
|
||||
docker exec -it linkace-php composer install
|
||||
docker compose exec -it php composer install
|
||||
|
||||
docker exec -it linkace-php php artisan key:generate
|
||||
docker compose exec -it php php artisan key:generate
|
||||
```
|
||||
|
||||
Last step: compile all assets. Node 16 LTS is the minimum version required and recommended to use. You may use either NPM or Yarn for installing the asset dependencies.
|
||||
Last step: compile all assets. Node 16 LTS is the minimum version required and recommended to use. You may use either
|
||||
NPM or Yarn for installing the asset dependencies.
|
||||
|
||||
```bash
|
||||
npm install
|
||||
@ -54,10 +59,11 @@ npm run dev
|
||||
|
||||
#### 2. Working with the Artisan command line
|
||||
|
||||
I recommend using the Artisan command line tool in the PHP container only, to make sure that the same environment is used. To do so, use the following example command:
|
||||
I recommend using the Artisan command line tool in the PHP container only, to make sure that the same environment is
|
||||
used. To do so, use the following example command:
|
||||
|
||||
```bash
|
||||
docker exec -it linkace-php php artisan migrate
|
||||
docker compose exec -it php php artisan migrate
|
||||
```
|
||||
|
||||
#### 3. Registering a new user
|
||||
@ -65,23 +71,25 @@ docker exec -it linkace-php php artisan migrate
|
||||
Currently, you can do this by using the command line:
|
||||
|
||||
```bash
|
||||
docker exec -it linkace-php php artisan registeruser [user name] [user email]
|
||||
docker compose exec -it php php artisan registeruser [user name] [user email]
|
||||
```
|
||||
|
||||
|
||||
## Tests
|
||||
|
||||
You can run existing tests with the following command:
|
||||
|
||||
```bash
|
||||
docker exec -it linkace-php composer run lint
|
||||
docker exec -it linkace-php composer run test
|
||||
docker compose exec -it php composer run lint
|
||||
docker compose exec -it php composer run test
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## LinkAce Base Docker image
|
||||
|
||||
The Base image for LinkAce contains several packages and PHP extensions needed by LinkAce. It shortens the build time of the release images. This step is not needed by any developer working on LinkAce and is just a documentation for maintainers.
|
||||
The Base image for LinkAce contains several packages and PHP extensions needed by LinkAce. It shortens the build time of
|
||||
the release images. This step is not needed by any developer working on LinkAce and is just a documentation for
|
||||
maintainers.
|
||||
|
||||
```bash
|
||||
docker buildx build --push --platform "linux/amd64,linux/arm64,linux/arm/v7" -t linkace/base-image:php-8.3-alpine -f resources/docker/dockerfiles/release-base.Dockerfile .
|
||||
|
@ -7,8 +7,8 @@
|
||||
<p align="center"><b>Your self-hosted bookmark archive.</b></p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://twitter.com/LinkAceApp"><img src="https://img.shields.io/twitter/url?label=%40LinkAceApp&style=social&url=https%3A%2F%2Ftwitter.com%2FLinkAceApp" alt="Follow LinkAce on Twitter"></a>
|
||||
<a href="https://hub.docker.com/r/linkace/linkace"><img src="https://img.shields.io/badge/Docker-linkace%2Flinkace-2596EC.svg" alt="Docker Repository"></a>
|
||||
<a href="https://twitter.com/LinkAceApp"><img src="https://img.shields.io/badge/X.com%2FLinkAceApp-black" alt="Follow LinkAce on X.com"></a>
|
||||
<a href="https://mastodon.social/@linkace"><img src="https://img.shields.io/badge/%40linkace%40mastodon.social-6364ff" alt="Follow LinkAce on Mastodon"></a>
|
||||
<a href="https://github.com/Kovah/LinkAce/releases"><img src="https://img.shields.io/github/v/release/kovah/linkace?label=Latest%20Release" alt="Latest Release"></a>
|
||||
<a href="https://opensource.org/licenses/GPL-3.0"><img src="https://img.shields.io/github/license/kovah/linkace.svg" alt="License"></a>
|
||||
</p>
|
||||
@ -40,7 +40,7 @@ It provides a long-term archive to store links to websites, media files or anyth
|
||||
|
||||
* Save links with automatic title and description generation.
|
||||
* Automated link monitoring informs you when any links become unavailable or were moved.
|
||||
* Automated backups of saved sites via the [Internet Archive](https://web.archive.org/).
|
||||
* Automated archiving of saved sites via the [Internet Archive](https://web.archive.org/).
|
||||
* Organize bookmarks with the help of lists and tags.
|
||||
* A full REST API offers access to all features of LinkAce from other apps and services.
|
||||
* LinkAce is also [available on Zapier](https://zapier.com/apps/linkace/integrations) and integrates with over 2500+ applications.
|
||||
@ -74,7 +74,7 @@ LinkAce provides multiple ways of installing it on your server. The complete doc
|
||||
|
||||
I built LinkAce to solve my own problem, and I now offer my solution and code without charging any money. I spent a lot of my free time building this application, so I won't offer any *free* personal support, customization or installation help. If you need help please visit the [community discussions](https://github.com/Kovah/LinkAce/discussions) and post your issue there.
|
||||
|
||||
You can get personal and dedicated support by **becoming a supporter on [Open Collective](https://opencollective.com/linkace), [Patreon](https://www.patreon.com/Kovah) or [Github](https://github.com/sponsors/Kovah)**. :star:
|
||||
:star: You can get personal and dedicated support by **becoming a supporter on [Open Collective](https://opencollective.com/linkace), [Patreon](https://www.patreon.com/Kovah) or [Github](https://github.com/sponsors/Kovah)**.
|
||||
|
||||
#### Our Supporters on Open Collective
|
||||
|
||||
|
@ -26,7 +26,7 @@ class ResetPasswordCommand extends Command
|
||||
$newPassword = $this->secret('Please enter a new password for this user');
|
||||
|
||||
$validator = Validator::make(['password' => $newPassword], [
|
||||
'password' => 'required|string|min:10',
|
||||
'password' => 'required|string|min:8',
|
||||
]);
|
||||
|
||||
if ($validator->invalid()) {
|
||||
|
@ -95,6 +95,7 @@ return [
|
||||
'fr_FR' => 'Français',
|
||||
'hu_HU' => 'Magyar',
|
||||
'it_IT' => 'Italiano',
|
||||
'ja_JP' => '日本語',
|
||||
'no_NO' => 'Norsk',
|
||||
'pl_PL' => 'Polski',
|
||||
'ro_RO' => 'Română',
|
||||
|
@ -168,7 +168,7 @@ return [
|
||||
|
|
||||
*/
|
||||
|
||||
'secure' => env('SESSION_SECURE_COOKIE'),
|
||||
'secure' => env('SESSION_SECURE_COOKIE', true),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
@ -4,7 +4,7 @@ services:
|
||||
|
||||
# --- MariaDB
|
||||
db:
|
||||
image: mariadb:11.2
|
||||
image: docker.io/library/mariadb:11.2
|
||||
restart: unless-stopped
|
||||
command: mariadbd --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
|
||||
environment:
|
||||
@ -17,7 +17,7 @@ services:
|
||||
|
||||
# --- LinkAce Image with PHP
|
||||
app:
|
||||
image: linkace/linkace:latest
|
||||
image: docker.io/linkace/linkace:latest
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- db
|
||||
@ -36,7 +36,7 @@ services:
|
||||
|
||||
# --- Redis
|
||||
redis:
|
||||
image: bitnami/redis:7.2
|
||||
image: docker.io/bitnami/redis:7.2
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- REDIS_PASSWORD=${REDIS_PASSWORD}
|
||||
|
@ -5,7 +5,7 @@ services:
|
||||
|
||||
# --- MariaDB
|
||||
db:
|
||||
image: mariadb:11.2
|
||||
image: docker.io/library/mariadb:11.2
|
||||
command: mariadbd --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=${DB_PASSWORD}
|
||||
@ -18,7 +18,7 @@ services:
|
||||
- linkace-db:/var/lib/mysql
|
||||
|
||||
pg-db:
|
||||
image: postgres:14
|
||||
image: docker.io/library/postgres:16
|
||||
environment:
|
||||
- POSTGRES_PASSWORD=${DB_PASSWORD}
|
||||
- POSTGRES_USER=${DB_USERNAME}
|
||||
@ -41,7 +41,7 @@ services:
|
||||
|
||||
# --- Caddy
|
||||
caddy:
|
||||
image: caddy:2
|
||||
image: docker.io/library/caddy:2
|
||||
ports:
|
||||
- "80:80"
|
||||
depends_on:
|
||||
@ -52,7 +52,7 @@ services:
|
||||
|
||||
# --- Redis
|
||||
redis:
|
||||
image: bitnami/redis:7.2
|
||||
image: docker.io/bitnami/redis:7.2
|
||||
environment:
|
||||
- REDIS_PASSWORD=${REDIS_PASSWORD}
|
||||
ports:
|
||||
|
@ -44,7 +44,7 @@ return [
|
||||
'account_setup.name' => 'Enter your name',
|
||||
'account_setup.email' => 'Enter your email address',
|
||||
'account_setup.password' => 'Enter a strong password',
|
||||
'account_setup.password_requirements' => 'Minimum length: 10 characters',
|
||||
'account_setup.password_requirements' => 'Minimum length: 8 characters',
|
||||
'account_setup.password_confirmed' => 'Confirm your password',
|
||||
'account_setup.create' => 'Create account',
|
||||
|
||||
|
@ -11,6 +11,7 @@ return [
|
||||
'logout' => 'Se déconnecter',
|
||||
'remember_me' => 'Se rappeler de moi',
|
||||
'go_to_dashboard' => 'Aller au Tableau de bord',
|
||||
'dashboard' => 'Accueil',
|
||||
'system_logs' => 'Journaux Système',
|
||||
|
||||
'reset_password' => 'Réinitialiser le Mot de passe',
|
||||
|
@ -25,6 +25,7 @@ return [
|
||||
'order_by.random' => 'Aléatoire',
|
||||
|
||||
'no_results' => 'Aucun résultat trouvé.',
|
||||
'results_for' => 'Résultats de la recherche pour',
|
||||
|
||||
'validation_query_missing' => 'Vous devez soit entrer une requête de recherche, soit sélectionner une liste, une étiquette ou activer la recherche de liens cassés.',
|
||||
];
|
||||
|
@ -11,6 +11,7 @@ return [
|
||||
'intro.step2' => 'Configurez une base de données et vérifiez si la connexion est réussie.',
|
||||
'intro.step3' => 'Créez votre compte utilisateur.',
|
||||
|
||||
'setup_requirements' => 'Configuration requise',
|
||||
'check_requirements' => 'Vérifier Prérequis',
|
||||
'requirements.php_version' => 'Version de PHP >= 7.4.0',
|
||||
'requirements.extension_bcmath' => 'Module PHP : BCMath',
|
||||
@ -18,7 +19,7 @@ return [
|
||||
'requirements.extension_json' => 'Module PHP : JSON',
|
||||
'requirements.extension_mbstring' => 'Module PHP : Mbstring',
|
||||
'requirements.extension_openssl' => 'Module PHP : OpenSSL',
|
||||
'requirements.extension_pdo_mysql' => 'Module PHP : PDO MySQL',
|
||||
'requirements.extension_pdo_mysql' => 'Extension PHP : PDO MySQL',
|
||||
'requirements.extension_tokenizer' => 'Module PHP : Tokenizer',
|
||||
'requirements.extension_xml' => 'Module PHP : XML',
|
||||
'requirements.env_writable' => 'Le fichier .env est présent et accessible en écriture',
|
||||
|
27
lang/ja_JP/auth.php
Normal file
27
lang/ja_JP/auth.php
Normal file
@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used during authentication for various
|
||||
| messages that we need to display to the user. You are free to modify
|
||||
| these language lines according to your application's requirements.
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => '資格情報が記録と一致しません。',
|
||||
'throttle' => 'ログイン試行回数が多すぎます。:seconds 秒後にもう一度お試しください。',
|
||||
|
||||
'confirm_title' => '確認が必要です',
|
||||
'confirm' => '現在のパスワードを使用してこの操作を確認してください。',
|
||||
'confirm_action' => 'アクションの確認',
|
||||
|
||||
'two_factor' => '2要素認証',
|
||||
'two_factor_check' => '2段階認証アプリに表示されているワンタイムパスワードを入力してください。',
|
||||
'two_factor_with_recovery' => 'リカバリーコードで認証',
|
||||
|
||||
];
|
10
lang/ja_JP/export.php
Normal file
10
lang/ja_JP/export.php
Normal file
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
return [
|
||||
'export' => 'エクスポート',
|
||||
'start_export_html' => 'HTMLとしてエクスポート',
|
||||
'start_export_csv' => 'CSVとしてエクスポート',
|
||||
|
||||
'export_help' => 'エクスポートを実行すると、すべてのブックマークが一般的なブックマーク互換ファイル、または必要に応じてCSVファイルで保存されます。',
|
||||
|
||||
'export_csv_error' => 'CSVファイルの生成中にエラーが発生しました。詳細はログファイルを確認してください。',
|
||||
];
|
14
lang/ja_JP/import.php
Normal file
14
lang/ja_JP/import.php
Normal file
@ -0,0 +1,14 @@
|
||||
<?php
|
||||
return [
|
||||
'import' => 'インポート',
|
||||
'start_import' => 'インポートを開始',
|
||||
'import_running' => 'インポート中...',
|
||||
'import_file' => 'インポートするファイル',
|
||||
|
||||
'import_help' => 'ここに既存のブラウザブックマークをインポートすることができます。通常、ブックマークはブラウザによって .html ファイルとしてエクスポートされます。ここでファイルを選択してインポートを開始します。<br>ブックマークの数によっては、このプロセスに時間がかかります。',
|
||||
|
||||
'import_networkerror' => 'ブックマークのインポート中に問題が発生しました。詳細についてはブラウザのコンソールを確認するか、アプリケーションログを参照してください。',
|
||||
'import_error' => 'ブックマークのインポート中に問題が発生しました。アプリケーションログを参照してください。',
|
||||
'import_empty' => 'ブックマークをインポートできませんでした。アップロードされたファイルが破損しているか空です。',
|
||||
'import_successfully' => ':imported 件のリンクがインポートされました。:skipped 件のリンクがスキップされました。',
|
||||
];
|
69
lang/ja_JP/link.php
Normal file
69
lang/ja_JP/link.php
Normal file
@ -0,0 +1,69 @@
|
||||
<?php
|
||||
return [
|
||||
'link' => 'リンク',
|
||||
'links' => 'リンク',
|
||||
'all_links' => 'すべてのリンク',
|
||||
'recent_links' => '最近のリンク',
|
||||
'no_links' => 'リンクなし',
|
||||
|
||||
'add' => 'リンクを追加',
|
||||
'add_quick' => 'リンクをクイック追加',
|
||||
'show' => 'リンクを表示',
|
||||
'details' => 'リンクの詳細',
|
||||
'edit' => 'リンクを編集',
|
||||
'update' => 'リンクを更新',
|
||||
'delete' => 'リンクを削除',
|
||||
|
||||
'private' => '非公開リンク',
|
||||
|
||||
'history' => '履歴',
|
||||
'history_added' => ':fieldname に <code>:newvalue</code> を追加しました。',
|
||||
'history_changed' => ':fieldname を <code>:oldvalue</code> から <code>:newvalue</code> に変更しました。',
|
||||
'history_removed' => ':fieldname に <code>:newvalue</code> を追加しました。',
|
||||
'history_deleted' => 'リンクが削除されました',
|
||||
'history_restored' => 'リンクが復元されました',
|
||||
'history_created' => 'リンクが作成されました',
|
||||
|
||||
'url' => 'URL',
|
||||
'title' => 'タイトル',
|
||||
'description' => '概要',
|
||||
'revtags' => 'タグ',
|
||||
'revlists' => 'リスト',
|
||||
'is_private' => '非公開ステータス',
|
||||
|
||||
'status' => 'ステータス',
|
||||
'stati' => [
|
||||
'1' => '作動中',
|
||||
'2' => '移動済み',
|
||||
'3' => '破損',
|
||||
],
|
||||
|
||||
'author' => '作成: :user',
|
||||
|
||||
'external_link' => '外部リンク',
|
||||
'wayback' => 'リンクアーカイブ @ Wayback Machine',
|
||||
|
||||
'check_disable' => 'チェックを無効化',
|
||||
'check_disabled' => 'チェックは無効です',
|
||||
'check_enable' => 'チェックを有効化',
|
||||
'check_enabled' => 'チェックは有効です',
|
||||
|
||||
'status_is_broken' => '破損としてマーク',
|
||||
'status_mark_working' => '作動中としてマーク',
|
||||
|
||||
'added_successfully' => 'リンクの追加に成功しました。',
|
||||
'added_connection_error' => 'リンクは追加されましたが、URLにアクセスしようとしたときに接続エラーが発生しました。詳細はログで確認できます。',
|
||||
'added_request_error' => 'リンクは追加されましたが、URLにアクセスしようとしたときに接続エラーが発生しました。例えば無効な証明書などです。詳細はログで確認できます。',
|
||||
'updated_successfully' => 'リンクの更新に成功しました。',
|
||||
'deleted_successfully' => 'リンクの削除に成功しました。',
|
||||
'deletion_error' => 'リンクを削除できませんでした。',
|
||||
|
||||
'duplicates_found' => 'LinkAceは送信されたURLと重複している可能性があるものを見つけました。',
|
||||
'existing_found' => 'そのURLのリンクはすでに存在します。',
|
||||
|
||||
'notifications.linkcheck.errors' => 'LinkAceはあなたのリンクを確認中にエラーを見つけました。',
|
||||
'notifications.linkcheck.errors.moved' => '⚠️ 次のリンクが新しい場所に移動しました:',
|
||||
'notifications.linkcheck.errors.broken' => '🚫 次のリンクは到達できないか、エラーを返しています:',
|
||||
|
||||
'happy_bookmarking' => 'ブックマークをお楽しみください',
|
||||
];
|
55
lang/ja_JP/linkace.php
Normal file
55
lang/ja_JP/linkace.php
Normal file
@ -0,0 +1,55 @@
|
||||
<?php
|
||||
return [
|
||||
'linkace' => 'LinkAce',
|
||||
|
||||
'user' => 'ユーザー',
|
||||
'username' => 'ユーザー名',
|
||||
'email' => 'Eメール',
|
||||
'password' => 'パスワード',
|
||||
'password_confirm' => 'パスワードの確認',
|
||||
'login' => 'ログイン',
|
||||
'logout' => 'ログアウト',
|
||||
'remember_me' => 'ログインを維持',
|
||||
'go_to_dashboard' => 'ダッシュボードに移動',
|
||||
'dashboard' => 'ダッシュボード',
|
||||
'system_logs' => 'システムログ',
|
||||
|
||||
'reset_password' => 'パスワードを再設定',
|
||||
'send_reset_email' => 'パスワード再設定リンクを送信',
|
||||
'forgot_password_link' => 'パスワードを忘れてしまいましたか? <a href=":reset_url">ここで再設定してください</a>',
|
||||
|
||||
'added' => '追加',
|
||||
'added_at' => '追加日時',
|
||||
'updated_at' => '更新日時',
|
||||
'last_update' => '最終更新',
|
||||
'deleted_at' => '削除日時',
|
||||
|
||||
'add' => '追加',
|
||||
'show' => '表示',
|
||||
'edit' => '編集',
|
||||
'update' => '更新',
|
||||
'delete' => '削除',
|
||||
|
||||
'menu' => 'メニュー',
|
||||
'entries' => '項目',
|
||||
'feed' => 'フィード',
|
||||
|
||||
'continue_adding' => '編集を継続',
|
||||
|
||||
'private' => '非公開',
|
||||
'is_private' => '非公開',
|
||||
|
||||
'yes' => 'はい',
|
||||
'no' => 'いいえ',
|
||||
'more' => 'さらに表示',
|
||||
|
||||
'no_results_found' => ':model が見つかりません。',
|
||||
|
||||
'bookmarklet_close' => 'このブックマークレットウィンドウは <span class="bm-timer">5</span> 秒で自動的に閉じます。',
|
||||
'open_linkace' => 'LinkAceを開く',
|
||||
|
||||
'demo_login_hint' => 'すぐにログインできます。このデモは2時間ごとに初期化されますのでご注意ください。',
|
||||
|
||||
'project_of' => 'Linkace is a project by',
|
||||
'version' => '現在のバージョン: :version',
|
||||
];
|
31
lang/ja_JP/list.php
Normal file
31
lang/ja_JP/list.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
return [
|
||||
'list' => 'リスト',
|
||||
'lists' => 'リスト',
|
||||
'all_lists' => 'すべてのリスト',
|
||||
'recent_lists' => '最近のリスト',
|
||||
|
||||
'add' => 'リストを追加',
|
||||
'show' => 'リストを表示',
|
||||
'edit' => 'リストを編集',
|
||||
'update' => 'リストを更新',
|
||||
'delete' => 'リストを削除',
|
||||
|
||||
'filter_lists' => 'リストをフィルター...',
|
||||
|
||||
'private' => '非公開リスト',
|
||||
|
||||
'name' => 'リスト名',
|
||||
'description' => 'リストの概要',
|
||||
|
||||
'author' => '作成 :user',
|
||||
|
||||
'no_lists' => 'リストなし',
|
||||
|
||||
'number_links' => ':number 個のリンクがこのリストにあります|:number 個のリンクがこのリストにあります',
|
||||
|
||||
'added_successfully' => 'リストの追加に成功しました。',
|
||||
'updated_successfully' => 'リストの更新に成功しました。',
|
||||
'deleted_successfully' => 'リストの削除に成功しました。',
|
||||
'deletion_error' => 'リストを削除できませんでした。',
|
||||
];
|
20
lang/ja_JP/note.php
Normal file
20
lang/ja_JP/note.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
return [
|
||||
'note' => 'ノート',
|
||||
'notes' => 'ノート',
|
||||
|
||||
'add' => 'ノートを追加',
|
||||
'show' => 'ノートの表示',
|
||||
'edit' => 'ノートを編集',
|
||||
'update' => 'ノートを更新',
|
||||
'delete' => 'ノートを削除',
|
||||
|
||||
'private' => '非公開ノート',
|
||||
|
||||
'note_content' => 'ノートコンテンツ',
|
||||
|
||||
'added_successfully' => 'ノートの追加に成功しました。',
|
||||
'updated_successfully' => 'ノートの更新に成功しました。',
|
||||
'deleted_successfully' => 'ノートの削除に成功しました。',
|
||||
'deletion_error' => 'ノートを削除できませんでした。',
|
||||
];
|
19
lang/ja_JP/pagination.php
Normal file
19
lang/ja_JP/pagination.php
Normal file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Pagination Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used by the paginator library to build
|
||||
| the simple pagination links. You are free to change them to anything
|
||||
| you want to customize your views to better match your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'previous' => '« 前へ',
|
||||
'next' => '次へ »',
|
||||
|
||||
];
|
22
lang/ja_JP/passwords.php
Normal file
22
lang/ja_JP/passwords.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are the default lines which match reasons
|
||||
| that are given by the password broker for a password update attempt
|
||||
| has failed, such as for an invalid token or invalid new password.
|
||||
|
|
||||
*/
|
||||
|
||||
'password' => 'パスワードは6文字以上で、確認フィールドと一致している必要があります。',
|
||||
'reset' => 'パスワードが再設定されました!',
|
||||
'sent' => 'メールアドレスのアカウントが存在していた場合、パスワード再設定リンクをメールで送信しました。',
|
||||
'token' => 'このパスワード再設定トークンは無効です。',
|
||||
'user' => "このメールアドレスに一致するユーザーを見つけることが出来ませんでした。",
|
||||
|
||||
];
|
20
lang/ja_JP/placeholder.php
Normal file
20
lang/ja_JP/placeholder.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
return [
|
||||
'username' => 'johndoe',
|
||||
'email' => 'john.doe@example.com',
|
||||
'password' => 'パスワード',
|
||||
'password_confirmed' => 'パスワードの確認',
|
||||
|
||||
'link_url' => 'https://github.com/Kovah/LinkAce',
|
||||
'link_title' => 'ウェブサイトの題名',
|
||||
|
||||
'list_select' => 'リストを選択',
|
||||
'tags_select' => 'いくつかのタグを選択',
|
||||
|
||||
'list_name' => 'リストの名前',
|
||||
'tag_name' => 'タグの名前',
|
||||
|
||||
'two_factor_otp' => 'ワンタイムパスワード',
|
||||
'two_factor_recovery_code' => 'リカバリーコード',
|
||||
|
||||
];
|
31
lang/ja_JP/search.php
Normal file
31
lang/ja_JP/search.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
return [
|
||||
'search' => '検索',
|
||||
'results' => '結果',
|
||||
|
||||
'filter_by_list' => 'リストでフィルター',
|
||||
'filter_by_tag' => 'タグでフィルター',
|
||||
'query' => '検索…',
|
||||
'search_title' => 'タイトルを検索',
|
||||
'search_description' => '概要を検索',
|
||||
'private_only' => '非公開リンクのみ',
|
||||
'broken_links' => '破損リンクのみ',
|
||||
'empty_tags' => 'タグを含めない',
|
||||
'empty_lists' => 'リストを含めない',
|
||||
|
||||
'order_by' => '並び替え',
|
||||
'order_by.title:asc' => 'タイトル A-Z',
|
||||
'order_by.title:desc' => 'タイトル Z-A',
|
||||
'order_by.url:asc' => 'URL A-Z',
|
||||
'order_by.url:desc' => 'URL Z-A',
|
||||
'order_by.created_at:asc' => '古い順',
|
||||
'order_by.created_at:desc' => '新しい順',
|
||||
'order_by.number_links:asc' => '最少リンク',
|
||||
'order_by.number_links:desc' => '最多リンク',
|
||||
'order_by.random' => 'ランダム',
|
||||
|
||||
'no_results' => '結果が見つかりませんでした。',
|
||||
'results_for' => '検索結果',
|
||||
|
||||
'validation_query_missing' => '検索クエリを入力するか、リストもしくはタグを選択するか、破損リンクの検索を有効にする必要があります。',
|
||||
];
|
106
lang/ja_JP/settings.php
Normal file
106
lang/ja_JP/settings.php
Normal file
@ -0,0 +1,106 @@
|
||||
<?php
|
||||
return [
|
||||
'settings' => '設定',
|
||||
'user_settings' => 'ユーザー設定',
|
||||
'account_settings' => 'アカウント設定',
|
||||
'app_settings' => 'アプリケーション設定',
|
||||
'system_settings' => 'システム設定',
|
||||
'guest_settings' => 'ゲスト設定',
|
||||
|
||||
'language' => '言語',
|
||||
'timezone' => 'タイムゾーン',
|
||||
'date_format' => '日付書式',
|
||||
'time_format' => '時刻形式',
|
||||
'listitem_count' => 'リスト内のアイテム数',
|
||||
|
||||
'links_new_tab' => '外部リンクを新しいタブで開く',
|
||||
|
||||
'markdown_for_text' => '説明とメモのマークダウンを有効にする',
|
||||
|
||||
'privacy' => 'プライバシー',
|
||||
'links_private_default' => 'デフォルトで非公開リンクにする',
|
||||
'links_private_default_help' => 'これを有効にすると、すべての新しいリンクがデフォルトで非公開になります',
|
||||
'notes_private_default' => 'デフォルトで非公開ノートにする',
|
||||
'notes_private_default_help' => 'これを有効にすると、すべての新しいノートがデフォルトで非公開になります',
|
||||
'tags_private_default' => 'デフォルトで非公開タグにする',
|
||||
'tags_private_default_help' => 'これを有効にすると、すべての新しいタグがデフォルトで非公開になります',
|
||||
'lists_private_default' => 'デフォルトで非公開リストにする',
|
||||
'lists_private_default_help' => 'これを有効にすると、すべての新しいリストがデフォルトで非公開になります',
|
||||
|
||||
'archive_backups' => 'Wayback Machine バックアップ',
|
||||
'archive_backups_help' => '有効にすると、LinkAceは<a href="https://archive.org/">Wayback Machine</a>にリンクをバックアップするよう要求します。Wayback Machineは非営利団体であるInternet Archiveによって運営されています。Internet Archiveへの<a href="https://archive.org/donate/">寄付</a>をご検討ください。',
|
||||
'archive_backups_enabled' => 'バックアップを有効化',
|
||||
'archive_backups_enabled_help' => '有効にすると、公開リンクはインターネットアーカイブによって保存されます。',
|
||||
'archive_private_backups_enabled' => '非公開リンクのバックアップを有効化',
|
||||
'archive_private_backups_enabled_help' => '有効にした場合、非公開リンクも保存されます。バックアップを有効にする必要があります。',
|
||||
|
||||
'display_mode' => 'リンクの表示方法',
|
||||
'display_mode_list_detailed' => '詳細なリスト表示',
|
||||
'display_mode_list_simple' => '詳細なリスト表示',
|
||||
'display_mode_cards' => '簡潔なカード表示',
|
||||
'display_mode_cards_detailed' => '詳細なカード表示',
|
||||
|
||||
'sharing' => 'リンク共有',
|
||||
'sharing_help' => 'リンクに表示したいすべてのサービスを有効にし、ワンクリックで簡単に共有できるようにします。',
|
||||
'sharing_toggle' => 'すべてのオン/オフを切り替える',
|
||||
|
||||
'darkmode' => 'ダークモード',
|
||||
'darkmode_help' => '永続的にオンにするか、デバイス設定に従い自動的にオンにするか選択できます。(<small>Check <a href="https://caniuse.com/#search=prefers-color-scheme">ここ</a>であなたのブラウザが自動検出に対応しているか確認できます</small>)',
|
||||
'darkmode_disabled' => '無効',
|
||||
'darkmode_auto' => '自動',
|
||||
'darkmode_permanent' => '永続的',
|
||||
|
||||
'save_settings' => '設定を保存',
|
||||
'settings_saved' => '設定の更新に成功しました!',
|
||||
|
||||
'bookmarklet' => 'ブックマークレット',
|
||||
'bookmarklet_button' => 'ブックマークにドラッグして追加するか、右クリックしてブックマークとして保存してください。',
|
||||
'bookmarklet_help' => 'このブックマークレットをブラウザに追加すると、LinkAceを手動で開かなくても訪問したサイトからリンクをすばやく追加できます。',
|
||||
|
||||
'change_password' => 'パスワードを変更',
|
||||
'old_password' => '古いパスワード',
|
||||
'new_password' => '新しいパスワード',
|
||||
'new_password2' => '新しいパスワードを再入力',
|
||||
'password_updated' => 'パスワードの変更に成功しました!',
|
||||
'old_password_invalid' => '古いパスワードが正しくありません!',
|
||||
|
||||
'two_factor_auth' => '2要素認証',
|
||||
'two_factor_enable' => '2要素認証を有効化',
|
||||
'two_factor_disable' => '2要素認証を無効化',
|
||||
'two_factor_setup_app' => '2要素認証が有効になりました。次のQRコードをスキャンして認証デバイスを設定してください。',
|
||||
'two_factor_setup_url' => 'QRコードが動作しませんか?このURLを直接使用することもできます。',
|
||||
'two_factor_recovery_codes' => 'これらのリカバリーコードを安全なパスワードマネージャーに保存してください。2要素認証デバイスが失われた場合に、あなたのアカウントへのアクセスを回復するために使用できます。',
|
||||
'two_factor_recovery_codes_view' => 'リカバリーコードを表示',
|
||||
'two_factor_regenerate_recovery_codes' => '新しいリカバリーコードを生成する',
|
||||
|
||||
'api_token' => 'APIトークン',
|
||||
'api_token_generate' => 'トークンを生成',
|
||||
'api_token_generate_confirm' => '本当に新しいトークンを生成しますか?',
|
||||
'api_token_help' => 'APIトークンは他のアプリケーションやスクリプトからLinkAceにアクセスするために使用できます。',
|
||||
'api_token_generate_info' => '注意:すでにAPIトークンを持っている場合、新しいトークンを生成すると既存のAPI連携が壊れます!',
|
||||
'api_token_generate_failure' => '新しいAPIトークンを生成できませんでした。ブラウザのコンソールとアプリケーションのログを確認してください。',
|
||||
|
||||
'sys_page_title' => 'ページタイトル',
|
||||
'sys_guest_access' => 'ゲストアクセスを有効化',
|
||||
'sys_guest_access_help' => '有効にすると、ゲストは非公開ではないすべてのリンクを見ることができます。',
|
||||
'sys_custom_header_content' => 'カスタムヘッダーコンテンツ',
|
||||
'sys_custom_header_content_help' => 'ここに入力したコンテンツはすべてのLinkAceサイトの </head> タグの前に配置されます。 分析やカスタムスクリプトを配置するのに便利です。注意:コンテンツはエスケープされていないと、サイトが壊れる可能性があります!',
|
||||
|
||||
'cron_token' => 'Cronトークン',
|
||||
'cron_token_generate' => 'トークンを生成',
|
||||
'cron_token_generate_confirm' => '本当に新しいトークンを生成しますか?',
|
||||
'cron_token_help' => 'cronトークンは、デッドリンクの有無やバックアップの実行を確認するcronサービスを実行するために必要です。',
|
||||
'cron_token_url' => '次のURLにあなたのcronを向けてください:<span class="cron-token-url">:route</span>',
|
||||
'cron_token_generate_info' => '注意:すでにcronトークンを持っている場合、新しいトークンを生成すると既存のcronジョブが壊れます!',
|
||||
'cron_token_generate_failure' => '新しいAPIトークンを生成できませんでした。ブラウザのコンソールとアプリケーションのログを確認してください。',
|
||||
'cron_token_auth_failure' => '指定されたcronトークンは無効です',
|
||||
'cron_execute_successful' => 'Cronが正常に実行されました',
|
||||
|
||||
'update_check' => '更新確認',
|
||||
'update_check_running' => '更新を確認しています…',
|
||||
'update_check_version_found' => '更新が見つかりました。バージョン #VERSION# が利用可能です。',
|
||||
'update_check_success' => '更新はありませんでした。',
|
||||
'update_check_failed' => '更新を確認できませんでした。',
|
||||
|
||||
'guest_settings_info' => 'ゲストアクセスが有効になっている場合、以下の設定はあなたのサイトを訪問したゲストに適用されます。',
|
||||
];
|
53
lang/ja_JP/setup.php
Normal file
53
lang/ja_JP/setup.php
Normal file
@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'setup' => 'セットアップ',
|
||||
'continue' => '続行',
|
||||
'try_again' => '再試行',
|
||||
|
||||
'welcome' => 'LinkAceのセットアップへようこそ',
|
||||
'intro' => '次の手順では、LinkAceを使用できるように設定します。',
|
||||
'intro.step1' => 'すべての要件を満たしているか確認します。',
|
||||
'intro.step2' => 'データベースをセットアップし、接続に成功するか確認します。',
|
||||
'intro.step3' => 'ユーザーアカウントを作成',
|
||||
|
||||
'setup_requirements' => 'セットアップ要件',
|
||||
'check_requirements' => '要件の確認',
|
||||
'requirements.php_version' => 'PHPバージョン >= 7.4.0',
|
||||
'requirements.extension_bcmath' => 'PHP拡張モジュール:BCMath',
|
||||
'requirements.extension_ctype' => 'PHP拡張モジュール:Ctype',
|
||||
'requirements.extension_json' => 'PHP拡張モジュール:JSON',
|
||||
'requirements.extension_mbstring' => 'PHP拡張モジュール:Mbstring',
|
||||
'requirements.extension_openssl' => 'PHP拡張モジュール:OpenSSL',
|
||||
'requirements.extension_pdo_mysql' => 'PHP拡張モジュール:PDO MySQL',
|
||||
'requirements.extension_tokenizer' => 'PHP拡張モジュール:Tokenizer',
|
||||
'requirements.extension_xml' => 'PHP拡張モジュール:XML',
|
||||
'requirements.env_writable' => '.envファイルが存在し、書き込み可能',
|
||||
'requirements.storage_writable' => '/storageおよび/storage/logsディレクトリが書き込み可能',
|
||||
|
||||
'database_configuration' => 'データベース構成',
|
||||
'database_configure' => 'データベースを構成',
|
||||
'database.intro' => '.envファイルにデータベースの情報を入力している場合、入力フィールドに事前入力されています。それ以外の場合、データベースの情報を各フィールドに入力してください。',
|
||||
'database.config_error' => 'データベースを構成できませんでした。接続の詳細を確認してください。詳細:',
|
||||
'database.db_host' => 'データベースのホスト',
|
||||
'database.db_port' => 'データベースのポート',
|
||||
'database.db_name' => 'データベースの名前',
|
||||
'database.db_user' => 'データベースのユーザー名',
|
||||
'database.db_password' => 'データベースのパスワード',
|
||||
'database.complete_hint' => 'データベースの構成を保存し、アプリを使用するために準備するには数秒かかる場合がありますので、しばらくお待ちください。',
|
||||
|
||||
'database.data_present' => '注意!指定したデータベースからデータが見つかりました!そのデータベースのバックアップがあることを確認し、すべてのデータの削除を確認してください。',
|
||||
'database.overwrite_data' => 'すべてのデータを削除し、新しいLinkAceデータベースで上書きする必要があることを確認します。',
|
||||
|
||||
'account_setup' => 'アカウントのセットアップ',
|
||||
'account_setup.intro' => '開始する前に、ユーザーアカウントを作成する必要があります。',
|
||||
'account_setup.name' => '名前を入力',
|
||||
'account_setup.email' => 'メールアドレスを入力',
|
||||
'account_setup.password' => '強力なパスワードを入力',
|
||||
'account_setup.password_requirements' => '最小文字数:10文字',
|
||||
'account_setup.password_confirmed' => 'パスワードを再入力',
|
||||
'account_setup.create' => 'アカウントを作成',
|
||||
|
||||
'complete' => 'セットアップが完了しました!',
|
||||
'outro' => 'セットアップを完了し、LinkAceを使用できるようになりました!ログインしてすぐにブックマークを開始できます。',
|
||||
];
|
33
lang/ja_JP/sharing.php
Normal file
33
lang/ja_JP/sharing.php
Normal file
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
return [
|
||||
'sharetext' => 'この素晴らしいリンクを見つけました。確認してください:#URL#',
|
||||
'subject' => 'このクールなリンクを見てください',
|
||||
'share' => ':service 経由でリンクを共有',
|
||||
'share_link' => 'リンクを共有',
|
||||
'service' => [
|
||||
'email' => 'Eメール',
|
||||
'print' => '印刷',
|
||||
'facebook' => 'Facebook',
|
||||
'twitter' => 'Twitter',
|
||||
'reddit' => 'Reddit',
|
||||
'pinterest' => 'Pinterest',
|
||||
'whatsapp' => 'Whatsapp',
|
||||
'telegram' => 'Telegram',
|
||||
'fb-messenger' => 'Facebook Messenger',
|
||||
'wechat' => 'WeChat',
|
||||
'sms' => 'SMS',
|
||||
'slack' => 'Slack',
|
||||
'skype' => 'Skype',
|
||||
'hackernews' => 'Hacker News',
|
||||
'discord' => 'Discord',
|
||||
'mastodon' => 'Mastodon',
|
||||
'pocket' => 'Pocket',
|
||||
'flipboard' => 'Flipboard',
|
||||
'evernote' => 'Evernote',
|
||||
'trello' => 'Trello',
|
||||
'buffer' => 'Buffer',
|
||||
'tumblr' => 'Tumblr',
|
||||
'xing' => 'Xing',
|
||||
'linkedin' => 'LinkedIn',
|
||||
],
|
||||
];
|
12
lang/ja_JP/stats.php
Normal file
12
lang/ja_JP/stats.php
Normal file
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'stats' => '統計',
|
||||
'total_links' => '合計リンク数',
|
||||
'total_lists' => '合計リスト数',
|
||||
'total_tags' => '合計タグ数',
|
||||
'total_notes' => '合計ノート数',
|
||||
'total_broken_links' => '破損リンク数',
|
||||
|
||||
];
|
28
lang/ja_JP/tag.php
Normal file
28
lang/ja_JP/tag.php
Normal file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
return [
|
||||
'tag' => 'タグ',
|
||||
'tags' => 'タグ',
|
||||
'all_tags' => 'すべてのタグ',
|
||||
'recent_tags' => '最近のタグ',
|
||||
|
||||
'add' => 'タグを追加',
|
||||
'show' => 'タグを表示',
|
||||
'edit' => 'タグを編集',
|
||||
'update' => 'タグを更新',
|
||||
'delete' => 'タグを削除',
|
||||
|
||||
'filter_tags' => 'タグをフィルター...',
|
||||
|
||||
'private' => '非公開タグ',
|
||||
|
||||
'name' => 'タグ名',
|
||||
|
||||
'author' => '作成 :user',
|
||||
|
||||
'no_tags' => 'タグなし',
|
||||
|
||||
'added_successfully' => 'タグの追加に成功しました。',
|
||||
'updated_successfully' => 'タグの更新に成功しました。',
|
||||
'deleted_successfully' => 'タグの削除に成功しました。',
|
||||
'deletion_error' => 'タグを削除できませんでした。',
|
||||
];
|
31
lang/ja_JP/trash.php
Normal file
31
lang/ja_JP/trash.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'trash' => 'ごみ箱',
|
||||
|
||||
'deleted_links' => 'ごみ箱にあるリンク',
|
||||
'deleted_lists' => 'ごみ箱にあるリスト',
|
||||
'deleted_tags' => 'ごみ箱にあるタグ',
|
||||
'deleted_notes' => 'ごみ箱にあるノート',
|
||||
|
||||
'restore' => '項目を復元',
|
||||
|
||||
'clear_trash' => 'ごみ箱を空にする',
|
||||
'delete_warning' => '完全に削除された項目は復元できません!',
|
||||
'delete_no_entries' => '削除する項目がありません。',
|
||||
|
||||
'delete_success.links' => 'すべてのリンクを完全に削除しました。',
|
||||
'delete_success.lists' => 'すべてのリストを完全に削除しました。',
|
||||
'delete_success.tags' => 'すべてのタグを完全に削除しました。',
|
||||
'delete_success.notes' => 'すべてのノートを完全に削除しました。',
|
||||
|
||||
'restore.link' => 'リンクをごみ箱から復元しました。',
|
||||
'restore.list' => 'リストをごみ箱から復元しました。',
|
||||
'restore.tag' => 'タグをごみ箱から復元しました。',
|
||||
'restore.note' => 'ノートをごみ箱から復元しました。',
|
||||
|
||||
'restore.not_found' => '復元するアイテムが見つかりませんでした。',
|
||||
'restore.not_allowed' => 'このアイテムを復元する権限がありません。',
|
||||
|
||||
];
|
10
lang/ja_JP/user.php
Normal file
10
lang/ja_JP/user.php
Normal file
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
return [
|
||||
'user' => 'ユーザー',
|
||||
'users' => 'ユーザー',
|
||||
|
||||
'username' => 'ユーザー名',
|
||||
'email' => 'Eメール',
|
||||
|
||||
'hello' => 'こんにちは、:user!',
|
||||
];
|
146
lang/ja_JP/validation.php
Normal file
146
lang/ja_JP/validation.php
Normal file
@ -0,0 +1,146 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines contain the default error messages used by
|
||||
| the validator class. Some of these rules have multiple versions such
|
||||
| as the size rules. Feel free to tweak each of these messages here.
|
||||
|
|
||||
*/
|
||||
|
||||
'accepted' => ':attribute は承認されている必要があります。',
|
||||
'active_url' => ':attribute は有効なURLではありません。',
|
||||
'after' => ':attribute は :date より後の日付にしてください。',
|
||||
'after_or_equal' => ':attribute は :date と同じか後の日付にしてください。',
|
||||
'alpha' => ':attribute にはアルファベットのみ使用できます。',
|
||||
'alpha_dash' => ':attribute には英数字とハイフン、アンダースコアが使用できます。',
|
||||
'alpha_num' => ':attribute には英数字のみ使用できます。',
|
||||
'array' => ':attribute は配列にしてください。',
|
||||
'before' => ':attribute は :date より前の日付にしてください。',
|
||||
'before_or_equal' => ':attribute は :date と同じか前の日付にしてください。',
|
||||
'between' => [
|
||||
'numeric' => ':attribute は :min から :max までの間で指定してください。',
|
||||
'file' => ':attribute は :min KB から :max KB までの間で指定してください。',
|
||||
'string' => ':attribute は :min 文字から :max 文字までの間で指定してください。',
|
||||
'array' => ':attribute は :min 個から :max 個までの間で指定してください。',
|
||||
],
|
||||
'boolean' => ':attribute は true もしくは false を指定してください。',
|
||||
'confirmed' => ':attribute が一致しません。',
|
||||
'date' => ':attribute は無効な日付です。',
|
||||
'date_format' => ':attribute は :format 形式と一致しません。',
|
||||
'different' => ':attribute と :other は異なっている必要があります。',
|
||||
'digits' => ':attribute は :digits 桁にしてください。',
|
||||
'digits_between' => ':attribute は :min 桁から :max 桁までの間で指定してください。',
|
||||
'dimensions' => ':attribute の画像サイズが正しくありません。',
|
||||
'distinct' => ':attribute フィールドに重複する値があります。',
|
||||
'email' => ':attribute は有効なメールアドレスにしてください。',
|
||||
'exists' => '選択された :attribute は不正です。',
|
||||
'file' => ':attribute はファイルにしてください。',
|
||||
'filled' => ':attribute フィールドは空に出来ません。',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute は :value より大きい値にしてください。',
|
||||
'file' => ':attribute は :value KB より大きいサイズにしてください。',
|
||||
'string' => ':attribute は :value 文字より多くしてください。',
|
||||
'array' => ':attribute は :value 個より多くしてください。',
|
||||
],
|
||||
'gte' => [
|
||||
'numeric' => ':attribute は :value 以上にしてください。',
|
||||
'file' => ':attribute は :value KB 以上にしてください。',
|
||||
'string' => ':attribute は :value 文字以上にしてください。',
|
||||
'array' => ':attribute は :value 個以上にしてください。',
|
||||
],
|
||||
'image' => ':attribute は画像にしてください。',
|
||||
'in' => '選択された :attribute は不正です。',
|
||||
'in_array' => ':attribute フィールドが :other に存在しません。',
|
||||
'integer' => ':attribute は整数にしてください。',
|
||||
'ip' => ':attribute は有効なIPアドレスにしてください。',
|
||||
'ipv4' => ':attribute は有効なIPv4アドレスにしてください。',
|
||||
'ipv6' => ':attribute は有効なIPv6アドレスにしてください。',
|
||||
'json' => ':attribute は有効なJSON文字列にしてください。',
|
||||
'lt' => [
|
||||
'numeric' => ':attribute は :value 未満にしてください。',
|
||||
'file' => ':attribute は :value KB 未満にしてください。',
|
||||
'string' => ':attribute は :value 文字未満にしてください。',
|
||||
'array' => ':attribute は :value 個未満にしてください。',
|
||||
],
|
||||
'lte' => [
|
||||
'numeric' => ':attribute は :value 以下にしてください。',
|
||||
'file' => ':attribute は :value KB 以下にしてください。',
|
||||
'string' => ':attribute は :value 文字以下にしてください。',
|
||||
'array' => ':attribute には :value 以下にしてください。',
|
||||
],
|
||||
'max' => [
|
||||
'numeric' => ':attribute には :max 以下にしてください。',
|
||||
'file' => ':attribute は :max KB 以下にしてください。',
|
||||
'string' => ':attribute は :max 文字以下にしてください。',
|
||||
'array' => ':attribute には :max 個以下にしてください。',
|
||||
],
|
||||
'mimes' => ':attribute はファイルタイプ :values にしてください。',
|
||||
'mimetypes' => ':attribute はファイルタイプ :values にしてください。',
|
||||
'min' => [
|
||||
'numeric' => ':attribute は少なくとも :min 以上にしてください。',
|
||||
'file' => ':attribute は少なくとも :min KB 以上にしてください。',
|
||||
'string' => ':attribute は少なくとも :min 文字以上にしてください。',
|
||||
'array' => ':attribute は少なくとも :min 個以上にしてください。',
|
||||
],
|
||||
'not_in' => '選択された :attribute は不正です。',
|
||||
'not_regex' => ':attribute 形式は不正です。',
|
||||
'numeric' => ':attribute は数値にしてください。',
|
||||
'present' => ':attribute フィールドは必須です。',
|
||||
'regex' => ':attribute 形式は不正です。',
|
||||
'required' => ':attribute フィールドは必須です。',
|
||||
'required_if' => ':other が :value の場合、:attribute フィールドは必須です。',
|
||||
'required_unless' => ':other が :value 以外の場合、:attribute フィールドは必須です。',
|
||||
'required_with' => ':values が存在する場合、:attribute フィールドは必須です。',
|
||||
'required_with_all' => ':values が存在する場合、:attribute フィールドは必須です。',
|
||||
'required_without' => ':values が存在しない場合、:attribute フィールドは必須です。',
|
||||
'required_without_all' => ':values がすべて存在しない場合、:attribute フィールドは必須です。',
|
||||
'same' => ':attribute と :other は一致している必要があります。',
|
||||
'size' => [
|
||||
'numeric' => ':attribute は :size にしてください。',
|
||||
'file' => ':attribute は :size KB にしてください。',
|
||||
'string' => ':attribute は :size 文字にしてください。',
|
||||
'array' => ':attribute は :size 個にしてください。',
|
||||
],
|
||||
'string' => ':attribute は文字列にしてください。',
|
||||
'timezone' => ':attribute は有効なゾーンにしてください。',
|
||||
'unique' => ':attribute は既に使用されています。',
|
||||
'uploaded' => ':attribute のアップロードに失敗しました。',
|
||||
'url' => ':attribute 形式は不正です。',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify custom validation messages for attributes using the
|
||||
| convention "attribute.rule" to name the lines. This makes it quick to
|
||||
| specify a specific custom language line for a given attribute rule.
|
||||
|
|
||||
*/
|
||||
|
||||
'custom' => [
|
||||
'attribute-name' => [
|
||||
'rule-name' => 'カスタムメッセージ',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Attributes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used to swap attribute place-holders
|
||||
| with something more reader friendly such as E-Mail Address instead
|
||||
| of "email". This simply helps us make messages a little cleaner.
|
||||
|
|
||||
*/
|
||||
|
||||
'attributes' => [],
|
||||
|
||||
];
|
@ -11,6 +11,7 @@ return [
|
||||
'logout' => 'Logg av',
|
||||
'remember_me' => 'Husk meg',
|
||||
'go_to_dashboard' => 'Gå til dashbord',
|
||||
'dashboard' => 'Instrumentbord',
|
||||
'system_logs' => 'Systemlogg',
|
||||
|
||||
'reset_password' => 'Tilbakestill passord',
|
||||
|
@ -25,6 +25,7 @@ return [
|
||||
'order_by.random' => 'Tilfeldig',
|
||||
|
||||
'no_results' => 'Ingen resultater.',
|
||||
'results_for' => 'Søkeresultater for',
|
||||
|
||||
'validation_query_missing' => 'Du må enten skrive inn et søk, eller velge en liste, en etikket eller aktivere søk etter ødelagte lenker.',
|
||||
];
|
||||
|
@ -11,6 +11,7 @@ return [
|
||||
'intro.step2' => 'Opprett en database og kontroller om tilkoblingen er vellykket.',
|
||||
'intro.step3' => 'Opprett din brukerkonto.',
|
||||
|
||||
'setup_requirements' => 'Oppsettskrav',
|
||||
'check_requirements' => 'Kontroller kravene',
|
||||
'requirements.php_version' => 'PHP versjon >= 7.4.0',
|
||||
'requirements.extension_bcmath' => 'PHP utvidelse: BCMath',
|
||||
|
1813
package-lock.json
generated
1813
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "linkace",
|
||||
"version": "1.14.1",
|
||||
"version": "1.15.1",
|
||||
"description": "A small, selfhosted bookmark manager with advanced features, built with Laravel and Docker",
|
||||
"homepage": "https://github.com/Kovah/LinkAce",
|
||||
"repository": {
|
||||
@ -15,11 +15,11 @@
|
||||
"devDependencies": {
|
||||
"laravel-mix": "^6.0.31",
|
||||
"postcss": "^8.4.35",
|
||||
"sass": "^1.71.0",
|
||||
"sass": "^1.77.8",
|
||||
"sass-loader": "^14.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"bootstrap": "^5.2.3",
|
||||
"bootstrap": "^5.3.3",
|
||||
"tom-select": "^2.0.0"
|
||||
},
|
||||
"scripts": {
|
||||
|
@ -1,23 +1,18 @@
|
||||
# DOCKERFILE DEVELOPMENT
|
||||
# Installs MySQL Client for database exports, xDebug with PCov and Composer
|
||||
# Installs database clients for database exports, xDebug with PCov and Composer
|
||||
|
||||
FROM php:8.1.10-fpm
|
||||
FROM docker.io/library/php:8.1-fpm-alpine
|
||||
WORKDIR /app
|
||||
|
||||
RUN apt-get update && apt-get install -y \
|
||||
zip \
|
||||
git \
|
||||
mariadb-client \
|
||||
postgresql-client \
|
||||
sqlite3 \
|
||||
autoconf \
|
||||
build-essential \
|
||||
libpq-dev \
|
||||
libzip-dev
|
||||
|
||||
RUN pecl install xdebug pcov
|
||||
RUN docker-php-ext-install bcmath pdo_mysql pdo_pgsql zip
|
||||
RUN docker-php-ext-enable xdebug pcov
|
||||
# Install package and PHP dependencies
|
||||
RUN apk add --no-cache zip git mariadb-client postgresql-client postgresql-dev sqlite3 zip libzip-dev; \
|
||||
docker-php-ext-configure zip; \
|
||||
docker-php-ext-install bcmath pdo_mysql pdo_pgsql zip ftp; \
|
||||
docker-php-ext-enable xdebug pcov; \
|
||||
mkdir /ssl-certs; \
|
||||
docker-php-source delete; \
|
||||
rm -f /usr/src/php.tar.xz /usr/src/php.tar.xz.asc; \
|
||||
apk del --no-cache postgresql-dev
|
||||
|
||||
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
|
||||
|
||||
|
@ -1,12 +1,15 @@
|
||||
FROM php:8.3-fpm-alpine
|
||||
FROM docker.io/library/php:8.3-fpm-alpine
|
||||
|
||||
# Install package and PHP dependencies
|
||||
RUN apk add --no-cache mariadb-client postgresql-client libpq-dev sqlite zip libzip-dev supervisor \
|
||||
RUN apk add --no-cache mariadb-client postgresql-client postgresql-dev sqlite zip libzip-dev supervisor \
|
||||
&& docker-php-ext-configure zip; \
|
||||
&& docker-php-ext-install bcmath pdo_mysql pdo_pgsql zip ftp \
|
||||
&& mkdir /ssl-certs \
|
||||
&& mkdir /etc/supervisor.d \
|
||||
&& mkdir /etc/caddy \
|
||||
&& docker-php-source delete
|
||||
&& docker-php-source delete \
|
||||
&& rm -f /usr/src/php.tar.xz /usr/src/php.tar.xz.asc \
|
||||
&& apk del --no-cache postgresql-dev
|
||||
|
||||
# Copy Caddy executable
|
||||
COPY --from=caddy:2 /usr/bin/caddy /usr/bin/caddy
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
# ================================
|
||||
# PHP Dependency Setup
|
||||
FROM linkace/base-image:php-8.3-caddy AS builder
|
||||
FROM docker.io/linkace/base-image:php-8.3-caddy AS builder
|
||||
WORKDIR /app
|
||||
|
||||
# Pull composer and install required packages
|
||||
@ -38,7 +38,7 @@ RUN mv vendor/spatie/laravel-backup/resources/lang/de vendor/spatie/laravel-back
|
||||
|
||||
# ================================
|
||||
# Compile all assets
|
||||
FROM node:20 AS npm_builder
|
||||
FROM docker.io/library/node:20 AS npm_builder
|
||||
WORKDIR /srv
|
||||
|
||||
COPY ./resources/assets ./resources/assets
|
||||
@ -49,7 +49,7 @@ RUN npm run production
|
||||
|
||||
# ================================
|
||||
# Prepare the final image
|
||||
FROM linkace/base-image:php-8.3-caddy
|
||||
FROM docker.io/linkace/base-image:php-8.3-caddy
|
||||
WORKDIR /app
|
||||
USER www-data
|
||||
|
||||
|
@ -20,7 +20,7 @@ class ResetPasswordCommandTest extends TestCase
|
||||
->expectsOutput('A user with this email address could not be found!')
|
||||
->expectsQuestion('Please enter the user email address', 'test@linkace.org')
|
||||
->expectsQuestion('Please enter a new password for this user', 'test')
|
||||
->expectsOutput('The password must be at least 10 characters.')
|
||||
->expectsOutput('The password must be at least 8 characters.')
|
||||
->expectsQuestion('Please enter a new password for this user', 'longtestpassword')
|
||||
->expectsOutput('Password successfully changed. You can now login.')
|
||||
->assertExitCode(0);
|
||||
|
@ -150,6 +150,62 @@ class LinkApiTest extends ApiTestCase
|
||||
]);
|
||||
}
|
||||
|
||||
public function testCreateRequestWithList(): void
|
||||
{
|
||||
$list = LinkList::factory()->create(['name' => 'Test List 1']);
|
||||
|
||||
$response = $this->postJsonAuthorized('api/v1/links', [
|
||||
'url' => 'http://example.com',
|
||||
'title' => 'Search the Web',
|
||||
'description' => 'There could be a description here',
|
||||
'lists' => [$list->id],
|
||||
'tags' => [],
|
||||
'is_private' => false,
|
||||
'check_disabled' => false,
|
||||
]);
|
||||
|
||||
$response->assertOk()
|
||||
->assertJson([
|
||||
'url' => 'http://example.com',
|
||||
'lists' => [
|
||||
['name' => 'Test List 1'],
|
||||
],
|
||||
]);
|
||||
|
||||
$this->assertDatabaseHas('link_lists', [
|
||||
'list_id' => 1,
|
||||
'link_id' => 1,
|
||||
]);
|
||||
}
|
||||
|
||||
public function testCreateRequestWithTag(): void
|
||||
{
|
||||
$tag = Tag::factory()->create(['name' => 'a test 1']);
|
||||
|
||||
$response = $this->postJsonAuthorized('api/v1/links', [
|
||||
'url' => 'http://example.com',
|
||||
'title' => 'Search the Web',
|
||||
'description' => 'There could be a description here',
|
||||
'lists' => [],
|
||||
'tags' => [$tag->id],
|
||||
'is_private' => false,
|
||||
'check_disabled' => false,
|
||||
]);
|
||||
|
||||
$response->assertOk()
|
||||
->assertJson([
|
||||
'url' => 'http://example.com',
|
||||
'tags' => [
|
||||
['name' => 'a test 1'],
|
||||
],
|
||||
]);
|
||||
|
||||
$this->assertDatabaseHas('link_tags', [
|
||||
'tag_id' => 1,
|
||||
'link_id' => 1,
|
||||
]);
|
||||
}
|
||||
|
||||
public function testCreateRequestWithTagsAsString(): void
|
||||
{
|
||||
$this->postJsonAuthorized('api/v1/links', [
|
||||
|
Loading…
x
Reference in New Issue
Block a user