Skip to content

Commit 08cebd7

Browse files
committed
Merge remote-tracking branch 'giteaofficial/main'
* giteaofficial/main: Use FullName in Emails to address the recipient if possible (go-gitea#31527) Don't show hidden labels when filling out an issue template (go-gitea#31576) [skip ci] Updated translations via Crowdin Convert frontend code to typescript (go-gitea#31559) [skip ci] Updated translations via Crowdin
2 parents d52d93a + 4696bcb commit 08cebd7

File tree

176 files changed

+693
-403
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

176 files changed

+693
-403
lines changed

.eslintrc.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,10 @@ overrides:
5858
worker: true
5959
rules:
6060
no-restricted-globals: [2, addEventListener, blur, close, closed, confirm, defaultStatus, defaultstatus, error, event, external, find, focus, frameElement, frames, history, innerHeight, innerWidth, isFinite, isNaN, length, locationbar, menubar, moveBy, moveTo, name, onblur, onerror, onfocus, onload, onresize, onunload, open, opener, opera, outerHeight, outerWidth, pageXOffset, pageYOffset, parent, print, removeEventListener, resizeBy, resizeTo, screen, screenLeft, screenTop, screenX, screenY, scroll, scrollbars, scrollBy, scrollTo, scrollX, scrollY, status, statusbar, stop, toolbar, top]
61-
- files: ["*.config.*"]
61+
- files: ["*.config.*", "**/*.d.ts"]
6262
rules:
6363
i/no-unused-modules: [0]
64-
- files: ["**/*.test.*", "web_src/js/test/setup.js"]
64+
- files: ["**/*.test.*", "web_src/js/test/setup.ts"]
6565
env:
6666
vitest-globals/env: true
6767
rules:
@@ -114,7 +114,7 @@ overrides:
114114
vitest/valid-describe-callback: [2]
115115
vitest/valid-expect: [2]
116116
vitest/valid-title: [2]
117-
- files: ["web_src/js/modules/fetch.js", "web_src/js/standalone/**/*"]
117+
- files: ["web_src/js/modules/fetch.ts", "web_src/js/standalone/**/*"]
118118
rules:
119119
no-restricted-syntax: [2, WithStatement, ForInStatement, LabeledStatement, SequenceExpression]
120120
- files: ["**/*.vue"]
@@ -467,7 +467,7 @@ rules:
467467
no-dupe-else-if: [2]
468468
no-dupe-keys: [2]
469469
no-duplicate-case: [2]
470-
no-duplicate-imports: [2]
470+
no-duplicate-imports: [0]
471471
no-else-return: [2]
472472
no-empty-character-class: [2]
473473
no-empty-function: [0]
@@ -619,7 +619,7 @@ rules:
619619
no-restricted-exports: [0]
620620
no-restricted-globals: [2, addEventListener, blur, close, closed, confirm, defaultStatus, defaultstatus, error, event, external, find, focus, frameElement, frames, history, innerHeight, innerWidth, isFinite, isNaN, length, location, locationbar, menubar, moveBy, moveTo, name, onblur, onerror, onfocus, onload, onresize, onunload, open, opener, opera, outerHeight, outerWidth, pageXOffset, pageYOffset, parent, print, removeEventListener, resizeBy, resizeTo, screen, screenLeft, screenTop, screenX, screenY, scroll, scrollbars, scrollBy, scrollTo, scrollX, scrollY, self, status, statusbar, stop, toolbar, top, __dirname, __filename]
621621
no-restricted-imports: [0]
622-
no-restricted-syntax: [2, WithStatement, ForInStatement, LabeledStatement, SequenceExpression, {selector: "CallExpression[callee.name='fetch']", message: "use modules/fetch.js instead"}]
622+
no-restricted-syntax: [2, WithStatement, ForInStatement, LabeledStatement, SequenceExpression, {selector: "CallExpression[callee.name='fetch']", message: "use modules/fetch.ts instead"}]
623623
no-return-assign: [0]
624624
no-script-url: [2]
625625
no-self-assign: [2, {props: true}]

Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ TAR_EXCLUDES := .git data indexers queues log node_modules $(EXECUTABLE) $(FOMAN
144144
GO_DIRS := build cmd models modules routers services tests
145145
WEB_DIRS := web_src/js web_src/css
146146

147-
ESLINT_FILES := web_src/js tools *.js tests/e2e
147+
ESLINT_FILES := web_src/js tools *.js *.ts tests/e2e
148148
STYLELINT_FILES := web_src/css web_src/js/components/*.vue
149149
SPELLCHECK_FILES := $(GO_DIRS) $(WEB_DIRS) docs/content templates options/locale/locale_en-US.ini .github $(filter-out CHANGELOG.md, $(wildcard *.go *.js *.md *.yml *.yaml *.toml))
150150
EDITORCONFIG_FILES := templates .github/workflows options/locale/locale_en-US.ini
@@ -376,12 +376,12 @@ lint-backend-fix: lint-go-fix lint-go-vet lint-editorconfig
376376
.PHONY: lint-js
377377
lint-js: node_modules
378378
npx eslint --color --max-warnings=0 --ext js,ts,vue $(ESLINT_FILES)
379-
npx tsc
379+
# npx tsc
380380

381381
.PHONY: lint-js-fix
382382
lint-js-fix: node_modules
383383
npx eslint --color --max-warnings=0 --ext js,ts,vue $(ESLINT_FILES) --fix
384-
npx tsc
384+
# npx tsc
385385

386386
.PHONY: lint-css
387387
lint-css: node_modules

models/user/user.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
"context"
99
"encoding/hex"
1010
"fmt"
11+
"mime"
12+
"net/mail"
1113
"net/url"
1214
"path/filepath"
1315
"regexp"
@@ -413,6 +415,34 @@ func (u *User) DisplayName() string {
413415
return u.Name
414416
}
415417

418+
var emailToReplacer = strings.NewReplacer(
419+
"\n", "",
420+
"\r", "",
421+
"<", "",
422+
">", "",
423+
",", "",
424+
":", "",
425+
";", "",
426+
)
427+
428+
// EmailTo returns a string suitable to be put into a e-mail `To:` header.
429+
func (u *User) EmailTo() string {
430+
sanitizedDisplayName := emailToReplacer.Replace(u.DisplayName())
431+
432+
// should be an edge case but nice to have
433+
if sanitizedDisplayName == u.Email {
434+
return u.Email
435+
}
436+
437+
to := fmt.Sprintf("%s <%s>", sanitizedDisplayName, u.Email)
438+
add, err := mail.ParseAddress(to)
439+
if err != nil {
440+
return u.Email
441+
}
442+
443+
return fmt.Sprintf("%s <%s>", mime.QEncoding.Encode("utf-8", add.Name), add.Address)
444+
}
445+
416446
// GetDisplayName returns full name if it's not empty and DEFAULT_SHOW_FULL_NAME is set,
417447
// returns username otherwise.
418448
func (u *User) GetDisplayName() string {

models/user/user_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,29 @@ func Test_NormalizeUserFromEmail(t *testing.T) {
529529
}
530530
}
531531

532+
func TestEmailTo(t *testing.T) {
533+
testCases := []struct {
534+
fullName string
535+
mail string
536+
result string
537+
}{
538+
{"Awareness Hub", "[email protected]", "Awareness Hub <[email protected]>"},
539+
540+
{"Hi Its <Mee>", "[email protected]", "Hi Its Mee <[email protected]>"},
541+
{"Sinéad.O'Connor", "[email protected]", "=?utf-8?q?Sin=C3=A9ad.O'Connor?= <[email protected]>"},
542+
{"Æsir", "[email protected]", "=?utf-8?q?=C3=86sir?= <[email protected]>"},
543+
{"new😀user", "[email protected]", "=?utf-8?q?new=F0=9F=98=80user?= <[email protected]>"},
544+
{`"quoted"`, "[email protected]", "quoted <[email protected]>"},
545+
}
546+
547+
for _, testCase := range testCases {
548+
t.Run(testCase.result, func(t *testing.T) {
549+
testUser := &user_model.User{FullName: testCase.fullName, Email: testCase.mail}
550+
assert.EqualValues(t, testCase.result, testUser.EmailTo())
551+
})
552+
}
553+
}
554+
532555
func TestDisabledUserFeatures(t *testing.T) {
533556
assert.NoError(t, unittest.PrepareTestDatabase())
534557

options/locale/locale_ja-JP.ini

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ remove_all=すべて除去
9393
remove_label_str=アイテム「%s」を削除
9494
edit=編集
9595
view=表示
96+
test=テスト
9697

9798
enabled=有効
9899
disabled=無効
@@ -386,13 +387,17 @@ relevant_repositories=妥当と思われるリポジトリのみを表示して
386387

387388
[auth]
388389
create_new_account=アカウントを登録
390+
already_have_account=すでにアカウントをお持ちですか?
391+
sign_in_now=サインインはこちらへ!
389392
disable_register_prompt=登録は無効になっています。 サイト管理者にお問い合わせください。
390393
disable_register_mail=登録でのメール確認は無効になっています。
391394
manual_activation_only=アクティベーションを完了するにはサイト管理者に連絡してください。
392395
remember_me=このデバイスで自動サインイン
393396
remember_me.compromised=ログイントークンはもう有効ではなく、アカウントが侵害されたことを示している可能性があります。 異常なアクティビティがないかアカウントを確認してください。
394397
forgot_password_title=パスワードを忘れた
395398
forgot_password=パスワードをお忘れですか?
399+
need_account=アカウントが必要ですか?
400+
sign_up_now=登録はこちら。
396401
sign_up_successful=アカウントは無事に作成されました。ようこそ!
397402
confirmation_mail_sent_prompt_ex=新しい確認メールを <b>%s</b> に送信しました。 %s以内にメールボックスを確認し、登録手続きを完了してください。 登録メールアドレスが間違っている場合は、もういちどサインインすると変更することができます。
398403
must_change_password=パスワードの更新
@@ -454,6 +459,8 @@ sspi_auth_failed=SSPI認証に失敗しました
454459
password_pwned=あなたが選択したパスワードは、過去の情報漏洩事件で流出した<a target="_blank" rel="noopener noreferrer" href="https://haveibeenpwned.com/Passwords">盗まれたパスワードのリスト</a>に含まれています。 別のパスワードでもう一度試してください。 また他の登録でもこのパスワードからの変更を検討してください。
455460
password_pwned_err=HaveIBeenPwnedへのリクエストを完了できませんでした
456461
last_admin=最後の管理者は削除できません。少なくとも一人の管理者が必要です。
462+
signin_passkey=パスキーでサインイン
463+
back_to_sign_in=サインインに戻る
457464

458465
[mail]
459466
view_it_on=%s で見る
@@ -2272,6 +2279,7 @@ settings.event_wiki_desc=Wikiページが作成・名前変更・編集・削除
22722279
settings.event_release=リリース
22732280
settings.event_release_desc=リポジトリでリリースが作成・更新・削除されたとき。
22742281
settings.event_push=プッシュ
2282+
settings.event_force_push=強制プッシュ
22752283
settings.event_push_desc=Gitがリポジトリにプッシュを行ったとき。
22762284
settings.event_repository=リポジトリ
22772285
settings.event_repository_desc=リポジトリが作成・削除されたとき。
@@ -2365,10 +2373,28 @@ settings.protect_this_branch=ブランチの保護を有効にする
23652373
settings.protect_this_branch_desc=ブランチの削除を防ぎ、ブランチへのプッシュやマージを制限します。
23662374
settings.protect_disable_push=プッシュ無効
23672375
settings.protect_disable_push_desc=このブランチへのプッシュは許可されません。
2376+
settings.protect_disable_force_push=強制プッシュ無効
2377+
settings.protect_disable_force_push_desc=このブランチへの強制プッシュは許可されません。
23682378
settings.protect_enable_push=プッシュ有効
2369-
settings.protect_enable_push_desc=誰でも書き込み権限があれば、このブランチへのプッシュが許可されます。(強制プッシュ以外)
2379+
settings.protect_enable_push_desc=書き込み権限を持つ人は誰でも、このブランチにプッシュを行うことができます。(ただし強制プッシュは不可)
2380+
settings.protect_enable_force_push_all=強制プッシュ有効
2381+
settings.protect_enable_force_push_all_desc=プッシュ権限を持つ人は誰でも、このブランチに強制プッシュを行うことができます。
2382+
settings.protect_enable_force_push_allowlist=許可リストで強制プッシュを制限
2383+
settings.protect_enable_force_push_allowlist_desc=許可リストに登録された、プッシュ権限を持つユーザーまたはチームのみが、このブランチに強制プッシュを行うことができます。
23702384
settings.protect_enable_merge=マージ有効
2371-
settings.protect_enable_merge_desc=誰でも書き込み権限があれば、このブランチへのプルリクエストのマージが許可されます。
2385+
settings.protect_enable_merge_desc=書き込み権限を持つ人は誰でも、このブランチにプルリクエストをマージすることができます。
2386+
settings.protect_whitelist_committers=許可リストでプッシュを制限
2387+
settings.protect_whitelist_committers_desc=許可リストに登録されたユーザーまたはチームのみが、このブランチにプッシュを行うことができます。(ただし強制プッシュは不可)
2388+
settings.protect_whitelist_deploy_keys=プッシュ可能な書き込み権限を持つデプロイキーを許可リストに含める。
2389+
settings.protect_whitelist_users=プッシュ許可リストに含むユーザー:
2390+
settings.protect_whitelist_teams=プッシュ許可リストに含むチーム:
2391+
settings.protect_force_push_allowlist_users=強制プッシュ許可リストに含むユーザー:
2392+
settings.protect_force_push_allowlist_teams=強制プッシュ許可リストに含むチーム:
2393+
settings.protect_force_push_allowlist_deploy_keys=強制プッシュ可能なプッシュ権限を持つデプロイキーを許可リストに含める。
2394+
settings.protect_merge_whitelist_committers=マージ許可リストを有効にする
2395+
settings.protect_merge_whitelist_committers_desc=許可リストに登録したユーザーまたはチームにのみ、このブランチへのプルリクエストのマージを許可します。
2396+
settings.protect_merge_whitelist_users=マージ許可リストに含むユーザー:
2397+
settings.protect_merge_whitelist_teams=マージ許可リストに含むチーム:
23722398
settings.protect_check_status_contexts=ステータスチェックを有効にする
23732399
settings.protect_status_check_patterns=ステータスチェック パターン:
23742400
settings.protect_status_check_patterns_desc=このルールの対象ブランチがマージ可能になる前に、どのステータスチェックがパスしなければならないかを、パターンで入力します。 各行にパターンを指定します。 この設定は空にできません。
@@ -2379,6 +2405,10 @@ settings.protect_invalid_status_check_pattern=`不正なステータスチェッ
23792405
settings.protect_no_valid_status_check_patterns=有効なステータスチェックパターンがありません。
23802406
settings.protect_required_approvals=必要な承認数:
23812407
settings.protect_required_approvals_desc=肯定的なレビューの数を満たしたプルリクエストしかマージできないようにします。
2408+
settings.protect_approvals_whitelist_enabled=許可リストに登録したユーザーやチームに承認を制限
2409+
settings.protect_approvals_whitelist_enabled_desc=許可リストに登録したユーザーまたはチームによるレビューのみを、必要な承認数にカウントします。 承認の許可リストが無い場合は、書き込み権限を持つ人によるレビューを必要な承認数にカウントします。
2410+
settings.protect_approvals_whitelist_users=許可リストに含めるレビューア:
2411+
settings.protect_approvals_whitelist_teams=レビュー許可リストに含めるチーム:
23822412
settings.dismiss_stale_approvals=古くなった承認を取り消す
23832413
settings.dismiss_stale_approvals_desc=プルリクエストの内容を変える新たなコミットがブランチにプッシュされた場合、以前の承認を取り消します。
23842414
settings.ignore_stale_approvals=古くなった承認を無視する
@@ -3208,6 +3238,10 @@ config.cache_adapter=キャッシュ アダプター
32083238
config.cache_interval=キャッシュ間隔
32093239
config.cache_conn=キャッシュ接続
32103240
config.cache_item_ttl=キャッシュアイテムのTTL
3241+
config.cache_test=キャッシュのテスト
3242+
config.cache_test_failed=キャッシュの調査に失敗しました: %v.
3243+
config.cache_test_slow=キャッシュのテストは成功しましたが、応答が遅いです: %s
3244+
config.cache_test_succeeded=キャッシュのテストは成功し、応答時間は %s でした。
32113245

32123246
config.session_config=セッション設定
32133247
config.session_provider=セッション プロバイダー

0 commit comments

Comments
 (0)