diff options
-rw-r--r-- | go.mod | 2 | ||||
-rw-r--r-- | go.sum | 4 | ||||
-rw-r--r-- | models/migrations/migrations.go | 4 | ||||
-rw-r--r-- | models/migrations/v1_25/main_test.go | 14 | ||||
-rw-r--r-- | models/migrations/v1_25/v321.go | 52 | ||||
-rw-r--r-- | models/migrations/v1_25/v321_test.go | 70 | ||||
-rw-r--r-- | models/packages/package_property.go | 2 | ||||
-rw-r--r-- | models/system/notice.go | 2 | ||||
-rw-r--r-- | options/locale/locale_ja-JP.ini | 63 | ||||
-rw-r--r-- | web_src/js/features/repo-issue.ts | 7 |
10 files changed, 214 insertions, 6 deletions
@@ -131,7 +131,7 @@ require ( mvdan.cc/xurls/v2 v2.6.0 strk.kbt.io/projects/go/libravatar v0.0.0-20191008002943-06d1c002b251 xorm.io/builder v0.3.13 - xorm.io/xorm v1.3.9 + xorm.io/xorm v1.3.10 ) require ( @@ -955,5 +955,5 @@ strk.kbt.io/projects/go/libravatar v0.0.0-20191008002943-06d1c002b251 h1:mUcz5b3 strk.kbt.io/projects/go/libravatar v0.0.0-20191008002943-06d1c002b251/go.mod h1:FJGmPh3vz9jSos1L/F91iAgnC/aejc0wIIrF2ZwJxdY= xorm.io/builder v0.3.13 h1:a3jmiVVL19psGeXx8GIurTp7p0IIgqeDmwhcR6BAOAo= xorm.io/builder v0.3.13/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= -xorm.io/xorm v1.3.9 h1:TUovzS0ko+IQ1XnNLfs5dqK1cJl1H5uHpWbWqAQ04nU= -xorm.io/xorm v1.3.9/go.mod h1:LsCCffeeYp63ssk0pKumP6l96WZcHix7ChpurcLNuMw= +xorm.io/xorm v1.3.10 h1:yR83hTT4mKIPyA/lvWFTzS35xjLwkiYnwdw0Qupeh0o= +xorm.io/xorm v1.3.10/go.mod h1:Lo7hmsFF0F0GbDE7ubX5ZKa+eCf0eCuiJAUG3oI5cxQ= diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index 176372486e..4f899453b5 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -24,6 +24,7 @@ import ( "code.gitea.io/gitea/models/migrations/v1_22" "code.gitea.io/gitea/models/migrations/v1_23" "code.gitea.io/gitea/models/migrations/v1_24" + "code.gitea.io/gitea/models/migrations/v1_25" "code.gitea.io/gitea/models/migrations/v1_6" "code.gitea.io/gitea/models/migrations/v1_7" "code.gitea.io/gitea/models/migrations/v1_8" @@ -382,6 +383,9 @@ func prepareMigrationTasks() []*migration { newMigration(318, "Add anonymous_access_mode for repo_unit", v1_24.AddRepoUnitAnonymousAccessMode), newMigration(319, "Add ExclusiveOrder to Label table", v1_24.AddExclusiveOrderColumnToLabelTable), newMigration(320, "Migrate two_factor_policy to login_source table", v1_24.MigrateSkipTwoFactor), + + // Gitea 1.24.0 ends at database version 321 + newMigration(321, "Use LONGTEXT for some columns and fix review_state.updated_files column", v1_25.UseLongTextInSomeColumnsAndFixBugs), } return preparedMigrations } diff --git a/models/migrations/v1_25/main_test.go b/models/migrations/v1_25/main_test.go new file mode 100644 index 0000000000..d2c4a4105d --- /dev/null +++ b/models/migrations/v1_25/main_test.go @@ -0,0 +1,14 @@ +// Copyright 2025 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package v1_25 + +import ( + "testing" + + "code.gitea.io/gitea/models/migrations/base" +) + +func TestMain(m *testing.M) { + base.MainTest(m) +} diff --git a/models/migrations/v1_25/v321.go b/models/migrations/v1_25/v321.go new file mode 100644 index 0000000000..73ef180f48 --- /dev/null +++ b/models/migrations/v1_25/v321.go @@ -0,0 +1,52 @@ +// Copyright 2025 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package v1_25 + +import ( + "code.gitea.io/gitea/models/migrations/base" + "code.gitea.io/gitea/modules/setting" + + "xorm.io/xorm" + "xorm.io/xorm/schemas" +) + +func UseLongTextInSomeColumnsAndFixBugs(x *xorm.Engine) error { + if !setting.Database.Type.IsMySQL() { + return nil // Only mysql need to change from text to long text, for other databases, they are the same + } + + if err := base.ModifyColumn(x, "review_state", &schemas.Column{ + Name: "updated_files", + SQLType: schemas.SQLType{ + Name: "LONGTEXT", + }, + Length: 0, + Nullable: false, + DefaultIsEmpty: true, + }); err != nil { + return err + } + + if err := base.ModifyColumn(x, "package_property", &schemas.Column{ + Name: "value", + SQLType: schemas.SQLType{ + Name: "LONGTEXT", + }, + Length: 0, + Nullable: false, + DefaultIsEmpty: true, + }); err != nil { + return err + } + + return base.ModifyColumn(x, "notice", &schemas.Column{ + Name: "description", + SQLType: schemas.SQLType{ + Name: "LONGTEXT", + }, + Length: 0, + Nullable: false, + DefaultIsEmpty: true, + }) +} diff --git a/models/migrations/v1_25/v321_test.go b/models/migrations/v1_25/v321_test.go new file mode 100644 index 0000000000..4897783fd3 --- /dev/null +++ b/models/migrations/v1_25/v321_test.go @@ -0,0 +1,70 @@ +// Copyright 2025 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package v1_25 + +import ( + "testing" + + "code.gitea.io/gitea/models/migrations/base" + "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/timeutil" + + "github.com/stretchr/testify/assert" +) + +func Test_UseLongTextInSomeColumnsAndFixBugs(t *testing.T) { + if !setting.Database.Type.IsMySQL() { + t.Skip("Only MySQL needs to change from TEXT to LONGTEXT") + } + + type ReviewState struct { + ID int64 `xorm:"pk autoincr"` + UserID int64 `xorm:"NOT NULL UNIQUE(pull_commit_user)"` + PullID int64 `xorm:"NOT NULL INDEX UNIQUE(pull_commit_user) DEFAULT 0"` // Which PR was the review on? + CommitSHA string `xorm:"NOT NULL VARCHAR(64) UNIQUE(pull_commit_user)"` // Which commit was the head commit for the review? + UpdatedFiles map[string]int `xorm:"NOT NULL TEXT JSON"` // Stores for each of the changed files of a PR whether they have been viewed, changed since last viewed, or not viewed + UpdatedUnix timeutil.TimeStamp `xorm:"updated"` // Is an accurate indicator of the order of commits as we do not expect it to be possible to make reviews on previous commits + } + + type PackageProperty struct { + ID int64 `xorm:"pk autoincr"` + RefType int `xorm:"INDEX NOT NULL"` + RefID int64 `xorm:"INDEX NOT NULL"` + Name string `xorm:"INDEX NOT NULL"` + Value string `xorm:"TEXT NOT NULL"` + } + + type Notice struct { + ID int64 `xorm:"pk autoincr"` + Type int + Description string `xorm:"LONGTEXT"` + CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"` + } + + // Prepare and load the testing database + x, deferable := base.PrepareTestEnv(t, 0, new(ReviewState), new(PackageProperty), new(Notice)) + defer deferable() + + assert.NoError(t, UseLongTextInSomeColumnsAndFixBugs(x)) + + tables, err := x.DBMetas() + assert.NoError(t, err) + + for _, table := range tables { + switch table.Name { + case "review_state": + column := table.GetColumn("updated_files") + assert.NotNil(t, column) + assert.Equal(t, "LONGTEXT", column.SQLType.Name) + case "package_property": + column := table.GetColumn("value") + assert.NotNil(t, column) + assert.Equal(t, "LONGTEXT", column.SQLType.Name) + case "notice": + column := table.GetColumn("description") + assert.NotNil(t, column) + assert.Equal(t, "LONGTEXT", column.SQLType.Name) + } + } +} diff --git a/models/packages/package_property.go b/models/packages/package_property.go index 7ddbfd97e9..acc05d8d5a 100644 --- a/models/packages/package_property.go +++ b/models/packages/package_property.go @@ -32,7 +32,7 @@ type PackageProperty struct { RefType PropertyType `xorm:"INDEX NOT NULL"` RefID int64 `xorm:"INDEX NOT NULL"` Name string `xorm:"INDEX NOT NULL"` - Value string `xorm:"TEXT NOT NULL"` + Value string `xorm:"LONGTEXT NOT NULL"` } // InsertProperty creates a property diff --git a/models/system/notice.go b/models/system/notice.go index e7ec6a9693..91bf4be0f6 100644 --- a/models/system/notice.go +++ b/models/system/notice.go @@ -29,7 +29,7 @@ const ( type Notice struct { ID int64 `xorm:"pk autoincr"` Type NoticeType - Description string `xorm:"TEXT"` + Description string `xorm:"LONGTEXT"` CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"` } diff --git a/options/locale/locale_ja-JP.ini b/options/locale/locale_ja-JP.ini index 90c65148a3..46802af534 100644 --- a/options/locale/locale_ja-JP.ini +++ b/options/locale/locale_ja-JP.ini @@ -2243,6 +2243,7 @@ settings.event_repository=リポジトリ settings.event_repository_desc=リポジトリが作成・削除されたとき。 settings.event_header_issue=イシューのイベント settings.event_issues=イシュー +settings.event_issues_desc=イシューがオープン・クローズ・再オープン・編集・削除されたとき。 settings.event_issue_assign=イシューのアサイン settings.event_issue_assign_desc=イシューの担当者が割り当てられたとき、解除されたとき。 settings.event_issue_label=イシューのラベル @@ -2253,6 +2254,7 @@ settings.event_issue_comment=イシューへのコメント settings.event_issue_comment_desc=イシューへのコメントが作成・編集・削除されたとき。 settings.event_header_pull_request=プルリクエストのイベント settings.event_pull_request=プルリクエスト +settings.event_pull_request_desc=プルリクエストがオープン・クローズ・再オープン・編集・削除されたとき。 settings.event_pull_request_assign=プルリクエストのアサイン settings.event_pull_request_assign_desc=プルリクエストの担当者が割り当て・解除されたとき。 settings.event_pull_request_label=プルリクエストのラベル @@ -2397,6 +2399,7 @@ settings.block_on_official_review_requests_desc=公式レビュー依頼があ settings.block_outdated_branch=遅れているプルリクエストのマージをブロック settings.block_outdated_branch_desc=baseブランチがheadブランチより進んでいる場合、マージできないようにします。 settings.block_admin_merge_override=管理者もブランチ保護のルールに従う +settings.block_admin_merge_override_desc=管理者はブランチ保護のルールに従う必要があり、回避することはできません。 settings.default_branch_desc=プルリクエストやコミット表示のデフォルトのブランチを選択: settings.merge_style_desc=マージ スタイル settings.default_merge_style_desc=デフォルトのマージスタイル @@ -2445,6 +2448,7 @@ settings.archive.tagsettings_unavailable=タグ設定は、アーカイブリポ settings.archive.mirrors_unavailable=リポジトリがアーカイブされている場合、ミラーは利用できません。 settings.unarchive.button=アーカイブ解除 settings.unarchive.header=このリポジトリをアーカイブ解除 +settings.unarchive.text=リポジトリのアーカイブを解除すると、コミット、プッシュ、新規のイシューやプルリクエストを受け付ける機能が復活します。 settings.unarchive.success=リポジトリのアーカイブを解除しました。 settings.unarchive.error=リポジトリのアーカイブ解除でエラーが発生しました。 詳細はログを確認してください。 settings.update_avatar_success=リポジトリのアバターを更新しました。 @@ -2462,9 +2466,11 @@ settings.lfs_invalid_locking_path=不正なパス: %s settings.lfs_invalid_lock_directory=ディレクトリはロックできません: %s settings.lfs_lock_already_exists=すでにロックされています: %s settings.lfs_lock=ロック +settings.lfs_lock_path=ロックするファイルパス… settings.lfs_locks_no_locks=ロックなし settings.lfs_lock_file_no_exist=ロックしたファイルがデフォルトブランチにありません settings.lfs_force_unlock=強制ロック解除 +settings.lfs_pointers.found=%d件のblobポインタ — 登録済 %d件、未登録 %d件 (実体ファイルなし %d件) settings.lfs_pointers.sha=Blob SHA settings.lfs_pointers.oid=OID settings.lfs_pointers.inRepo=Repo内 @@ -2644,6 +2650,7 @@ error.csv.invalid_field_count=このファイルは %d 行目のフィールド error.broken_git_hook=このリポジトリのGitフックが壊れているようです。 <a target="_blank" rel="noreferrer" href="%s">ドキュメント</a>に従って修正し、その後いくつかのコミットをプッシュして状態を最新にしてください。 [graphs] +component_loading=%sを読み込み中… component_loading_failed=%sを読み込めませんでした component_loading_info=少し時間がかかるかもしれません… component_failed_to_load=予期しないエラーが発生しました。 @@ -2682,6 +2689,7 @@ form.create_org_not_allowed=組織を作成する権限がありません。 settings=設定 settings.options=組織 settings.full_name=フルネーム +settings.email=連絡先メールアドレス settings.website=Webサイト settings.location=場所 settings.permission=許可 @@ -2698,7 +2706,10 @@ settings.update_setting_success=組織の設定を更新しました。 settings.rename=組織名の変更 settings.rename_desc=組織名を変更すると組織のURLも変更され、古い名前は解放されます。 +settings.rename_success=組織 %[1]s が正常に %[2]s に改名されました。 +settings.rename_no_change=組織名は変更されません。 settings.rename_new_org_name=新しい組織名 +settings.rename_failed=内部エラーのため組織名を変更できませんでした settings.rename_notices_1=この操作は<strong>元に戻せません</strong> 。 settings.rename_notices_2=古い名前は、再使用されるまではリダイレクトします。 @@ -2708,9 +2719,11 @@ settings.delete_account=この組織を削除 settings.delete_prompt=組織は恒久的に削除されます。 元に戻すことは<strong>できません</strong>! settings.name_confirm=確認のため組織名を入力: settings.delete_notices_1=この操作は<strong>元に戻せません</strong> 。 +settings.delete_notices_2=この操作により、<strong>%s</strong>のすべての<strong>リポジトリ</strong>が恒久的に削除されます。 コード、イシュー、コメント、Wikiデータ、共同作業者の設定も含まれます。 settings.delete_notices_3=この操作により、<strong>%s</strong>のすべての<strong>パッケージ</strong>が恒久的に削除されます。 settings.delete_notices_4=この操作により、<strong>%s</strong>のすべての<strong>プロジェクト</strong>が恒久的に削除されます。 settings.confirm_delete_account=削除を確認 +settings.delete_failed=内部エラーのため組織を削除できませんでした settings.delete_successful=組織の<b>%s</b>の削除に成功しました。 settings.hooks_desc=この組織の<strong>すべてのリポジトリ</strong>でトリガーされるWebhookを追加します。 @@ -2767,6 +2780,7 @@ teams.remove_all_repos_title=チームリポジトリをすべて除去 teams.remove_all_repos_desc=チームからすべてのリポジトリを除去します。 teams.add_all_repos_title=すべてのリポジトリを追加 teams.add_all_repos_desc=組織のすべてのリポジトリをチームに追加します。 +teams.add_nonexistent_repo=追加しようとしているリポジトリは存在しません。 先にリポジトリを作成してください。 teams.add_duplicate_users=ユーザーは既にチームのメンバーです。 teams.repos.none=このチームがアクセスできるリポジトリはありません。 teams.members.none=このチームにはメンバーがいません。 @@ -2807,6 +2821,7 @@ repositories=リポジトリ hooks=Webhook integrations=連携 authentication=認証ソース +emails=ユーザーメールアドレス config=設定 config_summary=サマリー config_settings=設定 @@ -2838,8 +2853,11 @@ dashboard.cron.cancelled=Cron: %[1]s をキャンセル: %[3]s dashboard.cron.error=Cronでエラー: %s: %[3]s dashboard.cron.finished=Cron: %[1]s が完了 dashboard.delete_inactive_accounts=アクティベートされていないアカウントをすべて削除 +dashboard.delete_inactive_accounts.started=アクティベートされていないアカウントをすべて削除するタスクを開始しました。 dashboard.delete_repo_archives=リポジトリのアーカイブ (ZIP, TAR.GZ, etc..) をすべて削除 +dashboard.delete_repo_archives.started=リポジトリアーカイブをすべて削除するタスクを開始しました dashboard.delete_missing_repos=Gitファイルが存在しないリポジトリをすべて削除 +dashboard.delete_missing_repos.started=Gitファイルが存在しないリポジトリをすべて削除するタスクを開始しました dashboard.delete_generated_repository_avatars=自動生成したリポジトリアバターを削除 dashboard.sync_repo_branches=Gitデータからデータベースへ不足しているブランチを同期 dashboard.sync_repo_tags=Gitデータからデータベースへタグを同期 @@ -2847,7 +2865,12 @@ dashboard.update_mirrors=ミラーの更新 dashboard.repo_health_check=全リポジトリのヘルスチェック dashboard.check_repo_stats=全リポジトリの統計情報を更新 dashboard.archive_cleanup=古いリポジトリアーカイブの削除 +dashboard.deleted_branches_cleanup=削除ブランチのクリーンアップ dashboard.update_migration_poster_id=移行する投稿者IDの更新 +dashboard.git_gc_repos=すべてのリポジトリでガベージコレクションを実行 +dashboard.resync_all_sshkeys='.ssh/authorized_keys' ファイルをGitea上のSSHキーで更新 +dashboard.resync_all_sshprincipals='.ssh/authorized_principals' ファイルをGitea上のSSHプリンシパルで更新 +dashboard.resync_all_hooks=すべてのリポジトリの pre-receive, update, post-receive フックを再同期する dashboard.reinit_missing_repos=レコードが存在するが見当たらないすべてのGitリポジトリを再初期化する dashboard.sync_external_users=外部ユーザーデータの同期 dashboard.cleanup_hook_task_table=hook_taskテーブルのクリーンアップ @@ -2883,8 +2906,10 @@ dashboard.total_gc_pause=GC停止時間の合計 dashboard.last_gc_pause=前回のGC停止時間 dashboard.gc_times=GC実行回数 dashboard.delete_old_actions=データベースから古い操作履歴をすべて削除 +dashboard.delete_old_actions.started=データベースからの古い操作履歴の削除を開始しました。 dashboard.update_checker=更新チェック dashboard.delete_old_system_notices=データベースから古いシステム通知をすべて削除 +dashboard.gc_lfs=LFSメタオブジェクトのガベージコレクション dashboard.stop_zombie_tasks=Actionsゾンビタスクを停止 dashboard.stop_endless_tasks=終わらないActionsタスクを停止 dashboard.cancel_abandoned_jobs=放置されたままのActionsジョブをキャンセル @@ -2908,6 +2933,7 @@ users.2fa=2FA users.repos=リポジトリ users.created=作成日 users.last_login=前回のサインイン +users.never_login=未サインイン users.send_register_notify=ユーザーに登録通知を送る users.new_success=ユーザーアカウント "%s" を作成しました。 users.edit=編集 @@ -2934,6 +2960,7 @@ users.still_own_repo=このユーザーはまだ1つ以上のリポジトリを users.still_has_org=このユーザーは組織のメンバーになっています。 先に組織からこのユーザーを削除してください。 users.purge=ユーザーを抹消 users.purge_help=強制的にユーザーとそのユーザーが所有していたリポジトリ、組織、パッケージを削除します。コメントもすべて削除します。 +users.still_own_packages=このユーザーはまだ1つ以上のパッケージを所有しています。先にそれらのパッケージを削除してください。 users.deletion_success=ユーザーアカウントを削除しました。 users.reset_2fa=2要素認証をリセット users.list_status_filter.menu_text=フィルター @@ -2953,7 +2980,11 @@ users.details=ユーザーの詳細 emails.email_manage_panel=ユーザーメールアドレスの管理 emails.primary=プライマリー emails.activated=アクティベート済み +emails.filter_sort.email=メールアドレス +emails.filter_sort.email_reverse=メールアドレス (逆順) emails.filter_sort.name=ユーザー名 +emails.filter_sort.name_reverse=ユーザー名 (逆順) +emails.updated=メールアドレス設定を更新しました emails.not_updated=メール設定の更新に失敗しました: %v emails.duplicate_active=メールアドレスは別のユーザーが既に使用中です。 emails.change_email_header=メール設定の更新 @@ -2961,6 +2992,7 @@ emails.change_email_text=このメールアドレスで更新してもよろし emails.delete=メールアドレスの削除 emails.delete_desc=このメールアドレスを削除してよろしいですか? emails.deletion_success=メールアドレスを削除しました。 +emails.delete_primary_email_error=プライマリメールアドレスを削除することはできません。 orgs.org_manage_panel=組織の管理 orgs.name=名称 @@ -3074,19 +3106,27 @@ auths.oauth2_required_claim_name_helper=このClaim名を設定すると、こ auths.oauth2_required_claim_value=必須Claim値 auths.oauth2_required_claim_value_helper=この値を設定すると、このソースからのログインを、指定したClaim名とClaim値を持つユーザーに限定します。 auths.oauth2_group_claim_name=このソースでグループ名を提供するClaim名 (オプション) +auths.oauth2_admin_group=管理者ユーザーのグループClaim値 (オプション — 上のClaim名が必要) +auths.oauth2_restricted_group=制限付きユーザーのグループClaim値 (オプション — 上のClaim名が必要) +auths.oauth2_map_group_to_team=見つかったグループを組織のチームにマップ (オプション — 上のClaim名が必要) auths.oauth2_map_group_to_team_removal=対応するグループにユーザーが含まれない場合、同期しているチームからユーザーを削除する auths.enable_auto_register=自動登録を有効にする auths.sspi_auto_create_users=自動的にユーザーを作成 +auths.sspi_auto_create_users_helper=初回ログインのユーザーに対して、SSPI認証処理が新しいアカウントを自動的に作成することを許可します auths.sspi_auto_activate_users=自動的にユーザーをアクティベート auths.sspi_auto_activate_users_helper=SSPI認証処理が新規ユーザーを自動的にアクティベートすることを許可します auths.sspi_strip_domain_names=ユーザー名からドメイン名を除去 +auths.sspi_strip_domain_names_helper=チェックを入れると、ログオン名からドメイン名を除去します。 (例. "DOMAIN\user" や "user@example.org" は、どちらも "user" となります) auths.sspi_separator_replacement=\、/、@の代わりに使用するセパレーター +auths.sspi_separator_replacement_helper=ダウンレベルログオン名のセパレーター (例. "DOMAIN\user" の \ ) やユーザープリンシパル名のセパレーター (例. "user@example.org" の @ ) を置き換えるときに使用する文字です。 auths.sspi_default_language=ユーザーのデフォルトの言語 +auths.sspi_default_language_helper=SSPI認証処理によって自動的に作成されるユーザーのデフォルトの言語です。 言語を自動検出するほうが良い場合は空のままにしてください。 auths.tips=ヒント auths.tips.oauth2.general=OAuth2認証 auths.tips.oauth2.general.tip=新しいOAuth2認証を登録するときは、コールバック/リダイレクトURLは以下になります: auths.tip.oauth2_provider=OAuth2プロバイダー auths.tip.bitbucket=新しいOAuthコンシューマーを %s から登録し、"アカウント" に "読み取り" 権限を追加してください。 +auths.tip.nextcloud=あなたのインスタンス上でメニュー "Settings -> Security -> OAuth 2.0 client" を選択し、新しいOAuthコンシューマーを登録します auths.tip.dropbox=新しいアプリケーションを %s から登録してください。 auths.tip.facebook=新しいアプリケーションを %s で登録し、"Facebook Login"を追加してください。 auths.tip.github=新しいOAuthアプリケーションを %s から登録してください。 @@ -3196,6 +3236,7 @@ config.mailer_sendmail_path=Sendmailのパス config.mailer_sendmail_args=Sendmailの追加引数 config.mailer_sendmail_timeout=Sendmail のタイムアウト config.mailer_use_dummy=Dummy +config.test_email_placeholder=メールアドレス (例 test@example.com) config.send_test_mail=テストメールを送信 config.send_test_mail_submit=送信 config.test_mail_failed=`"%s" へのテストメール送信に失敗しました: %v` @@ -3284,6 +3325,7 @@ monitor.queue.numberinqueue=キュー内の数 monitor.queue.review_add=ワーカーの確認 / 追加 monitor.queue.settings.title=プール設定 monitor.queue.settings.desc=プールはワーカーキューの待機状態に応じて動的に大きくなります。 +monitor.queue.settings.maxnumberworkers=ワーカー数上限 monitor.queue.settings.maxnumberworkers.placeholder=現在の設定 %[1]d monitor.queue.settings.maxnumberworkers.error=ワーカー数上限は数値にしてください monitor.queue.settings.submit=設定を更新 @@ -3309,6 +3351,10 @@ notices.delete_success=システム通知を削除しました。 self_check.no_problem_found=今のところ問題は見つかっていません。 self_check.startup_warnings=起動時の警告: self_check.database_collation_mismatch=データベースに想定される照合順序: %s +self_check.database_collation_case_insensitive=データベースは照合順序 %s を使用しており、大文字小文字を区別しません。 Giteaはその照合順序でも動作するかもしれませんが、まれに期待どおり動作しないケースがあるかもしれません。 +self_check.database_inconsistent_collation_columns=データベースは照合順序 %s を使用していますが、以下のカラムはそれと一致しない照合順序を使用しており、予期せぬ問題を引き起こす可能性があります。 +self_check.database_fix_mysql=MySQL/MariaDBユーザーの方は、"gitea doctor convert" コマンドを使用することで、照合順序の問題を修正できます。 また、"ALTER ... COLLATE ..." のSQLを手で実行しても修正することができます。 +self_check.database_fix_mssql=MSSQLユーザーの方は、問題を修正するには今のところ "ALTER ... COLLATE ..." のSQLを手で実行するしかありません。 self_check.location_origin_mismatch=現在のURL (%[1]s) は、Giteaが見ているURL (%[2]s) に一致していません。 リバースプロキシを使用している場合は、"Host" ヘッダーと "X-Forwarded-Proto" ヘッダーが正しく設定されていることを確認してください。 [action] @@ -3392,6 +3438,8 @@ error.no_committer_account=コミッターのメールアドレスに対応す error.no_gpg_keys_found=この署名に対応する既知のキーがデータベースに存在しません error.not_signed_commit=署名されたコミットではありません error.failed_retrieval_gpg_keys=コミッターのアカウントに登録されたキーを取得できませんでした +error.probable_bad_signature=警告! このIDの鍵はデータベースに登録されていますが、その鍵でコミットの検証が通りません! これは疑わしいコミットです。 +error.probable_bad_default_signature=警告! これはデフォルト鍵のIDですが、デフォルト鍵ではコミットの検証が通りません! これは疑わしいコミットです。 [units] unit=ユニット @@ -3430,6 +3478,7 @@ versions.view_all=すべて表示 dependency.id=ID dependency.version=バージョン search_in_external_registry=%s で検索 +alpine.registry=あなたの <code>/etc/apk/repositories</code> ファイルにURLを追加して、このレジストリをセットアップします: alpine.registry.key=インデックス署名の検証のため、レジストリのRSA公開鍵を <code>/etc/apk/keys/</code> フォルダにダウンロードします: alpine.registry.info=$branch と $repository は下にあるリストから選んでください。 alpine.install=パッケージをインストールするには、次のコマンドを実行します: @@ -3442,13 +3491,18 @@ arch.install=pacmanでパッケージを同期します: arch.repository=リポジトリ情報 arch.repository.repositories=リポジトリ arch.repository.architectures=Architectures +cargo.registry=Cargo 設定ファイルでこのレジストリをセットアップします。(例 <code>~/.cargo/config.toml</code>): cargo.install=Cargo を使用してパッケージをインストールするには、次のコマンドを実行します: +chef.registry=あなたの <code>~/.chef/config.rb</code> ファイルに、このレジストリをセットアップします: chef.install=パッケージをインストールするには、次のコマンドを実行します: +composer.registry=あなたの <code>~/.composer/config.json</code> ファイルに、このレジストリをセットアップします: composer.install=Composer を使用してパッケージをインストールするには、次のコマンドを実行します: composer.dependencies=依存関係 composer.dependencies.development=開発用依存関係 conan.details.repository=リポジトリ +conan.registry=このレジストリをコマンドラインからセットアップします: conan.install=Conan を使用してパッケージをインストールするには、次のコマンドを実行します: +conda.registry=あなたの <code>.condarc</code> ファイルに、このレジストリを Conda リポジトリとしてセットアップします: conda.install=Conda を使用してパッケージをインストールするには、次のコマンドを実行します: container.details.type=イメージタイプ container.details.platform=プラットフォーム @@ -3460,7 +3514,9 @@ container.layers=イメージレイヤー container.labels=ラベル container.labels.key=キー container.labels.value=値 +cran.registry=あなたの <code>Rprofile.site</code> ファイルに、このレジストリをセットアップします: cran.install=パッケージをインストールするには、次のコマンドを実行します: +debian.registry=このレジストリをコマンドラインからセットアップします: debian.registry.info=$distribution と $component は下にあるリストから選んでください。 debian.install=パッケージをインストールするには、次のコマンドを実行します: debian.repository=リポジトリ情報 @@ -3469,11 +3525,16 @@ debian.repository.components=Components debian.repository.architectures=Architectures generic.download=コマンドラインでパッケージをダウンロードします: go.install=コマンドラインでパッケージをインストール: +helm.registry=このレジストリをコマンドラインからセットアップします: helm.install=パッケージをインストールするには、次のコマンドを実行します: +maven.registry=あなたのプロジェクトの <code>pom.xml</code> ファイルに、このレジストリをセットアップします: +maven.install=パッケージを使用するには、 <code>pom.xml</code> ファイル内の <code>dependencies</code> ブロックに以下を含めます: maven.install2=コマンドラインで実行します: maven.download=依存関係をダウンロードするには、コマンドラインでこれを実行します: +nuget.registry=このレジストリをコマンドラインからセットアップします: nuget.install=NuGet を使用してパッケージをインストールするには、次のコマンドを実行します: nuget.dependency.framework=ターゲットフレームワーク +npm.registry=あなたのプロジェクトの <code>.npmrc</code> ファイルに、このレジストリをセットアップします: npm.install=npm を使用してパッケージをインストールするには、次のコマンドを実行します: npm.install2=または package.json ファイルに追加します: npm.dependencies=依存関係 @@ -3485,6 +3546,7 @@ npm.details.tag=タグ pub.install=Dart を使用してパッケージをインストールするには、次のコマンドを実行します: pypi.requires=必要なPython pypi.install=pip を使用してパッケージをインストールするには、次のコマンドを実行します: +rpm.registry=このレジストリをコマンドラインからセットアップします: rpm.distros.redhat=RedHat系ディストリビューションの場合 rpm.distros.suse=SUSE系ディストリビューションの場合 rpm.install=パッケージをインストールするには、次のコマンドを実行します: @@ -3497,6 +3559,7 @@ rubygems.dependencies.runtime=実行用依存関係 rubygems.dependencies.development=開発用依存関係 rubygems.required.ruby=必要なRubyバージョン rubygems.required.rubygems=必要なRubyGemバージョン +swift.registry=このレジストリをコマンドラインからセットアップします: swift.install=あなたの <code>Package.swift</code> ファイルにパッケージを追加します: swift.install2=そして次のコマンドを実行します: vagrant.install=Vagrant ボックスを追加するには、次のコマンドを実行します。 diff --git a/web_src/js/features/repo-issue.ts b/web_src/js/features/repo-issue.ts index 49e8fc40a2..b330b4869b 100644 --- a/web_src/js/features/repo-issue.ts +++ b/web_src/js/features/repo-issue.ts @@ -542,7 +542,12 @@ function initIssueTemplateCommentEditors(commentForm: HTMLFormElement) { // deactivate all markdown editors showElem(commentForm.querySelectorAll('.combo-editor-dropzone .form-field-real')); hideElem(commentForm.querySelectorAll('.combo-editor-dropzone .combo-markdown-editor')); - hideElem(commentForm.querySelectorAll('.combo-editor-dropzone .form-field-dropzone')); + queryElems(commentForm, '.combo-editor-dropzone .form-field-dropzone', (dropzoneContainer) => { + // if "form-field-dropzone" exists, then "dropzone" must also exist + const dropzone = dropzoneContainer.querySelector<HTMLElement>('.dropzone').dropzone; + const hasUploadedFiles = dropzone.files.length !== 0; + toggleElem(dropzoneContainer, hasUploadedFiles); + }); // activate this markdown editor hideElem(fieldTextarea); |