mirror of
https://github.com/algerkong/AlgerMusicPlayer.git
synced 2026-05-18 11:37:31 +08:00
feat: 添加日语和韩语国际化,并且优化语言相关代码
This commit is contained in:
@@ -18,7 +18,8 @@ export default defineConfig({
|
|||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
alias: {
|
||||||
'@': resolve('src/renderer'),
|
'@': resolve('src/renderer'),
|
||||||
'@renderer': resolve('src/renderer')
|
'@renderer': resolve('src/renderer'),
|
||||||
|
'@i18n': resolve('src/i18n')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
import artist from './artist';
|
|
||||||
import common from './common';
|
|
||||||
import comp from './comp';
|
|
||||||
import donation from './donation';
|
|
||||||
import download from './download';
|
|
||||||
import favorite from './favorite';
|
|
||||||
import history from './history';
|
|
||||||
import login from './login';
|
|
||||||
import player from './player';
|
|
||||||
import search from './search';
|
|
||||||
import settings from './settings';
|
|
||||||
import songItem from './songItem';
|
|
||||||
import user from './user';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
common,
|
|
||||||
donation,
|
|
||||||
favorite,
|
|
||||||
history,
|
|
||||||
login,
|
|
||||||
player,
|
|
||||||
search,
|
|
||||||
settings,
|
|
||||||
songItem,
|
|
||||||
user,
|
|
||||||
download,
|
|
||||||
comp,
|
|
||||||
artist
|
|
||||||
};
|
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# 日本語翻訳 (Japanese Translation)
|
||||||
|
|
||||||
|
このディレクトリには、AlgerMusicPlayerの日本語翻訳ファイルが含まれています。
|
||||||
|
|
||||||
|
## ファイル構成
|
||||||
|
|
||||||
|
- `artist.ts` - アーティスト関連の翻訳
|
||||||
|
- `common.ts` - 共通の翻訳(ボタン、メッセージなど)
|
||||||
|
- `comp.ts` - コンポーネント関連の翻訳
|
||||||
|
- `donation.ts` - 寄付関連の翻訳
|
||||||
|
- `download.ts` - ダウンロード管理の翻訳
|
||||||
|
- `favorite.ts` - お気に入り機能の翻訳
|
||||||
|
- `history.ts` - 履歴機能の翻訳
|
||||||
|
- `login.ts` - ログイン関連の翻訳
|
||||||
|
- `player.ts` - プレイヤー機能の翻訳
|
||||||
|
- `search.ts` - 検索機能の翻訳
|
||||||
|
- `settings.ts` - 設定画面の翻訳
|
||||||
|
- `songItem.ts` - 楽曲アイテムの翻訳
|
||||||
|
- `user.ts` - ユーザー関連の翻訳
|
||||||
|
- `index.ts` - すべての翻訳をエクスポートするメインファイル
|
||||||
|
|
||||||
|
## 使用方法
|
||||||
|
|
||||||
|
アプリケーション内で言語を日本語に切り替えるには:
|
||||||
|
|
||||||
|
1. 設定画面を開く
|
||||||
|
2. 「言語設定」セクションを見つける
|
||||||
|
3. ドロップダウンメニューから「日本語」を選択
|
||||||
|
|
||||||
|
## 翻訳の改善
|
||||||
|
|
||||||
|
翻訳の改善や修正がある場合は、該当するファイルを編集してプルリクエストを送信してください。
|
||||||
|
|
||||||
|
## 注意事項
|
||||||
|
|
||||||
|
- すべての翻訳キーは中国語版と英語版に対応しています
|
||||||
|
- 新しい機能が追加された場合は、対応する日本語翻訳も追加する必要があります
|
||||||
|
- 文字化けを避けるため、ファイルはUTF-8エンコーディングで保存してください
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
export default {
|
||||||
|
hotSongs: '人気楽曲',
|
||||||
|
albums: 'アルバム',
|
||||||
|
description: 'アーティスト紹介'
|
||||||
|
};
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
export default {
|
||||||
|
play: '再生',
|
||||||
|
next: '次の曲',
|
||||||
|
previous: '前の曲',
|
||||||
|
volume: '音量',
|
||||||
|
settings: '設定',
|
||||||
|
search: '検索',
|
||||||
|
loading: '読み込み中...',
|
||||||
|
loadingMore: 'さらに読み込み中...',
|
||||||
|
alipay: 'Alipay',
|
||||||
|
wechat: 'WeChat Pay',
|
||||||
|
on: 'オン',
|
||||||
|
off: 'オフ',
|
||||||
|
show: '表示',
|
||||||
|
hide: '非表示',
|
||||||
|
confirm: '確認',
|
||||||
|
cancel: 'キャンセル',
|
||||||
|
configure: '設定',
|
||||||
|
open: '開く',
|
||||||
|
modify: '変更',
|
||||||
|
success: '操作成功',
|
||||||
|
error: '操作失敗',
|
||||||
|
warning: '警告',
|
||||||
|
info: 'お知らせ',
|
||||||
|
save: '保存',
|
||||||
|
delete: '削除',
|
||||||
|
refresh: '更新',
|
||||||
|
retry: '再試行',
|
||||||
|
reset: 'リセット',
|
||||||
|
back: '戻る',
|
||||||
|
copySuccess: 'クリップボードにコピーしました',
|
||||||
|
copyFailed: 'コピーに失敗しました',
|
||||||
|
validation: {
|
||||||
|
required: 'この項目は必須です',
|
||||||
|
invalidInput: '無効な入力です',
|
||||||
|
selectRequired: 'オプションを選択してください',
|
||||||
|
numberRange: '{min}から{max}の間の数値を入力してください'
|
||||||
|
},
|
||||||
|
viewMore: 'もっと見る',
|
||||||
|
noMore: 'これ以上ありません',
|
||||||
|
selectAll: '全選択',
|
||||||
|
expand: '展開',
|
||||||
|
collapse: '折りたたみ',
|
||||||
|
songCount: '{count}曲',
|
||||||
|
language: '言語',
|
||||||
|
tray: {
|
||||||
|
show: '表示',
|
||||||
|
quit: '終了',
|
||||||
|
playPause: '再生/一時停止',
|
||||||
|
prev: '前の曲',
|
||||||
|
next: '次の曲',
|
||||||
|
pause: '一時停止',
|
||||||
|
play: '再生',
|
||||||
|
favorite: 'お気に入り'
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,190 @@
|
|||||||
|
export default {
|
||||||
|
installApp: {
|
||||||
|
description: 'アプリをインストールして、より良い体験を',
|
||||||
|
noPrompt: '今後表示しない',
|
||||||
|
install: '今すぐインストール',
|
||||||
|
cancel: '後でインストール',
|
||||||
|
download: 'ダウンロード',
|
||||||
|
downloadFailed: 'ダウンロード失敗',
|
||||||
|
downloadComplete: 'ダウンロード完了',
|
||||||
|
downloadProblem: 'ダウンロードに問題がありますか?',
|
||||||
|
downloadProblemLinkText: '最新版をダウンロード'
|
||||||
|
},
|
||||||
|
playlistDrawer: {
|
||||||
|
title: 'プレイリストに追加',
|
||||||
|
createPlaylist: '新しいプレイリストを作成',
|
||||||
|
cancelCreate: '作成をキャンセル',
|
||||||
|
create: '作成',
|
||||||
|
playlistName: 'プレイリスト名',
|
||||||
|
privatePlaylist: 'プライベートプレイリスト',
|
||||||
|
publicPlaylist: 'パブリックプレイリスト',
|
||||||
|
createSuccess: 'プレイリストの作成に成功しました',
|
||||||
|
createFailed: 'プレイリストの作成に失敗しました',
|
||||||
|
addSuccess: '楽曲の追加に成功しました',
|
||||||
|
addFailed: '楽曲の追加に失敗しました',
|
||||||
|
private: 'プライベート',
|
||||||
|
public: 'パブリック',
|
||||||
|
count: '曲',
|
||||||
|
loginFirst: 'まずログインしてください',
|
||||||
|
getPlaylistFailed: 'プレイリストの取得に失敗しました',
|
||||||
|
inputPlaylistName: 'プレイリスト名を入力してください'
|
||||||
|
},
|
||||||
|
update: {
|
||||||
|
title: '新しいバージョンが見つかりました',
|
||||||
|
currentVersion: '現在のバージョン',
|
||||||
|
cancel: '後で更新',
|
||||||
|
prepareDownload: 'ダウンロード準備中...',
|
||||||
|
downloading: 'ダウンロード中...',
|
||||||
|
nowUpdate: '今すぐ更新',
|
||||||
|
downloadFailed: 'ダウンロードに失敗しました。再試行するか手動でダウンロードしてください',
|
||||||
|
startFailed: 'ダウンロードの開始に失敗しました。再試行するか手動でダウンロードしてください',
|
||||||
|
noDownloadUrl: '現在のシステムに適したインストールパッケージが見つかりません。手動でダウンロードしてください',
|
||||||
|
installConfirmTitle: '更新をインストール',
|
||||||
|
installConfirmContent: 'アプリを閉じて更新をインストールしますか?',
|
||||||
|
manualInstallTip: 'アプリを閉じた後にインストーラーが正常に起動しない場合は、ダウンロードフォルダでファイルを見つけて手動で開いてください。',
|
||||||
|
yesInstall: '今すぐインストール',
|
||||||
|
noThanks: '後でインストール',
|
||||||
|
fileLocation: 'ファイルの場所',
|
||||||
|
copy: 'パスをコピー',
|
||||||
|
copySuccess: 'パスをクリップボードにコピーしました',
|
||||||
|
copyFailed: 'コピーに失敗しました',
|
||||||
|
backgroundDownload: 'バックグラウンドダウンロード'
|
||||||
|
},
|
||||||
|
coffee: {
|
||||||
|
title: 'コーヒーをおごる',
|
||||||
|
alipay: 'Alipay',
|
||||||
|
wechat: 'WeChat Pay',
|
||||||
|
alipayQR: 'Alipay QRコード',
|
||||||
|
wechatQR: 'WeChat QRコード',
|
||||||
|
coffeeDesc: '一杯のコーヒー、一つのサポート',
|
||||||
|
coffeeDescLinkText: 'もっと見る',
|
||||||
|
qqGroup: 'QQチャンネル:algermusic',
|
||||||
|
messages: {
|
||||||
|
copySuccess: 'クリップボードにコピーしました'
|
||||||
|
},
|
||||||
|
donateList: 'コーヒーをおごる'
|
||||||
|
},
|
||||||
|
playlistType: {
|
||||||
|
title: 'プレイリストカテゴリ',
|
||||||
|
showAll: 'すべて表示',
|
||||||
|
hide: '一部を非表示'
|
||||||
|
},
|
||||||
|
recommendAlbum: {
|
||||||
|
title: '最新アルバム'
|
||||||
|
},
|
||||||
|
recommendSinger: {
|
||||||
|
title: '毎日のおすすめ',
|
||||||
|
songlist: '毎日のおすすめリスト'
|
||||||
|
},
|
||||||
|
recommendSonglist: {
|
||||||
|
title: '今週の人気音楽'
|
||||||
|
},
|
||||||
|
searchBar: {
|
||||||
|
login: 'ログイン',
|
||||||
|
toLogin: 'ログインへ',
|
||||||
|
logout: 'ログアウト',
|
||||||
|
set: '設定',
|
||||||
|
theme: 'テーマ',
|
||||||
|
restart: '再起動',
|
||||||
|
refresh: '更新',
|
||||||
|
currentVersion: '現在のバージョン',
|
||||||
|
searchPlaceholder: '何かを検索してみましょう...',
|
||||||
|
zoom: 'ページズーム',
|
||||||
|
zoom100: '標準ズーム100%',
|
||||||
|
resetZoom: 'クリックしてズームをリセット',
|
||||||
|
zoomDefault: '標準ズーム'
|
||||||
|
},
|
||||||
|
titleBar: {
|
||||||
|
closeTitle: '閉じる方法を選択してください',
|
||||||
|
minimizeToTray: 'トレイに最小化',
|
||||||
|
exitApp: 'アプリを終了',
|
||||||
|
rememberChoice: '選択を記憶する',
|
||||||
|
closeApp: 'アプリを閉じる'
|
||||||
|
},
|
||||||
|
userPlayList: {
|
||||||
|
title: '{name}のよく聞く音楽'
|
||||||
|
},
|
||||||
|
musicList: {
|
||||||
|
searchSongs: '楽曲を検索',
|
||||||
|
noSearchResults: '関連する楽曲が見つかりませんでした',
|
||||||
|
switchToNormal: 'デフォルトレイアウトに切り替え',
|
||||||
|
switchToCompact: 'コンパクトレイアウトに切り替え',
|
||||||
|
playAll: 'すべて再生',
|
||||||
|
collect: 'お気に入り',
|
||||||
|
collectSuccess: 'お気に入りに追加しました',
|
||||||
|
cancelCollectSuccess: 'お気に入りから削除しました',
|
||||||
|
operationFailed: '操作に失敗しました',
|
||||||
|
cancelCollect: 'お気に入りから削除',
|
||||||
|
addToPlaylist: 'プレイリストに追加',
|
||||||
|
addToPlaylistSuccess: 'プレイリストに追加しました',
|
||||||
|
songsAlreadyInPlaylist: '楽曲は既にプレイリストに存在します'
|
||||||
|
},
|
||||||
|
playlist: {
|
||||||
|
import: {
|
||||||
|
button: 'プレイリストインポート',
|
||||||
|
title: 'プレイリストインポート',
|
||||||
|
description: 'メタデータ/テキスト/リンクの3つの方法でプレイリストをインポートできます',
|
||||||
|
linkTab: 'リンクインポート',
|
||||||
|
textTab: 'テキストインポート',
|
||||||
|
localTab: 'メタデータインポート',
|
||||||
|
linkPlaceholder: 'プレイリストのリンクを入力してください(1行に1つ)',
|
||||||
|
textPlaceholder: '楽曲情報を入力してください。形式:楽曲名 アーティスト名',
|
||||||
|
localPlaceholder: 'JSON形式の楽曲メタデータを入力してください',
|
||||||
|
linkTips: 'サポートされているリンクソース:',
|
||||||
|
linkTip1: 'プレイリストをWeChat/Weibo/QQでシェアした後、リンクをコピー',
|
||||||
|
linkTip2: 'プレイリスト/個人ページのリンクを直接コピー',
|
||||||
|
linkTip3: '記事のリンクを直接コピー',
|
||||||
|
textTips: '楽曲情報を入力してください(1行に1曲)',
|
||||||
|
textFormat: '形式:楽曲名 アーティスト名',
|
||||||
|
localTips: '楽曲メタデータを追加してください',
|
||||||
|
localFormat: '形式例:',
|
||||||
|
songNamePlaceholder: '楽曲名',
|
||||||
|
artistNamePlaceholder: 'アーティスト名',
|
||||||
|
albumNamePlaceholder: 'アルバム名',
|
||||||
|
addSongButton: '楽曲を追加',
|
||||||
|
addLinkButton: 'リンクを追加',
|
||||||
|
importToStarPlaylist: 'お気に入りの音楽にインポート',
|
||||||
|
playlistNamePlaceholder: 'プレイリスト名を入力してください',
|
||||||
|
importButton: 'インポート開始',
|
||||||
|
emptyLinkWarning: 'プレイリストのリンクを入力してください',
|
||||||
|
emptyTextWarning: '楽曲情報を入力してください',
|
||||||
|
emptyLocalWarning: '楽曲メタデータを入力してください',
|
||||||
|
invalidJsonFormat: 'JSON形式が正しくありません',
|
||||||
|
importSuccess: 'インポートタスクの作成に成功しました',
|
||||||
|
importFailed: 'インポートに失敗しました',
|
||||||
|
importStatus: 'インポート状況',
|
||||||
|
refresh: '更新',
|
||||||
|
taskId: 'タスクID',
|
||||||
|
status: 'ステータス',
|
||||||
|
successCount: '成功数',
|
||||||
|
failReason: '失敗理由',
|
||||||
|
unknownError: '不明なエラー',
|
||||||
|
statusPending: '処理待ち',
|
||||||
|
statusProcessing: '処理中',
|
||||||
|
statusSuccess: 'インポート成功',
|
||||||
|
statusFailed: 'インポート失敗',
|
||||||
|
statusUnknown: '不明なステータス',
|
||||||
|
taskList: 'タスクリスト',
|
||||||
|
taskListTitle: 'インポートタスクリスト',
|
||||||
|
action: '操作',
|
||||||
|
select: '選択',
|
||||||
|
fetchTaskListFailed: 'タスクリストの取得に失敗しました',
|
||||||
|
noTasks: 'インポートタスクがありません',
|
||||||
|
clearTasks: 'タスクをクリア',
|
||||||
|
clearTasksConfirmTitle: 'クリア確認',
|
||||||
|
clearTasksConfirmContent: 'すべてのインポートタスク記録をクリアしますか?この操作は元に戻せません。',
|
||||||
|
confirm: '確認',
|
||||||
|
cancel: 'キャンセル',
|
||||||
|
clearTasksSuccess: 'タスクリストをクリアしました',
|
||||||
|
clearTasksFailed: 'タスクリストのクリアに失敗しました'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
settings: '設定',
|
||||||
|
user: 'ユーザー',
|
||||||
|
toplist: 'ランキング',
|
||||||
|
history: 'お気に入り履歴',
|
||||||
|
list: 'プレイリスト',
|
||||||
|
mv: 'MV',
|
||||||
|
home: 'ホーム',
|
||||||
|
search: '検索'
|
||||||
|
};
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
export default {
|
||||||
|
description: 'あなたの寄付は開発・保守作業をサポートするために使用され、サーバー保守、ドメイン更新などが含まれます。',
|
||||||
|
message: 'メッセージを残す際は、メールアドレスやGitHubユーザー名を記載してください。',
|
||||||
|
refresh: 'リストを更新',
|
||||||
|
toDonateList: 'コーヒーをおごる',
|
||||||
|
noMessage: 'メッセージがありません',
|
||||||
|
title: '寄付リスト'
|
||||||
|
};
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
export default {
|
||||||
|
title: 'ダウンロード管理',
|
||||||
|
localMusic: 'ローカル音楽',
|
||||||
|
count: '合計{count}曲',
|
||||||
|
clearAll: '記録をクリア',
|
||||||
|
settings: '設定',
|
||||||
|
tabs: {
|
||||||
|
downloading: 'ダウンロード中',
|
||||||
|
downloaded: 'ダウンロード済み'
|
||||||
|
},
|
||||||
|
empty: {
|
||||||
|
noTasks: 'ダウンロードタスクがありません',
|
||||||
|
noDownloaded: 'ダウンロード済みの楽曲がありません'
|
||||||
|
},
|
||||||
|
progress: {
|
||||||
|
total: '全体の進行状況: {progress}%'
|
||||||
|
},
|
||||||
|
status: {
|
||||||
|
downloading: 'ダウンロード中',
|
||||||
|
completed: '完了',
|
||||||
|
failed: '失敗',
|
||||||
|
unknown: '不明'
|
||||||
|
},
|
||||||
|
artist: {
|
||||||
|
unknown: '不明なアーティスト'
|
||||||
|
},
|
||||||
|
delete: {
|
||||||
|
title: '削除確認',
|
||||||
|
message: '楽曲「{filename}」を削除しますか?この操作は元に戻せません。',
|
||||||
|
confirm: '削除確認',
|
||||||
|
cancel: 'キャンセル',
|
||||||
|
success: '削除成功',
|
||||||
|
failed: '削除失敗',
|
||||||
|
fileNotFound: 'ファイルが存在しないか移動されました。記録から削除しました',
|
||||||
|
recordRemoved: 'ファイルの削除に失敗しましたが、記録から削除しました'
|
||||||
|
},
|
||||||
|
clear: {
|
||||||
|
title: 'ダウンロード記録をクリア',
|
||||||
|
message: 'すべてのダウンロード記録をクリアしますか?この操作はダウンロード済みの音楽ファイルを削除しませんが、すべての記録をクリアします。',
|
||||||
|
confirm: 'クリア確認',
|
||||||
|
cancel: 'キャンセル',
|
||||||
|
success: 'ダウンロード記録をクリアしました'
|
||||||
|
},
|
||||||
|
message: {
|
||||||
|
downloadComplete: '{filename}のダウンロードが完了しました',
|
||||||
|
downloadFailed: '{filename}のダウンロードに失敗しました: {error}'
|
||||||
|
},
|
||||||
|
loading: '読み込み中...',
|
||||||
|
playStarted: '再生開始: {name}',
|
||||||
|
playFailed: '再生失敗: {name}',
|
||||||
|
path: {
|
||||||
|
copied: 'パスをクリップボードにコピーしました',
|
||||||
|
copyFailed: 'パスのコピーに失敗しました'
|
||||||
|
},
|
||||||
|
settingsPanel: {
|
||||||
|
title: 'ダウンロード設定',
|
||||||
|
path: 'ダウンロード場所',
|
||||||
|
pathDesc: '音楽ファイルのダウンロード保存場所を設定',
|
||||||
|
pathPlaceholder: 'ダウンロードパスを選択してください',
|
||||||
|
noPathSelected: 'まずダウンロードパスを選択してください',
|
||||||
|
select: 'フォルダを選択',
|
||||||
|
open: 'フォルダを開く',
|
||||||
|
fileFormat: 'ファイル名形式',
|
||||||
|
fileFormatDesc: '音楽ダウンロード時のファイル命名形式を設定',
|
||||||
|
customFormat: 'カスタム形式',
|
||||||
|
separator: '区切り文字',
|
||||||
|
separators: {
|
||||||
|
dash: 'スペース-スペース',
|
||||||
|
underscore: 'アンダースコア',
|
||||||
|
space: 'スペース'
|
||||||
|
},
|
||||||
|
dragToArrange: 'ドラッグで並び替えまたは矢印ボタンで順序を調整:',
|
||||||
|
formatVariables: '使用可能な変数',
|
||||||
|
preview: 'プレビュー効果:',
|
||||||
|
saveSuccess: 'ダウンロード設定を保存しました',
|
||||||
|
presets: {
|
||||||
|
songArtist: '楽曲名 - アーティスト名',
|
||||||
|
artistSong: 'アーティスト名 - 楽曲名',
|
||||||
|
songOnly: '楽曲名のみ'
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
songName: '楽曲名',
|
||||||
|
artistName: 'アーティスト名',
|
||||||
|
albumName: 'アルバム名'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
export default {
|
||||||
|
title: 'お気に入り',
|
||||||
|
count: '合計{count}曲',
|
||||||
|
batchDownload: '一括ダウンロード',
|
||||||
|
download: 'ダウンロード ({count})',
|
||||||
|
emptyTip: 'まだお気に入りの楽曲がありません',
|
||||||
|
downloadSuccess: 'ダウンロード完了',
|
||||||
|
downloadFailed: 'ダウンロード失敗',
|
||||||
|
downloading: 'ダウンロード中です。しばらくお待ちください...',
|
||||||
|
selectSongsFirst: 'まずダウンロードする楽曲を選択してください',
|
||||||
|
descending: '降順',
|
||||||
|
ascending: '昇順'
|
||||||
|
};
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
export default {
|
||||||
|
title: '再生履歴',
|
||||||
|
playCount: '{count}',
|
||||||
|
getHistoryFailed: '履歴の取得に失敗しました'
|
||||||
|
};
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
export default {
|
||||||
|
title: {
|
||||||
|
qr: 'QRコードログイン',
|
||||||
|
phone: '電話番号ログイン'
|
||||||
|
},
|
||||||
|
qrTip: 'NetEase Cloudアプリでログイン',
|
||||||
|
phoneTip: 'NetEase Cloudアカウントでログイン',
|
||||||
|
placeholder: {
|
||||||
|
phone: '電話番号',
|
||||||
|
password: 'パスワード'
|
||||||
|
},
|
||||||
|
button: {
|
||||||
|
login: 'ログイン',
|
||||||
|
switchToQr: 'QRコードログイン',
|
||||||
|
switchToPhone: '電話番号ログイン'
|
||||||
|
},
|
||||||
|
message: {
|
||||||
|
loginSuccess: 'ログイン成功',
|
||||||
|
loadError: 'ログイン情報の読み込み中にエラーが発生しました',
|
||||||
|
qrCheckError: 'QRコードの状態確認中にエラーが発生しました'
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,123 @@
|
|||||||
|
export default {
|
||||||
|
nowPlaying: '再生中',
|
||||||
|
playlist: 'プレイリスト',
|
||||||
|
lyrics: '歌詞',
|
||||||
|
previous: '前へ',
|
||||||
|
play: '再生',
|
||||||
|
pause: '一時停止',
|
||||||
|
next: '次へ',
|
||||||
|
volumeUp: '音量を上げる',
|
||||||
|
volumeDown: '音量を下げる',
|
||||||
|
mute: 'ミュート',
|
||||||
|
unmute: 'ミュート解除',
|
||||||
|
songNum: '楽曲総数:{num}',
|
||||||
|
addCorrection: '{num}秒早める',
|
||||||
|
subtractCorrection: '{num}秒遅らせる',
|
||||||
|
playFailed: '現在の楽曲の再生に失敗しました。次の曲を再生します',
|
||||||
|
playMode: {
|
||||||
|
sequence: '順次再生',
|
||||||
|
loop: 'リピート再生',
|
||||||
|
random: 'ランダム再生'
|
||||||
|
},
|
||||||
|
fullscreen: {
|
||||||
|
enter: 'フルスクリーン',
|
||||||
|
exit: 'フルスクリーン終了'
|
||||||
|
},
|
||||||
|
close: '閉じる',
|
||||||
|
modeHint: {
|
||||||
|
single: 'リピート再生',
|
||||||
|
list: '自動で次の曲を再生'
|
||||||
|
},
|
||||||
|
lrc: {
|
||||||
|
noLrc: '歌詞がありません。お楽しみください'
|
||||||
|
},
|
||||||
|
reparse: {
|
||||||
|
title: '解析音源を選択',
|
||||||
|
desc: '音源をクリックして直接解析します。次回この楽曲を再生する際は選択した音源を使用します',
|
||||||
|
success: '再解析成功',
|
||||||
|
failed: '再解析失敗',
|
||||||
|
warning: '音源を選択してください',
|
||||||
|
bilibiliNotSupported: 'Bilibili動画は再解析をサポートしていません',
|
||||||
|
processing: '解析中...',
|
||||||
|
clear: 'カスタム音源をクリア'
|
||||||
|
},
|
||||||
|
playBar: {
|
||||||
|
expand: '歌詞を展開',
|
||||||
|
collapse: '歌詞を折りたたみ',
|
||||||
|
like: 'いいね',
|
||||||
|
lyric: '歌詞',
|
||||||
|
noSongPlaying: '再生中の楽曲がありません',
|
||||||
|
eq: 'イコライザー',
|
||||||
|
playList: 'プレイリスト',
|
||||||
|
reparse: '再解析',
|
||||||
|
playMode: {
|
||||||
|
sequence: '順次再生',
|
||||||
|
loop: 'ループ再生',
|
||||||
|
random: 'ランダム再生'
|
||||||
|
},
|
||||||
|
play: '再生開始',
|
||||||
|
pause: '再生一時停止',
|
||||||
|
prev: '前の曲',
|
||||||
|
next: '次の曲',
|
||||||
|
volume: '音量',
|
||||||
|
favorite: '{name}をお気に入りに追加しました',
|
||||||
|
unFavorite: '{name}をお気に入りから削除しました',
|
||||||
|
miniPlayBar: 'ミニ再生バー',
|
||||||
|
playbackSpeed: '再生速度',
|
||||||
|
advancedControls: 'その他の設定'
|
||||||
|
},
|
||||||
|
eq: {
|
||||||
|
title: 'イコライザー',
|
||||||
|
reset: 'リセット',
|
||||||
|
on: 'オン',
|
||||||
|
off: 'オフ',
|
||||||
|
bass: '低音',
|
||||||
|
midrange: '中音',
|
||||||
|
treble: '高音',
|
||||||
|
presets: {
|
||||||
|
flat: 'フラット',
|
||||||
|
pop: 'ポップ',
|
||||||
|
rock: 'ロック',
|
||||||
|
classical: 'クラシック',
|
||||||
|
jazz: 'ジャズ',
|
||||||
|
electronic: 'エレクトロニック',
|
||||||
|
hiphop: 'ヒップホップ',
|
||||||
|
rb: 'R&B',
|
||||||
|
metal: 'メタル',
|
||||||
|
vocal: 'ボーカル',
|
||||||
|
dance: 'ダンス',
|
||||||
|
acoustic: 'アコースティック',
|
||||||
|
custom: 'カスタム'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// タイマー機能関連
|
||||||
|
sleepTimer: {
|
||||||
|
title: 'スリープタイマー',
|
||||||
|
cancel: 'タイマーをキャンセル',
|
||||||
|
timeMode: '時間で停止',
|
||||||
|
songsMode: '楽曲数で停止',
|
||||||
|
playlistEnd: 'プレイリスト終了後に停止',
|
||||||
|
afterPlaylist: 'プレイリスト終了後に停止',
|
||||||
|
activeUntilEnd: 'リスト終了まで再生',
|
||||||
|
minutes: '分',
|
||||||
|
hours: '時間',
|
||||||
|
songs: '曲',
|
||||||
|
set: '設定',
|
||||||
|
timerSetSuccess: '{minutes}分後に停止するよう設定しました',
|
||||||
|
songsSetSuccess: '{songs}曲再生後に停止するよう設定しました',
|
||||||
|
playlistEndSetSuccess: 'プレイリスト終了後に停止するよう設定しました',
|
||||||
|
timerCancelled: 'スリープタイマーをキャンセルしました',
|
||||||
|
timerEnded: 'スリープタイマーが作動しました',
|
||||||
|
playbackStopped: '音楽再生を停止しました',
|
||||||
|
minutesRemaining: '残り{minutes}分',
|
||||||
|
songsRemaining: '残り{count}曲'
|
||||||
|
},
|
||||||
|
playList: {
|
||||||
|
clearAll: 'プレイリストをクリア',
|
||||||
|
alreadyEmpty: 'プレイリストは既に空です',
|
||||||
|
cleared: 'プレイリストをクリアしました',
|
||||||
|
empty: 'プレイリストが空です',
|
||||||
|
clearConfirmTitle: 'プレイリストをクリア',
|
||||||
|
clearConfirmContent: 'これによりプレイリスト内のすべての楽曲がクリアされ、現在の再生が停止されます。続行しますか?'
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
export default {
|
||||||
|
title: {
|
||||||
|
hotSearch: '人気検索リスト',
|
||||||
|
searchList: '検索リスト',
|
||||||
|
searchHistory: '検索履歴'
|
||||||
|
},
|
||||||
|
button: {
|
||||||
|
clear: 'クリア',
|
||||||
|
back: '戻る',
|
||||||
|
playAll: 'リストを再生'
|
||||||
|
},
|
||||||
|
loading: {
|
||||||
|
more: '読み込み中...',
|
||||||
|
failed: '検索に失敗しました'
|
||||||
|
},
|
||||||
|
noMore: 'これ以上ありません',
|
||||||
|
error: {
|
||||||
|
searchFailed: '検索に失敗しました'
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
single: '楽曲',
|
||||||
|
album: 'アルバム',
|
||||||
|
playlist: 'プレイリスト',
|
||||||
|
mv: 'MV',
|
||||||
|
bilibili: 'Bilibili'
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,285 @@
|
|||||||
|
export default {
|
||||||
|
theme: 'テーマ',
|
||||||
|
language: '言語',
|
||||||
|
regard: 'について',
|
||||||
|
logout: 'ログアウト',
|
||||||
|
sections: {
|
||||||
|
basic: '基本設定',
|
||||||
|
playback: '再生設定',
|
||||||
|
application: 'アプリケーション設定',
|
||||||
|
network: 'ネットワーク設定',
|
||||||
|
system: 'システム管理',
|
||||||
|
donation: '寄付サポート',
|
||||||
|
regard: 'について'
|
||||||
|
},
|
||||||
|
basic: {
|
||||||
|
themeMode: 'テーマモード',
|
||||||
|
themeModeDesc: 'ライト/ダークテーマの切り替え',
|
||||||
|
autoTheme: 'システムに従う',
|
||||||
|
manualTheme: '手動切り替え',
|
||||||
|
language: '言語設定',
|
||||||
|
languageDesc: '表示言語を切り替え',
|
||||||
|
font: 'フォント設定',
|
||||||
|
fontDesc: 'フォントを選択します。前に配置されたフォントが優先されます',
|
||||||
|
fontScope: {
|
||||||
|
global: 'グローバル',
|
||||||
|
lyric: '歌詞のみ'
|
||||||
|
},
|
||||||
|
animation: 'アニメーション速度',
|
||||||
|
animationDesc: 'アニメーションを有効にするかどうか',
|
||||||
|
animationSpeed: {
|
||||||
|
slow: '非常に遅い',
|
||||||
|
normal: '通常',
|
||||||
|
fast: '非常に速い'
|
||||||
|
},
|
||||||
|
fontPreview: {
|
||||||
|
title: 'フォントプレビュー',
|
||||||
|
chinese: '中国語',
|
||||||
|
english: 'English',
|
||||||
|
japanese: '日本語',
|
||||||
|
korean: '韓国語',
|
||||||
|
chineseText: '静夜思 床前明月光 疑是地上霜',
|
||||||
|
englishText: 'The quick brown fox jumps over the lazy dog',
|
||||||
|
japaneseText: 'あいうえお かきくけこ さしすせそ',
|
||||||
|
koreanText: '가나다라마 바사아자차 카타파하'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
playback: {
|
||||||
|
quality: '音質設定',
|
||||||
|
qualityDesc: '音楽再生の音質を選択(NetEase Cloud VIP)',
|
||||||
|
qualityOptions: {
|
||||||
|
standard: '標準',
|
||||||
|
higher: '高音質',
|
||||||
|
exhigh: '超高音質',
|
||||||
|
lossless: 'ロスレス',
|
||||||
|
hires: 'Hi-Res',
|
||||||
|
jyeffect: 'HD サラウンド',
|
||||||
|
sky: 'イマーシブサラウンド',
|
||||||
|
dolby: 'Dolby Atmos',
|
||||||
|
jymaster: '超高解像度マスター'
|
||||||
|
},
|
||||||
|
musicSources: '音源設定',
|
||||||
|
musicSourcesDesc: '音楽解析に使用する音源プラットフォームを選択',
|
||||||
|
musicSourcesWarning: '少なくとも1つの音源プラットフォームを選択する必要があります',
|
||||||
|
musicUnblockEnable: '音楽解析を有効にする',
|
||||||
|
musicUnblockEnableDesc: '有効にすると、再生できない音楽の解析を試みます',
|
||||||
|
configureMusicSources: '音源を設定',
|
||||||
|
selectedMusicSources: '選択された音源:',
|
||||||
|
noMusicSources: '音源が選択されていません',
|
||||||
|
gdmusicInfo: 'GD音楽台は複数のプラットフォーム音源を自動解析し、最適な結果を自動選択できます',
|
||||||
|
autoPlay: '自動再生',
|
||||||
|
autoPlayDesc: 'アプリを再起動した際に自動的に再生を継続するかどうか',
|
||||||
|
showStatusBar: 'ステータスバーコントロール機能を表示するかどうか',
|
||||||
|
showStatusBarContent: 'Macのステータスバーに音楽コントロール機能を表示できます(再起動後に有効)'
|
||||||
|
},
|
||||||
|
application: {
|
||||||
|
closeAction: '閉じる動作',
|
||||||
|
closeActionDesc: 'ウィンドウを閉じる際の動作を選択',
|
||||||
|
closeOptions: {
|
||||||
|
ask: '毎回確認',
|
||||||
|
minimize: 'トレイに最小化',
|
||||||
|
close: '直接終了'
|
||||||
|
},
|
||||||
|
shortcut: 'ショートカット設定',
|
||||||
|
shortcutDesc: 'グローバルショートカットをカスタマイズ',
|
||||||
|
download: 'ダウンロード管理',
|
||||||
|
downloadDesc: 'ダウンロードリストボタンを常に表示するかどうか',
|
||||||
|
unlimitedDownload: '無制限ダウンロード',
|
||||||
|
unlimitedDownloadDesc: '有効にすると音楽を無制限でダウンロードします(ダウンロード失敗の可能性があります)。デフォルトは300曲制限',
|
||||||
|
downloadPath: 'ダウンロードディレクトリ',
|
||||||
|
downloadPathDesc: '音楽ファイルのダウンロード場所を選択',
|
||||||
|
remoteControl: 'リモートコントロール',
|
||||||
|
remoteControlDesc: 'リモートコントロール機能を設定'
|
||||||
|
},
|
||||||
|
network: {
|
||||||
|
apiPort: '音楽APIポート',
|
||||||
|
apiPortDesc: '変更後はアプリの再起動が必要です',
|
||||||
|
proxy: 'プロキシ設定',
|
||||||
|
proxyDesc: '音楽にアクセスできない場合はプロキシを有効にできます',
|
||||||
|
proxyHost: 'プロキシアドレス',
|
||||||
|
proxyHostPlaceholder: 'プロキシアドレスを入力してください',
|
||||||
|
proxyPort: 'プロキシポート',
|
||||||
|
proxyPortPlaceholder: 'プロキシポートを入力してください',
|
||||||
|
realIP: 'realIP設定',
|
||||||
|
realIPDesc: '制限により、このプロジェクトは海外での使用が制限されます。realIPパラメータを使用して国内IPを渡すことで解決できます',
|
||||||
|
messages: {
|
||||||
|
proxySuccess: 'プロキシ設定を保存しました。アプリ再起動後に有効になります',
|
||||||
|
proxyError: '入力が正しいかどうか確認してください',
|
||||||
|
realIPSuccess: '実IPアドレス設定を保存しました',
|
||||||
|
realIPError: '有効なIPアドレスを入力してください'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
system: {
|
||||||
|
cache: 'キャッシュ管理',
|
||||||
|
cacheDesc: 'キャッシュをクリア',
|
||||||
|
cacheClearTitle: 'クリアするキャッシュタイプを選択してください:',
|
||||||
|
cacheTypes: {
|
||||||
|
history: {
|
||||||
|
label: '再生履歴',
|
||||||
|
description: '再生した楽曲の記録をクリア'
|
||||||
|
},
|
||||||
|
favorite: {
|
||||||
|
label: 'お気に入り記録',
|
||||||
|
description: 'ローカルのお気に入り楽曲記録をクリア(クラウドのお気に入りには影響しません)'
|
||||||
|
},
|
||||||
|
user: {
|
||||||
|
label: 'ユーザーデータ',
|
||||||
|
description: 'ログイン情報とユーザー関連データをクリア'
|
||||||
|
},
|
||||||
|
settings: {
|
||||||
|
label: 'アプリ設定',
|
||||||
|
description: 'アプリのすべてのカスタム設定をクリア'
|
||||||
|
},
|
||||||
|
downloads: {
|
||||||
|
label: 'ダウンロード記録',
|
||||||
|
description: 'ダウンロード履歴をクリア(ダウンロード済みファイルは削除されません)'
|
||||||
|
},
|
||||||
|
resources: {
|
||||||
|
label: '音楽リソース',
|
||||||
|
description: '読み込み済みの音楽ファイル、歌詞などのリソースキャッシュをクリア'
|
||||||
|
},
|
||||||
|
lyrics: {
|
||||||
|
label: '歌詞リソース',
|
||||||
|
description: '読み込み済みの歌詞リソースキャッシュをクリア'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restart: '再起動',
|
||||||
|
restartDesc: 'アプリを再起動',
|
||||||
|
messages: {
|
||||||
|
clearSuccess: 'クリア成功。一部の設定は再起動後に有効になります'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
about: {
|
||||||
|
version: 'バージョン',
|
||||||
|
checkUpdate: '更新を確認',
|
||||||
|
checking: '確認中...',
|
||||||
|
latest: '現在最新バージョンです',
|
||||||
|
hasUpdate: '新しいバージョンが見つかりました',
|
||||||
|
gotoUpdate: '更新へ',
|
||||||
|
gotoGithub: 'Githubへ',
|
||||||
|
author: '作者',
|
||||||
|
authorDesc: 'algerkong スターを付けてください🌟',
|
||||||
|
messages: {
|
||||||
|
checkError: '更新確認に失敗しました。後でもう一度お試しください'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
validation: {
|
||||||
|
selectProxyProtocol: 'プロキシプロトコルを選択してください',
|
||||||
|
proxyHost: 'プロキシアドレスを入力してください',
|
||||||
|
portNumber: '有効なポート番号を入力してください(1-65535)'
|
||||||
|
},
|
||||||
|
lyricSettings: {
|
||||||
|
title: '歌詞設定',
|
||||||
|
tabs: {
|
||||||
|
display: '表示',
|
||||||
|
interface: 'インターフェース',
|
||||||
|
typography: 'テキスト',
|
||||||
|
mobile: 'モバイル'
|
||||||
|
},
|
||||||
|
pureMode: 'ピュアモード',
|
||||||
|
hideCover: 'カバーを非表示',
|
||||||
|
centerDisplay: '中央表示',
|
||||||
|
showTranslation: '翻訳を表示',
|
||||||
|
hideLyrics: '歌詞を非表示',
|
||||||
|
hidePlayBar: '再生バーを非表示',
|
||||||
|
hideMiniPlayBar: 'ミニ再生バーを非表示',
|
||||||
|
backgroundTheme: '背景テーマ',
|
||||||
|
themeOptions: {
|
||||||
|
default: 'デフォルト',
|
||||||
|
light: 'ライト',
|
||||||
|
dark: 'ダーク'
|
||||||
|
},
|
||||||
|
fontSize: 'フォントサイズ',
|
||||||
|
fontSizeMarks: {
|
||||||
|
small: '小',
|
||||||
|
medium: '中',
|
||||||
|
large: '大'
|
||||||
|
},
|
||||||
|
letterSpacing: '文字間隔',
|
||||||
|
letterSpacingMarks: {
|
||||||
|
compact: 'コンパクト',
|
||||||
|
default: 'デフォルト',
|
||||||
|
loose: 'ゆったり'
|
||||||
|
},
|
||||||
|
lineHeight: '行の高さ',
|
||||||
|
lineHeightMarks: {
|
||||||
|
compact: 'コンパクト',
|
||||||
|
default: 'デフォルト',
|
||||||
|
loose: 'ゆったり'
|
||||||
|
},
|
||||||
|
mobileLayout: 'モバイルレイアウト',
|
||||||
|
layoutOptions: {
|
||||||
|
default: 'デフォルト',
|
||||||
|
ios: 'iOSスタイル',
|
||||||
|
android: 'Androidスタイル'
|
||||||
|
},
|
||||||
|
mobileCoverStyle: 'カバースタイル',
|
||||||
|
coverOptions: {
|
||||||
|
record: 'レコード',
|
||||||
|
square: '正方形',
|
||||||
|
full: 'フルスクリーン'
|
||||||
|
},
|
||||||
|
lyricLines: '歌詞行数',
|
||||||
|
mobileUnavailable: 'この設定はモバイルでのみ利用可能です'
|
||||||
|
},
|
||||||
|
themeColor: {
|
||||||
|
title: '歌詞テーマカラー',
|
||||||
|
presetColors: 'プリセットカラー',
|
||||||
|
customColor: 'カスタムカラー',
|
||||||
|
preview: 'プレビュー効果',
|
||||||
|
previewText: '歌詞効果',
|
||||||
|
colorNames: {
|
||||||
|
'spotify-green': 'Spotify グリーン',
|
||||||
|
'apple-blue': 'Apple ブルー',
|
||||||
|
'youtube-red': 'YouTube レッド',
|
||||||
|
orange: 'バイタルオレンジ',
|
||||||
|
purple: 'ミステリアスパープル',
|
||||||
|
pink: 'サクラピンク'
|
||||||
|
},
|
||||||
|
tooltips: {
|
||||||
|
openColorPicker: 'カラーパレットを開く',
|
||||||
|
closeColorPicker: 'カラーパレットを閉じる'
|
||||||
|
},
|
||||||
|
placeholder: '#1db954'
|
||||||
|
},
|
||||||
|
shortcutSettings: {
|
||||||
|
title: 'ショートカット設定',
|
||||||
|
shortcut: 'ショートカット',
|
||||||
|
shortcutDesc: 'ショートカットをカスタマイズ',
|
||||||
|
shortcutConflict: 'ショートカットの競合',
|
||||||
|
inputPlaceholder: 'クリックしてショートカットを入力',
|
||||||
|
resetShortcuts: 'デフォルトに戻す',
|
||||||
|
disableAll: 'すべて無効',
|
||||||
|
enableAll: 'すべて有効',
|
||||||
|
togglePlay: '再生/一時停止',
|
||||||
|
prevPlay: '前の曲',
|
||||||
|
nextPlay: '次の曲',
|
||||||
|
volumeUp: '音量を上げる',
|
||||||
|
volumeDown: '音量を下げる',
|
||||||
|
toggleFavorite: 'お気に入り/お気に入り解除',
|
||||||
|
toggleWindow: 'ウィンドウ表示/非表示',
|
||||||
|
scopeGlobal: 'グローバル',
|
||||||
|
scopeApp: 'アプリ内',
|
||||||
|
enabled: '有効',
|
||||||
|
disabled: '無効',
|
||||||
|
messages: {
|
||||||
|
resetSuccess: 'デフォルトのショートカットに戻しました。保存を忘れずに',
|
||||||
|
conflict: '競合するショートカットがあります。再設定してください',
|
||||||
|
saveSuccess: 'ショートカット設定を保存しました',
|
||||||
|
saveError: 'ショートカットの保存に失敗しました。再試行してください',
|
||||||
|
cancelEdit: '変更をキャンセルしました',
|
||||||
|
disableAll: 'すべてのショートカットを無効にしました。保存を忘れずに',
|
||||||
|
enableAll: 'すべてのショートカットを有効にしました。保存を忘れずに'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
remoteControl: {
|
||||||
|
title: 'リモートコントロール',
|
||||||
|
enable: 'リモートコントロールを有効にする',
|
||||||
|
port: 'サービスポート',
|
||||||
|
allowedIps: '許可されたIPアドレス',
|
||||||
|
addIp: 'IPを追加',
|
||||||
|
emptyListHint: '空のリストはすべてのIPアクセスを許可することを意味します',
|
||||||
|
saveSuccess: 'リモートコントロール設定を保存しました',
|
||||||
|
accessInfo: 'リモートコントロールアクセスアドレス:'
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
export default {
|
||||||
|
menu: {
|
||||||
|
play: '再生',
|
||||||
|
playNext: '次に再生',
|
||||||
|
download: '楽曲をダウンロード',
|
||||||
|
addToPlaylist: 'プレイリストに追加',
|
||||||
|
favorite: 'いいね',
|
||||||
|
unfavorite: 'いいね解除',
|
||||||
|
removeFromPlaylist: 'プレイリストから削除',
|
||||||
|
dislike: '嫌い',
|
||||||
|
undislike: '嫌い解除'
|
||||||
|
},
|
||||||
|
message: {
|
||||||
|
downloading: 'ダウンロード中です。しばらくお待ちください...',
|
||||||
|
downloadFailed: 'ダウンロードに失敗しました',
|
||||||
|
downloadQueued: 'ダウンロードキューに追加しました',
|
||||||
|
addedToNextPlay: '次の再生に追加しました',
|
||||||
|
getUrlFailed: '音楽ダウンロードアドレスの取得に失敗しました。ログインしているか確認してください'
|
||||||
|
},
|
||||||
|
dialog: {
|
||||||
|
dislike: {
|
||||||
|
title: 'お知らせ!',
|
||||||
|
content: 'この楽曲を嫌いにしますか?再度アクセスすると毎日のおすすめから除外されます。',
|
||||||
|
positiveText: '嫌い',
|
||||||
|
negativeText: 'キャンセル'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
export default {
|
||||||
|
profile: {
|
||||||
|
followers: 'フォロワー',
|
||||||
|
following: 'フォロー中',
|
||||||
|
level: 'レベル'
|
||||||
|
},
|
||||||
|
playlist: {
|
||||||
|
created: '作成したプレイリスト',
|
||||||
|
mine: '私が作成した',
|
||||||
|
trackCount: '{count}曲',
|
||||||
|
playCount: '{count}回再生'
|
||||||
|
},
|
||||||
|
ranking: {
|
||||||
|
title: '聴取ランキング',
|
||||||
|
playCount: '{count}回'
|
||||||
|
},
|
||||||
|
follow: {
|
||||||
|
title: 'フォローリスト',
|
||||||
|
viewPlaylist: 'プレイリストを見る',
|
||||||
|
noFollowings: 'フォローがありません',
|
||||||
|
loadMore: 'さらに読み込み',
|
||||||
|
noSignature: 'この人は怠け者で、何も残していません',
|
||||||
|
userFollowsTitle: 'のフォロー',
|
||||||
|
myFollowsTitle: '私のフォロー'
|
||||||
|
},
|
||||||
|
follower: {
|
||||||
|
title: 'フォロワーリスト',
|
||||||
|
noFollowers: 'フォロワーがいません',
|
||||||
|
loadMore: 'さらに読み込み',
|
||||||
|
userFollowersTitle: 'のフォロワー',
|
||||||
|
myFollowersTitle: '私のフォロワー'
|
||||||
|
},
|
||||||
|
detail: {
|
||||||
|
playlists: 'プレイリスト',
|
||||||
|
records: '聴取ランキング',
|
||||||
|
noPlaylists: 'プレイリストがありません',
|
||||||
|
noRecords: '聴取記録がありません',
|
||||||
|
artist: 'アーティスト',
|
||||||
|
noSignature: 'この人は怠け者で、何も残していません',
|
||||||
|
invalidUserId: '無効なユーザーID',
|
||||||
|
noRecordPermission: '{name}は聴取ランキングを見せてくれません'
|
||||||
|
},
|
||||||
|
message: {
|
||||||
|
loadFailed: 'ユーザーページの読み込みに失敗しました',
|
||||||
|
deleteSuccess: '削除成功',
|
||||||
|
deleteFailed: '削除失敗'
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
export default {
|
||||||
|
hotSongs: '인기 곡',
|
||||||
|
albums: '앨범',
|
||||||
|
description: '아티스트 소개'
|
||||||
|
};
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
export default {
|
||||||
|
play: '재생',
|
||||||
|
next: '다음 곡',
|
||||||
|
previous: '이전 곡',
|
||||||
|
volume: '볼륨',
|
||||||
|
settings: '설정',
|
||||||
|
search: '검색',
|
||||||
|
loading: '로딩 중...',
|
||||||
|
loadingMore: '더 불러오기...',
|
||||||
|
alipay: '알리페이',
|
||||||
|
wechat: '위챗 페이',
|
||||||
|
on: '켜기',
|
||||||
|
off: '끄기',
|
||||||
|
show: '표시',
|
||||||
|
hide: '숨기기',
|
||||||
|
confirm: '확인',
|
||||||
|
cancel: '취소',
|
||||||
|
configure: '구성',
|
||||||
|
open: '열기',
|
||||||
|
modify: '수정',
|
||||||
|
success: '작업 성공',
|
||||||
|
error: '작업 실패',
|
||||||
|
warning: '경고',
|
||||||
|
info: '알림',
|
||||||
|
save: '저장',
|
||||||
|
delete: '삭제',
|
||||||
|
refresh: '새로고침',
|
||||||
|
retry: '다시 시도',
|
||||||
|
reset: '재설정',
|
||||||
|
back: '뒤로',
|
||||||
|
copySuccess: '클립보드에 복사됨',
|
||||||
|
copyFailed: '복사 실패',
|
||||||
|
validation: {
|
||||||
|
required: '이 항목은 필수입니다',
|
||||||
|
invalidInput: '잘못된 입력',
|
||||||
|
selectRequired: '옵션을 선택해주세요',
|
||||||
|
numberRange: '{min}에서 {max} 사이의 숫자를 입력해주세요'
|
||||||
|
},
|
||||||
|
viewMore: '더 보기',
|
||||||
|
noMore: '더 이상 없음',
|
||||||
|
selectAll: '전체 선택',
|
||||||
|
expand: '펼치기',
|
||||||
|
collapse: '접기',
|
||||||
|
songCount: '{count}곡',
|
||||||
|
language: '언어',
|
||||||
|
tray: {
|
||||||
|
show: '표시',
|
||||||
|
quit: '종료',
|
||||||
|
playPause: '재생/일시정지',
|
||||||
|
prev: '이전 곡',
|
||||||
|
next: '다음 곡',
|
||||||
|
pause: '일시정지',
|
||||||
|
play: '재생',
|
||||||
|
favorite: '즐겨찾기'
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,190 @@
|
|||||||
|
export default {
|
||||||
|
installApp: {
|
||||||
|
description: '앱을 설치하여 더 나은 경험을 얻으세요',
|
||||||
|
noPrompt: '다시 묻지 않기',
|
||||||
|
install: '지금 설치',
|
||||||
|
cancel: '나중에 설치',
|
||||||
|
download: '다운로드',
|
||||||
|
downloadFailed: '다운로드 실패',
|
||||||
|
downloadComplete: '다운로드 완료',
|
||||||
|
downloadProblem: '다운로드에 문제가 있나요?',
|
||||||
|
downloadProblemLinkText: '최신 버전 다운로드'
|
||||||
|
},
|
||||||
|
playlistDrawer: {
|
||||||
|
title: '플레이리스트에 추가',
|
||||||
|
createPlaylist: '새 플레이리스트 만들기',
|
||||||
|
cancelCreate: '만들기 취소',
|
||||||
|
create: '만들기',
|
||||||
|
playlistName: '플레이리스트 이름',
|
||||||
|
privatePlaylist: '비공개 플레이리스트',
|
||||||
|
publicPlaylist: '공개 플레이리스트',
|
||||||
|
createSuccess: '플레이리스트 생성 성공',
|
||||||
|
createFailed: '플레이리스트 생성 실패',
|
||||||
|
addSuccess: '곡 추가 성공',
|
||||||
|
addFailed: '곡 추가 실패',
|
||||||
|
private: '비공개',
|
||||||
|
public: '공개',
|
||||||
|
count: '곡',
|
||||||
|
loginFirst: '먼저 로그인해주세요',
|
||||||
|
getPlaylistFailed: '플레이리스트 가져오기 실패',
|
||||||
|
inputPlaylistName: '플레이리스트 이름을 입력해주세요'
|
||||||
|
},
|
||||||
|
update: {
|
||||||
|
title: '새 버전 발견',
|
||||||
|
currentVersion: '현재 버전',
|
||||||
|
cancel: '나중에 업데이트',
|
||||||
|
prepareDownload: '다운로드 준비 중...',
|
||||||
|
downloading: '다운로드 중...',
|
||||||
|
nowUpdate: '지금 업데이트',
|
||||||
|
downloadFailed: '다운로드 실패, 다시 시도하거나 수동으로 다운로드해주세요',
|
||||||
|
startFailed: '다운로드 시작 실패, 다시 시도하거나 수동으로 다운로드해주세요',
|
||||||
|
noDownloadUrl: '현재 시스템에 적합한 설치 패키지를 찾을 수 없습니다. 수동으로 다운로드해주세요',
|
||||||
|
installConfirmTitle: '업데이트 설치',
|
||||||
|
installConfirmContent: '앱을 닫고 업데이트를 설치하시겠습니까?',
|
||||||
|
manualInstallTip: '앱을 닫은 후 설치 프로그램이 정상적으로 나타나지 않으면 다운로드 폴더에서 파일을 찾아 수동으로 열어주세요.',
|
||||||
|
yesInstall: '지금 설치',
|
||||||
|
noThanks: '나중에 설치',
|
||||||
|
fileLocation: '파일 위치',
|
||||||
|
copy: '경로 복사',
|
||||||
|
copySuccess: '경로가 클립보드에 복사됨',
|
||||||
|
copyFailed: '복사 실패',
|
||||||
|
backgroundDownload: '백그라운드 다운로드'
|
||||||
|
},
|
||||||
|
coffee: {
|
||||||
|
title: '커피 한 잔 사주세요',
|
||||||
|
alipay: '알리페이',
|
||||||
|
wechat: '위챗 페이',
|
||||||
|
alipayQR: '알리페이 결제 QR코드',
|
||||||
|
wechatQR: '위챗 결제 QR코드',
|
||||||
|
coffeeDesc: '커피 한 잔, 하나의 지원',
|
||||||
|
coffeeDescLinkText: '더 보기',
|
||||||
|
qqGroup: 'QQ 채널: algermusic',
|
||||||
|
messages: {
|
||||||
|
copySuccess: '클립보드에 복사됨'
|
||||||
|
},
|
||||||
|
donateList: '커피 한 잔 사주세요'
|
||||||
|
},
|
||||||
|
playlistType: {
|
||||||
|
title: '플레이리스트 분류',
|
||||||
|
showAll: '모두 표시',
|
||||||
|
hide: '일부 숨기기'
|
||||||
|
},
|
||||||
|
recommendAlbum: {
|
||||||
|
title: '최신 앨범'
|
||||||
|
},
|
||||||
|
recommendSinger: {
|
||||||
|
title: '일일 추천',
|
||||||
|
songlist: '일일 추천 목록'
|
||||||
|
},
|
||||||
|
recommendSonglist: {
|
||||||
|
title: '이번 주 인기 음악'
|
||||||
|
},
|
||||||
|
searchBar: {
|
||||||
|
login: '로그인',
|
||||||
|
toLogin: '로그인하기',
|
||||||
|
logout: '로그아웃',
|
||||||
|
set: '설정',
|
||||||
|
theme: '테마',
|
||||||
|
restart: '재시작',
|
||||||
|
refresh: '새로고침',
|
||||||
|
currentVersion: '현재 버전',
|
||||||
|
searchPlaceholder: '검색해보세요...',
|
||||||
|
zoom: '페이지 확대/축소',
|
||||||
|
zoom100: '표준 확대/축소 100%',
|
||||||
|
resetZoom: '클릭하여 확대/축소 재설정',
|
||||||
|
zoomDefault: '표준 확대/축소'
|
||||||
|
},
|
||||||
|
titleBar: {
|
||||||
|
closeTitle: '닫기 방법을 선택해주세요',
|
||||||
|
minimizeToTray: '트레이로 최소화',
|
||||||
|
exitApp: '앱 종료',
|
||||||
|
rememberChoice: '선택 기억하기',
|
||||||
|
closeApp: '앱 닫기'
|
||||||
|
},
|
||||||
|
userPlayList: {
|
||||||
|
title: '{name}의 자주 듣는 음악'
|
||||||
|
},
|
||||||
|
musicList: {
|
||||||
|
searchSongs: '곡 검색',
|
||||||
|
noSearchResults: '관련 곡을 찾을 수 없습니다',
|
||||||
|
switchToNormal: '기본 레이아웃으로 전환',
|
||||||
|
switchToCompact: '컴팩트 레이아웃으로 전환',
|
||||||
|
playAll: '모두 재생',
|
||||||
|
collect: '수집',
|
||||||
|
collectSuccess: '수집 성공',
|
||||||
|
cancelCollectSuccess: '수집 취소 성공',
|
||||||
|
operationFailed: '작업 실패',
|
||||||
|
cancelCollect: '수집 취소',
|
||||||
|
addToPlaylist: '재생 목록에 추가',
|
||||||
|
addToPlaylistSuccess: '재생 목록에 추가 성공',
|
||||||
|
songsAlreadyInPlaylist: '곡이 이미 재생 목록에 있습니다'
|
||||||
|
},
|
||||||
|
playlist: {
|
||||||
|
import: {
|
||||||
|
button: '플레이리스트 가져오기',
|
||||||
|
title: '플레이리스트 가져오기',
|
||||||
|
description: '메타데이터/텍스트/링크 세 가지 방법으로 플레이리스트 가져오기 지원',
|
||||||
|
linkTab: '링크 가져오기',
|
||||||
|
textTab: '텍스트 가져오기',
|
||||||
|
localTab: '메타데이터 가져오기',
|
||||||
|
linkPlaceholder: '플레이리스트 링크를 입력하세요. 한 줄에 하나씩',
|
||||||
|
textPlaceholder: '곡 정보를 입력하세요. 형식: 곡명 가수명',
|
||||||
|
localPlaceholder: 'JSON 형식의 곡 메타데이터를 입력하세요',
|
||||||
|
linkTips: '지원되는 링크 소스:',
|
||||||
|
linkTip1: '플레이리스트를 위챗/웨이보/QQ로 공유한 후 링크 복사',
|
||||||
|
linkTip2: '플레이리스트/개인 홈페이지 링크 직접 복사',
|
||||||
|
linkTip3: '기사 링크 직접 복사',
|
||||||
|
textTips: '곡 정보를 입력하세요. 한 줄에 한 곡씩',
|
||||||
|
textFormat: '형식: 곡명 가수명',
|
||||||
|
localTips: '곡 메타데이터를 추가해주세요',
|
||||||
|
localFormat: '형식 예시:',
|
||||||
|
songNamePlaceholder: '곡명',
|
||||||
|
artistNamePlaceholder: '아티스트명',
|
||||||
|
albumNamePlaceholder: '앨범명',
|
||||||
|
addSongButton: '곡 추가',
|
||||||
|
addLinkButton: '링크 추가',
|
||||||
|
importToStarPlaylist: '내가 좋아하는 음악으로 가져오기',
|
||||||
|
playlistNamePlaceholder: '플레이리스트 이름을 입력하세요',
|
||||||
|
importButton: '가져오기 시작',
|
||||||
|
emptyLinkWarning: '플레이리스트 링크를 입력해주세요',
|
||||||
|
emptyTextWarning: '곡 정보를 입력해주세요',
|
||||||
|
emptyLocalWarning: '곡 메타데이터를 입력해주세요',
|
||||||
|
invalidJsonFormat: 'JSON 형식이 올바르지 않습니다',
|
||||||
|
importSuccess: '가져오기 작업 생성 성공',
|
||||||
|
importFailed: '가져오기 실패',
|
||||||
|
importStatus: '가져오기 상태',
|
||||||
|
refresh: '새로고침',
|
||||||
|
taskId: '작업 ID',
|
||||||
|
status: '상태',
|
||||||
|
successCount: '성공 수',
|
||||||
|
failReason: '실패 이유',
|
||||||
|
unknownError: '알 수 없는 오류',
|
||||||
|
statusPending: '처리 대기 중',
|
||||||
|
statusProcessing: '처리 중',
|
||||||
|
statusSuccess: '가져오기 성공',
|
||||||
|
statusFailed: '가져오기 실패',
|
||||||
|
statusUnknown: '알 수 없는 상태',
|
||||||
|
taskList: '작업 목록',
|
||||||
|
taskListTitle: '가져오기 작업 목록',
|
||||||
|
action: '작업',
|
||||||
|
select: '선택',
|
||||||
|
fetchTaskListFailed: '작업 목록 가져오기 실패',
|
||||||
|
noTasks: '가져오기 작업이 없습니다',
|
||||||
|
clearTasks: '작업 지우기',
|
||||||
|
clearTasksConfirmTitle: '지우기 확인',
|
||||||
|
clearTasksConfirmContent: '모든 가져오기 작업 기록을 지우시겠습니까? 이 작업은 되돌릴 수 없습니다.',
|
||||||
|
confirm: '확인',
|
||||||
|
cancel: '취소',
|
||||||
|
clearTasksSuccess: '작업 목록이 지워졌습니다',
|
||||||
|
clearTasksFailed: '작업 목록 지우기 실패'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
settings: '설정',
|
||||||
|
user: '사용자',
|
||||||
|
toplist: '순위',
|
||||||
|
history: '수집 기록',
|
||||||
|
list: '플레이리스트',
|
||||||
|
mv: 'MV',
|
||||||
|
home: '홈',
|
||||||
|
search: '검색'
|
||||||
|
};
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
export default {
|
||||||
|
description: '귀하의 기부는 서버 유지보수, 도메인 갱신 등을 포함한 개발 및 유지보수 작업을 지원하는 데 사용됩니다.',
|
||||||
|
message: '메시지를 남길 때 이메일이나 GitHub 이름을 남겨주세요.',
|
||||||
|
refresh: '목록 새로고침',
|
||||||
|
toDonateList: '커피 한 잔 사주세요',
|
||||||
|
noMessage: '메시지가 없습니다',
|
||||||
|
title: '기부 목록'
|
||||||
|
};
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
export default {
|
||||||
|
title: '다운로드 관리',
|
||||||
|
localMusic: '로컬 음악',
|
||||||
|
count: '총 {count}곡',
|
||||||
|
clearAll: '기록 지우기',
|
||||||
|
settings: '설정',
|
||||||
|
tabs: {
|
||||||
|
downloading: '다운로드 중',
|
||||||
|
downloaded: '다운로드 완료'
|
||||||
|
},
|
||||||
|
empty: {
|
||||||
|
noTasks: '다운로드 작업이 없습니다',
|
||||||
|
noDownloaded: '다운로드된 곡이 없습니다'
|
||||||
|
},
|
||||||
|
progress: {
|
||||||
|
total: '전체 진행률: {progress}%'
|
||||||
|
},
|
||||||
|
status: {
|
||||||
|
downloading: '다운로드 중',
|
||||||
|
completed: '완료',
|
||||||
|
failed: '실패',
|
||||||
|
unknown: '알 수 없음'
|
||||||
|
},
|
||||||
|
artist: {
|
||||||
|
unknown: '알 수 없는 가수'
|
||||||
|
},
|
||||||
|
delete: {
|
||||||
|
title: '삭제 확인',
|
||||||
|
message: '곡 "{filename}"을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.',
|
||||||
|
confirm: '삭제 확인',
|
||||||
|
cancel: '취소',
|
||||||
|
success: '삭제 성공',
|
||||||
|
failed: '삭제 실패',
|
||||||
|
fileNotFound: '파일이 존재하지 않거나 이동되었습니다. 기록에서 제거되었습니다',
|
||||||
|
recordRemoved: '파일 삭제 실패, 하지만 기록에서 제거되었습니다'
|
||||||
|
},
|
||||||
|
clear: {
|
||||||
|
title: '다운로드 기록 지우기',
|
||||||
|
message: '모든 다운로드 기록을 지우시겠습니까? 이 작업은 다운로드된 음악 파일을 삭제하지 않지만 모든 기록을 지웁니다.',
|
||||||
|
confirm: '지우기 확인',
|
||||||
|
cancel: '취소',
|
||||||
|
success: '다운로드 기록이 지워졌습니다'
|
||||||
|
},
|
||||||
|
message: {
|
||||||
|
downloadComplete: '{filename} 다운로드 완료',
|
||||||
|
downloadFailed: '{filename} 다운로드 실패: {error}'
|
||||||
|
},
|
||||||
|
loading: '로딩 중...',
|
||||||
|
playStarted: '재생 시작: {name}',
|
||||||
|
playFailed: '재생 실패: {name}',
|
||||||
|
path: {
|
||||||
|
copied: '경로가 클립보드에 복사됨',
|
||||||
|
copyFailed: '경로 복사 실패'
|
||||||
|
},
|
||||||
|
settingsPanel: {
|
||||||
|
title: '다운로드 설정',
|
||||||
|
path: '다운로드 위치',
|
||||||
|
pathDesc: '음악 파일 다운로드 저장 위치 설정',
|
||||||
|
pathPlaceholder: '다운로드 경로를 선택해주세요',
|
||||||
|
noPathSelected: '먼저 다운로드 경로를 선택해주세요',
|
||||||
|
select: '폴더 선택',
|
||||||
|
open: '폴더 열기',
|
||||||
|
fileFormat: '파일명 형식',
|
||||||
|
fileFormatDesc: '음악 다운로드 시 파일 이름 형식 설정',
|
||||||
|
customFormat: '사용자 정의 형식',
|
||||||
|
separator: '구분자',
|
||||||
|
separators: {
|
||||||
|
dash: '공백-공백',
|
||||||
|
underscore: '밑줄',
|
||||||
|
space: '공백'
|
||||||
|
},
|
||||||
|
dragToArrange: '드래그하여 정렬하거나 화살표 버튼을 사용하여 순서 조정:',
|
||||||
|
formatVariables: '사용 가능한 변수',
|
||||||
|
preview: '미리보기 효과:',
|
||||||
|
saveSuccess: '다운로드 설정이 저장됨',
|
||||||
|
presets: {
|
||||||
|
songArtist: '곡명 - 가수명',
|
||||||
|
artistSong: '가수명 - 곡명',
|
||||||
|
songOnly: '곡명만'
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
songName: '곡명',
|
||||||
|
artistName: '가수명',
|
||||||
|
albumName: '앨범명'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
export default {
|
||||||
|
title: '내 수집',
|
||||||
|
count: '총 {count}곡',
|
||||||
|
batchDownload: '일괄 다운로드',
|
||||||
|
download: '다운로드 ({count})',
|
||||||
|
emptyTip: '아직 수집한 곡이 없습니다',
|
||||||
|
downloadSuccess: '다운로드 완료',
|
||||||
|
downloadFailed: '다운로드 실패',
|
||||||
|
downloading: '다운로드 중입니다. 잠시만 기다려주세요...',
|
||||||
|
selectSongsFirst: '먼저 다운로드할 곡을 선택해주세요',
|
||||||
|
descending: '내림차순',
|
||||||
|
ascending: '오름차순'
|
||||||
|
};
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
export default {
|
||||||
|
title: '재생 기록',
|
||||||
|
playCount: '{count}',
|
||||||
|
getHistoryFailed: '기록 가져오기 실패'
|
||||||
|
};
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
export default {
|
||||||
|
title: {
|
||||||
|
qr: 'QR코드 로그인',
|
||||||
|
phone: '휴대폰 번호 로그인'
|
||||||
|
},
|
||||||
|
qrTip: '넷이즈 클라우드 뮤직 앱으로 QR코드를 스캔하여 로그인',
|
||||||
|
phoneTip: '넷이즈 클라우드 계정으로 로그인',
|
||||||
|
placeholder: {
|
||||||
|
phone: '휴대폰 번호',
|
||||||
|
password: '비밀번호'
|
||||||
|
},
|
||||||
|
button: {
|
||||||
|
login: '로그인',
|
||||||
|
switchToQr: 'QR코드 로그인',
|
||||||
|
switchToPhone: '휴대폰 번호 로그인'
|
||||||
|
},
|
||||||
|
message: {
|
||||||
|
loginSuccess: '로그인 성공',
|
||||||
|
loadError: '로그인 정보 로드 중 오류 발생',
|
||||||
|
qrCheckError: 'QR코드 상태 확인 중 오류 발생'
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,122 @@
|
|||||||
|
export default {
|
||||||
|
nowPlaying: '현재 재생 중',
|
||||||
|
playlist: '재생 목록',
|
||||||
|
lyrics: '가사',
|
||||||
|
previous: '이전',
|
||||||
|
play: '재생',
|
||||||
|
pause: '일시정지',
|
||||||
|
next: '다음',
|
||||||
|
volumeUp: '볼륨 증가',
|
||||||
|
volumeDown: '볼륨 감소',
|
||||||
|
mute: '음소거',
|
||||||
|
unmute: '음소거 해제',
|
||||||
|
songNum: '총 곡 수: {num}',
|
||||||
|
addCorrection: '{num}초 앞당기기',
|
||||||
|
subtractCorrection: '{num}초 지연',
|
||||||
|
playFailed: '현재 곡 재생 실패, 다음 곡 재생',
|
||||||
|
playMode: {
|
||||||
|
sequence: '순차 재생',
|
||||||
|
loop: '한 곡 반복',
|
||||||
|
random: '랜덤 재생'
|
||||||
|
},
|
||||||
|
fullscreen: {
|
||||||
|
enter: '전체화면',
|
||||||
|
exit: '전체화면 종료'
|
||||||
|
},
|
||||||
|
close: '닫기',
|
||||||
|
modeHint: {
|
||||||
|
single: '한 곡 반복',
|
||||||
|
list: '자동으로 다음 곡 재생'
|
||||||
|
},
|
||||||
|
lrc: {
|
||||||
|
noLrc: '가사가 없습니다. 음악을 감상해주세요'
|
||||||
|
},
|
||||||
|
reparse: {
|
||||||
|
title: '음원 선택',
|
||||||
|
desc: '음원을 클릭하여 직접 분석하세요. 다음에 이 곡을 재생할 때 선택한 음원을 사용합니다',
|
||||||
|
success: '재분석 성공',
|
||||||
|
failed: '재분석 실패',
|
||||||
|
warning: '음원을 선택해주세요',
|
||||||
|
bilibiliNotSupported: 'B站 비디오는 재분석을 지원하지 않습니다',
|
||||||
|
processing: '분석 중...',
|
||||||
|
clear: '사용자 정의 음원 지우기'
|
||||||
|
},
|
||||||
|
playBar: {
|
||||||
|
expand: '가사 펼치기',
|
||||||
|
collapse: '가사 접기',
|
||||||
|
like: '좋아요',
|
||||||
|
lyric: '가사',
|
||||||
|
noSongPlaying: '재생 중인 곡이 없습니다',
|
||||||
|
eq: '이퀄라이저',
|
||||||
|
playList: '재생 목록',
|
||||||
|
reparse: '재분석',
|
||||||
|
playMode: {
|
||||||
|
sequence: '순차 재생',
|
||||||
|
loop: '반복 재생',
|
||||||
|
random: '랜덤 재생'
|
||||||
|
},
|
||||||
|
play: '재생 시작',
|
||||||
|
pause: '재생 일시정지',
|
||||||
|
prev: '이전 곡',
|
||||||
|
next: '다음 곡',
|
||||||
|
volume: '볼륨',
|
||||||
|
favorite: '{name} 즐겨찾기 추가됨',
|
||||||
|
unFavorite: '{name} 즐겨찾기 해제됨',
|
||||||
|
miniPlayBar: '미니 재생바',
|
||||||
|
playbackSpeed: '재생 속도',
|
||||||
|
advancedControls: '고급 설정'
|
||||||
|
},
|
||||||
|
eq: {
|
||||||
|
title: '이퀄라이저',
|
||||||
|
reset: '재설정',
|
||||||
|
on: '켜기',
|
||||||
|
off: '끄기',
|
||||||
|
bass: '저음',
|
||||||
|
midrange: '중음',
|
||||||
|
treble: '고음',
|
||||||
|
presets: {
|
||||||
|
flat: '플랫',
|
||||||
|
pop: '팝',
|
||||||
|
rock: '록',
|
||||||
|
classical: '클래식',
|
||||||
|
jazz: '재즈',
|
||||||
|
electronic: '일렉트로닉',
|
||||||
|
hiphop: '힙합',
|
||||||
|
rb: 'R&B',
|
||||||
|
metal: '메탈',
|
||||||
|
vocal: '보컬',
|
||||||
|
dance: '댄스',
|
||||||
|
acoustic: '어쿠스틱',
|
||||||
|
custom: '사용자 정의'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
sleepTimer: {
|
||||||
|
title: '타이머 종료',
|
||||||
|
cancel: '타이머 취소',
|
||||||
|
timeMode: '시간으로 종료',
|
||||||
|
songsMode: '곡 수로 종료',
|
||||||
|
playlistEnd: '재생 목록 완료 후 종료',
|
||||||
|
afterPlaylist: '재생 목록 완료 후 종료',
|
||||||
|
activeUntilEnd: '목록 끝까지 재생',
|
||||||
|
minutes: '분',
|
||||||
|
hours: '시간',
|
||||||
|
songs: '곡',
|
||||||
|
set: '설정',
|
||||||
|
timerSetSuccess: '{minutes}분 후 종료로 설정됨',
|
||||||
|
songsSetSuccess: '{songs}곡 재생 후 종료로 설정됨',
|
||||||
|
playlistEndSetSuccess: '재생 목록 완료 후 종료로 설정됨',
|
||||||
|
timerCancelled: '타이머 종료 취소됨',
|
||||||
|
timerEnded: '타이머 종료 실행됨',
|
||||||
|
playbackStopped: '음악 재생이 중지됨',
|
||||||
|
minutesRemaining: '남은 시간 {minutes}분',
|
||||||
|
songsRemaining: '남은 곡 수 {count}곡'
|
||||||
|
},
|
||||||
|
playList: {
|
||||||
|
clearAll: '재생 목록 비우기',
|
||||||
|
alreadyEmpty: '재생 목록이 이미 비어있습니다',
|
||||||
|
cleared: '재생 목록이 비워졌습니다',
|
||||||
|
empty: '재생 목록이 비어있습니다',
|
||||||
|
clearConfirmTitle: '재생 목록 비우기',
|
||||||
|
clearConfirmContent: '재생 목록의 모든 곡을 삭제하고 현재 재생을 중지합니다. 계속하시겠습니까?'
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
export default {
|
||||||
|
title: {
|
||||||
|
hotSearch: '인기 검색',
|
||||||
|
searchList: '검색 목록',
|
||||||
|
searchHistory: '검색 기록'
|
||||||
|
},
|
||||||
|
button: {
|
||||||
|
clear: '지우기',
|
||||||
|
back: '뒤로',
|
||||||
|
playAll: '재생 목록'
|
||||||
|
},
|
||||||
|
loading: {
|
||||||
|
more: '로딩 중...',
|
||||||
|
failed: '검색 실패'
|
||||||
|
},
|
||||||
|
noMore: '더 이상 없음',
|
||||||
|
error: {
|
||||||
|
searchFailed: '검색 실패'
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
single: '단일곡',
|
||||||
|
album: '앨범',
|
||||||
|
playlist: '플레이리스트',
|
||||||
|
mv: 'MV',
|
||||||
|
bilibili: 'B站'
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,285 @@
|
|||||||
|
export default {
|
||||||
|
theme: '테마',
|
||||||
|
language: '언어',
|
||||||
|
regard: '정보',
|
||||||
|
logout: '로그아웃',
|
||||||
|
sections: {
|
||||||
|
basic: '기본 설정',
|
||||||
|
playback: '재생 설정',
|
||||||
|
application: '애플리케이션 설정',
|
||||||
|
network: '네트워크 설정',
|
||||||
|
system: '시스템 관리',
|
||||||
|
donation: '후원 지원',
|
||||||
|
regard: '정보'
|
||||||
|
},
|
||||||
|
basic: {
|
||||||
|
themeMode: '테마 모드',
|
||||||
|
themeModeDesc: '낮/밤 테마 전환',
|
||||||
|
autoTheme: '시스템 따라가기',
|
||||||
|
manualTheme: '수동 전환',
|
||||||
|
language: '언어 설정',
|
||||||
|
languageDesc: '표시 언어 전환',
|
||||||
|
font: '폰트 설정',
|
||||||
|
fontDesc: '폰트 선택, 앞에 있는 폰트를 우선 사용',
|
||||||
|
fontScope: {
|
||||||
|
global: '전역',
|
||||||
|
lyric: '가사만'
|
||||||
|
},
|
||||||
|
animation: '애니메이션 속도',
|
||||||
|
animationDesc: '애니메이션 활성화 여부',
|
||||||
|
animationSpeed: {
|
||||||
|
slow: '매우 느림',
|
||||||
|
normal: '보통',
|
||||||
|
fast: '매우 빠름'
|
||||||
|
},
|
||||||
|
fontPreview: {
|
||||||
|
title: '폰트 미리보기',
|
||||||
|
chinese: '中文',
|
||||||
|
english: 'English',
|
||||||
|
japanese: '日本語',
|
||||||
|
korean: '한국어',
|
||||||
|
chineseText: '静夜思 床前明月光 疑是地上霜',
|
||||||
|
englishText: 'The quick brown fox jumps over the lazy dog',
|
||||||
|
japaneseText: 'あいうえお かきくけこ さしすせそ',
|
||||||
|
koreanText: '가나다라마 바사아자차 카타파하'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
playback: {
|
||||||
|
quality: '음질 설정',
|
||||||
|
qualityDesc: '음악 재생 음질 선택 (넷이즈 클라우드 VIP)',
|
||||||
|
qualityOptions: {
|
||||||
|
standard: '표준',
|
||||||
|
higher: '높음',
|
||||||
|
exhigh: '매우 높음',
|
||||||
|
lossless: '무손실',
|
||||||
|
hires: 'Hi-Res',
|
||||||
|
jyeffect: 'HD 서라운드',
|
||||||
|
sky: '몰입형 서라운드',
|
||||||
|
dolby: '돌비 애트모스',
|
||||||
|
jymaster: '초고화질 마스터'
|
||||||
|
},
|
||||||
|
musicSources: '음원 설정',
|
||||||
|
musicSourcesDesc: '음악 해석에 사용할 음원 플랫폼 선택',
|
||||||
|
musicSourcesWarning: '최소 하나의 음원 플랫폼을 선택해야 합니다',
|
||||||
|
musicUnblockEnable: '음악 해석 활성화',
|
||||||
|
musicUnblockEnableDesc: '활성화하면 재생할 수 없는 음악을 해석하려고 시도합니다',
|
||||||
|
configureMusicSources: '음원 구성',
|
||||||
|
selectedMusicSources: '선택된 음원:',
|
||||||
|
noMusicSources: '음원이 선택되지 않음',
|
||||||
|
gdmusicInfo: 'GD 뮤직은 여러 플랫폼 음원을 자동으로 해석하고 최적의 결과를 자동 선택합니다',
|
||||||
|
autoPlay: '자동 재생',
|
||||||
|
autoPlayDesc: '앱을 다시 열 때 자동으로 재생을 계속할지 여부',
|
||||||
|
showStatusBar: '상태바 제어 기능 표시 여부',
|
||||||
|
showStatusBarContent: 'Mac 상태바에 음악 제어 기능을 표시할 수 있습니다 (재시작 후 적용)'
|
||||||
|
},
|
||||||
|
application: {
|
||||||
|
closeAction: '닫기 동작',
|
||||||
|
closeActionDesc: '창을 닫을 때의 동작 선택',
|
||||||
|
closeOptions: {
|
||||||
|
ask: '매번 묻기',
|
||||||
|
minimize: '트레이로 최소화',
|
||||||
|
close: '직접 종료'
|
||||||
|
},
|
||||||
|
shortcut: '단축키 설정',
|
||||||
|
shortcutDesc: '전역 단축키 사용자 정의',
|
||||||
|
download: '다운로드 관리',
|
||||||
|
downloadDesc: '다운로드 목록 버튼을 항상 표시할지 여부',
|
||||||
|
unlimitedDownload: '무제한 다운로드',
|
||||||
|
unlimitedDownloadDesc: '활성화하면 음악을 무제한으로 다운로드합니다 (다운로드 실패가 발생할 수 있음), 기본 제한 300곡',
|
||||||
|
downloadPath: '다운로드 디렉토리',
|
||||||
|
downloadPathDesc: '음악 파일의 다운로드 위치 선택',
|
||||||
|
remoteControl: '원격 제어',
|
||||||
|
remoteControlDesc: '원격 제어 기능 설정'
|
||||||
|
},
|
||||||
|
network: {
|
||||||
|
apiPort: '음악 API 포트',
|
||||||
|
apiPortDesc: '수정 후 앱을 재시작해야 합니다',
|
||||||
|
proxy: '프록시 설정',
|
||||||
|
proxyDesc: '음악에 액세스할 수 없을 때 프록시를 활성화할 수 있습니다',
|
||||||
|
proxyHost: '프록시 주소',
|
||||||
|
proxyHostPlaceholder: '프록시 주소를 입력하세요',
|
||||||
|
proxyPort: '프록시 포트',
|
||||||
|
proxyPortPlaceholder: '프록시 포트를 입력하세요',
|
||||||
|
realIP: 'realIP 설정',
|
||||||
|
realIPDesc: '제한으로 인해 이 프로젝트는 해외에서 사용할 때 제한을 받을 수 있으며, realIP 매개변수를 사용하여 국내 IP를 전달하여 해결할 수 있습니다',
|
||||||
|
messages: {
|
||||||
|
proxySuccess: '프록시 설정이 저장되었습니다. 앱을 재시작한 후 적용됩니다',
|
||||||
|
proxyError: '입력이 올바른지 확인하세요',
|
||||||
|
realIPSuccess: '실제 IP 설정이 저장되었습니다',
|
||||||
|
realIPError: '유효한 IP 주소를 입력하세요'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
system: {
|
||||||
|
cache: '캐시 관리',
|
||||||
|
cacheDesc: '캐시 지우기',
|
||||||
|
cacheClearTitle: '지울 캐시 유형을 선택하세요:',
|
||||||
|
cacheTypes: {
|
||||||
|
history: {
|
||||||
|
label: '재생 기록',
|
||||||
|
description: '재생한 곡 기록 지우기'
|
||||||
|
},
|
||||||
|
favorite: {
|
||||||
|
label: '즐겨찾기 기록',
|
||||||
|
description: '로컬 즐겨찾기 곡 기록 지우기 (클라우드 즐겨찾기에는 영향 없음)'
|
||||||
|
},
|
||||||
|
user: {
|
||||||
|
label: '사용자 데이터',
|
||||||
|
description: '로그인 정보 및 사용자 관련 데이터 지우기'
|
||||||
|
},
|
||||||
|
settings: {
|
||||||
|
label: '앱 설정',
|
||||||
|
description: '앱의 모든 사용자 정의 설정 지우기'
|
||||||
|
},
|
||||||
|
downloads: {
|
||||||
|
label: '다운로드 기록',
|
||||||
|
description: '다운로드 기록 지우기 (다운로드된 파일은 삭제되지 않음)'
|
||||||
|
},
|
||||||
|
resources: {
|
||||||
|
label: '음악 리소스',
|
||||||
|
description: '로드된 음악 파일, 가사 등 리소스 캐시 지우기'
|
||||||
|
},
|
||||||
|
lyrics: {
|
||||||
|
label: '가사 리소스',
|
||||||
|
description: '로드된 가사 리소스 캐시 지우기'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
restart: '재시작',
|
||||||
|
restartDesc: '앱 재시작',
|
||||||
|
messages: {
|
||||||
|
clearSuccess: '지우기 성공, 일부 설정은 재시작 후 적용됩니다'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
about: {
|
||||||
|
version: '버전',
|
||||||
|
checkUpdate: '업데이트 확인',
|
||||||
|
checking: '확인 중...',
|
||||||
|
latest: '현재 최신 버전입니다',
|
||||||
|
hasUpdate: '새 버전 발견',
|
||||||
|
gotoUpdate: '업데이트하러 가기',
|
||||||
|
gotoGithub: 'Github로 이동',
|
||||||
|
author: '작성자',
|
||||||
|
authorDesc: 'algerkong 별점🌟 부탁드려요',
|
||||||
|
messages: {
|
||||||
|
checkError: '업데이트 확인 실패, 나중에 다시 시도하세요'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
validation: {
|
||||||
|
selectProxyProtocol: '프록시 프로토콜을 선택하세요',
|
||||||
|
proxyHost: '프록시 주소를 입력하세요',
|
||||||
|
portNumber: '유효한 포트 번호를 입력하세요 (1-65535)'
|
||||||
|
},
|
||||||
|
lyricSettings: {
|
||||||
|
title: '가사 설정',
|
||||||
|
tabs: {
|
||||||
|
display: '표시',
|
||||||
|
interface: '인터페이스',
|
||||||
|
typography: '텍스트',
|
||||||
|
mobile: '모바일'
|
||||||
|
},
|
||||||
|
pureMode: '순수 모드',
|
||||||
|
hideCover: '커버 숨기기',
|
||||||
|
centerDisplay: '중앙 표시',
|
||||||
|
showTranslation: '번역 표시',
|
||||||
|
hideLyrics: '가사 숨기기',
|
||||||
|
hidePlayBar: '재생바 숨기기',
|
||||||
|
hideMiniPlayBar: '미니 재생바 숨기기',
|
||||||
|
backgroundTheme: '배경 테마',
|
||||||
|
themeOptions: {
|
||||||
|
default: '기본',
|
||||||
|
light: '밝음',
|
||||||
|
dark: '어둠'
|
||||||
|
},
|
||||||
|
fontSize: '폰트 크기',
|
||||||
|
fontSizeMarks: {
|
||||||
|
small: '작음',
|
||||||
|
medium: '중간',
|
||||||
|
large: '큼'
|
||||||
|
},
|
||||||
|
letterSpacing: '글자 간격',
|
||||||
|
letterSpacingMarks: {
|
||||||
|
compact: '좁음',
|
||||||
|
default: '기본',
|
||||||
|
loose: '넓음'
|
||||||
|
},
|
||||||
|
lineHeight: '줄 높이',
|
||||||
|
lineHeightMarks: {
|
||||||
|
compact: '좁음',
|
||||||
|
default: '기본',
|
||||||
|
loose: '넓음'
|
||||||
|
},
|
||||||
|
mobileLayout: '모바일 레이아웃',
|
||||||
|
layoutOptions: {
|
||||||
|
default: '기본',
|
||||||
|
ios: 'iOS 스타일',
|
||||||
|
android: '안드로이드 스타일'
|
||||||
|
},
|
||||||
|
mobileCoverStyle: '커버 스타일',
|
||||||
|
coverOptions: {
|
||||||
|
record: '레코드',
|
||||||
|
square: '정사각형',
|
||||||
|
full: '전체화면'
|
||||||
|
},
|
||||||
|
lyricLines: '가사 줄 수',
|
||||||
|
mobileUnavailable: '이 설정은 모바일에서만 사용 가능합니다'
|
||||||
|
},
|
||||||
|
themeColor: {
|
||||||
|
title: '가사 테마 색상',
|
||||||
|
presetColors: '미리 설정된 색상',
|
||||||
|
customColor: '사용자 정의 색상',
|
||||||
|
preview: '미리보기 효과',
|
||||||
|
previewText: '가사 효과',
|
||||||
|
colorNames: {
|
||||||
|
'spotify-green': 'Spotify 그린',
|
||||||
|
'apple-blue': '애플 블루',
|
||||||
|
'youtube-red': 'YouTube 레드',
|
||||||
|
orange: '활력 오렌지',
|
||||||
|
purple: '신비 퍼플',
|
||||||
|
pink: '벚꽃 핑크'
|
||||||
|
},
|
||||||
|
tooltips: {
|
||||||
|
openColorPicker: '색상 선택기 열기',
|
||||||
|
closeColorPicker: '색상 선택기 닫기'
|
||||||
|
},
|
||||||
|
placeholder: '#1db954'
|
||||||
|
},
|
||||||
|
shortcutSettings: {
|
||||||
|
title: '단축키 설정',
|
||||||
|
shortcut: '단축키',
|
||||||
|
shortcutDesc: '단축키 사용자 정의',
|
||||||
|
shortcutConflict: '단축키 충돌',
|
||||||
|
inputPlaceholder: '클릭하여 단축키 입력',
|
||||||
|
resetShortcuts: '기본값 복원',
|
||||||
|
disableAll: '모두 비활성화',
|
||||||
|
enableAll: '모두 활성화',
|
||||||
|
togglePlay: '재생/일시정지',
|
||||||
|
prevPlay: '이전 곡',
|
||||||
|
nextPlay: '다음 곡',
|
||||||
|
volumeUp: '볼륨 증가',
|
||||||
|
volumeDown: '볼륨 감소',
|
||||||
|
toggleFavorite: '즐겨찾기/즐겨찾기 취소',
|
||||||
|
toggleWindow: '창 표시/숨기기',
|
||||||
|
scopeGlobal: '전역',
|
||||||
|
scopeApp: '앱 내',
|
||||||
|
enabled: '활성화',
|
||||||
|
disabled: '비활성화',
|
||||||
|
messages: {
|
||||||
|
resetSuccess: '기본 단축키로 복원되었습니다. 저장을 잊지 마세요',
|
||||||
|
conflict: '충돌하는 단축키가 있습니다. 다시 설정하세요',
|
||||||
|
saveSuccess: '단축키 설정이 저장되었습니다',
|
||||||
|
saveError: '단축키 저장 실패, 다시 시도하세요',
|
||||||
|
cancelEdit: '수정이 취소되었습니다',
|
||||||
|
disableAll: '모든 단축키가 비활성화되었습니다. 저장을 잊지 마세요',
|
||||||
|
enableAll: '모든 단축키가 활성화되었습니다. 저장을 잊지 마세요'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
remoteControl: {
|
||||||
|
title: '원격 제어',
|
||||||
|
enable: '원격 제어 활성화',
|
||||||
|
port: '서비스 포트',
|
||||||
|
allowedIps: '허용된 IP 주소',
|
||||||
|
addIp: 'IP 추가',
|
||||||
|
emptyListHint: '빈 목록은 모든 IP 액세스를 허용함을 의미합니다',
|
||||||
|
saveSuccess: '원격 제어 설정이 저장되었습니다',
|
||||||
|
accessInfo: '원격 제어 액세스 주소:'
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
export default {
|
||||||
|
menu: {
|
||||||
|
play: '재생',
|
||||||
|
playNext: '다음에 재생',
|
||||||
|
download: '곡 다운로드',
|
||||||
|
addToPlaylist: '플레이리스트에 추가',
|
||||||
|
favorite: '좋아요',
|
||||||
|
unfavorite: '좋아요 취소',
|
||||||
|
removeFromPlaylist: '플레이리스트에서 삭제',
|
||||||
|
dislike: '싫어요',
|
||||||
|
undislike: '싫어요 취소'
|
||||||
|
},
|
||||||
|
message: {
|
||||||
|
downloading: '다운로드 중입니다. 잠시 기다려주세요...',
|
||||||
|
downloadFailed: '다운로드 실패',
|
||||||
|
downloadQueued: '다운로드 대기열에 추가됨',
|
||||||
|
addedToNextPlay: '다음 재생에 추가됨',
|
||||||
|
getUrlFailed: '음악 다운로드 주소 가져오기 실패, 로그인 상태를 확인하세요'
|
||||||
|
},
|
||||||
|
dialog: {
|
||||||
|
dislike: {
|
||||||
|
title: '알림!',
|
||||||
|
content: '이 곡을 싫어한다고 확인하시겠습니까? 다시 들어가면 일일 추천에서 제외됩니다.',
|
||||||
|
positiveText: '싫어요',
|
||||||
|
negativeText: '취소'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
export default {
|
||||||
|
profile: {
|
||||||
|
followers: '팔로워',
|
||||||
|
following: '팔로잉',
|
||||||
|
level: '레벨'
|
||||||
|
},
|
||||||
|
playlist: {
|
||||||
|
created: '생성한 플레이리스트',
|
||||||
|
mine: '내가 만든',
|
||||||
|
trackCount: '{count}곡',
|
||||||
|
playCount: '{count}회 재생'
|
||||||
|
},
|
||||||
|
ranking: {
|
||||||
|
title: '음악 청취 순위',
|
||||||
|
playCount: '{count}회'
|
||||||
|
},
|
||||||
|
follow: {
|
||||||
|
title: '팔로잉 목록',
|
||||||
|
viewPlaylist: '플레이리스트 보기',
|
||||||
|
noFollowings: '팔로잉이 없습니다',
|
||||||
|
loadMore: '더 보기',
|
||||||
|
noSignature: '이 사람은 게을러서 아무것도 남기지 않았습니다',
|
||||||
|
userFollowsTitle: '의 팔로잉',
|
||||||
|
myFollowsTitle: '내 팔로잉'
|
||||||
|
},
|
||||||
|
follower: {
|
||||||
|
title: '팔로워 목록',
|
||||||
|
noFollowers: '팔로워가 없습니다',
|
||||||
|
loadMore: '더 보기',
|
||||||
|
userFollowersTitle: '의 팔로워',
|
||||||
|
myFollowersTitle: '내 팔로워'
|
||||||
|
},
|
||||||
|
detail: {
|
||||||
|
playlists: '플레이리스트',
|
||||||
|
records: '음악 청취 순위',
|
||||||
|
noPlaylists: '플레이리스트가 없습니다',
|
||||||
|
noRecords: '음악 청취 기록이 없습니다',
|
||||||
|
artist: '아티스트',
|
||||||
|
noSignature: '이 사람은 게을러서 아무것도 남기지 않았습니다',
|
||||||
|
invalidUserId: '사용자 ID가 유효하지 않습니다',
|
||||||
|
noRecordPermission: '{name}님이 음악 청취 순위를 보지 못하게 했습니다'
|
||||||
|
},
|
||||||
|
message: {
|
||||||
|
loadFailed: '사용자 페이지 로드 실패',
|
||||||
|
deleteSuccess: '삭제 성공',
|
||||||
|
deleteFailed: '삭제 실패'
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
import artist from './artist';
|
|
||||||
import common from './common';
|
|
||||||
import comp from './comp';
|
|
||||||
import donation from './donation';
|
|
||||||
import download from './download';
|
|
||||||
import favorite from './favorite';
|
|
||||||
import history from './history';
|
|
||||||
import login from './login';
|
|
||||||
import player from './player';
|
|
||||||
import search from './search';
|
|
||||||
import settings from './settings';
|
|
||||||
import songItem from './songItem';
|
|
||||||
import user from './user';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
common,
|
|
||||||
donation,
|
|
||||||
favorite,
|
|
||||||
history,
|
|
||||||
login,
|
|
||||||
player,
|
|
||||||
search,
|
|
||||||
settings,
|
|
||||||
songItem,
|
|
||||||
user,
|
|
||||||
download,
|
|
||||||
comp,
|
|
||||||
artist
|
|
||||||
};
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
import artist from './artist';
|
|
||||||
import common from './common';
|
|
||||||
import comp from './comp';
|
|
||||||
import donation from './donation';
|
|
||||||
import download from './download';
|
|
||||||
import favorite from './favorite';
|
|
||||||
import history from './history';
|
|
||||||
import login from './login';
|
|
||||||
import player from './player';
|
|
||||||
import search from './search';
|
|
||||||
import settings from './settings';
|
|
||||||
import songItem from './songItem';
|
|
||||||
import user from './user';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
common,
|
|
||||||
donation,
|
|
||||||
favorite,
|
|
||||||
history,
|
|
||||||
login,
|
|
||||||
player,
|
|
||||||
search,
|
|
||||||
settings,
|
|
||||||
songItem,
|
|
||||||
user,
|
|
||||||
download,
|
|
||||||
comp,
|
|
||||||
artist
|
|
||||||
};
|
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
// 语言配置文件 - 集中管理语言相关的配置
|
||||||
|
|
||||||
|
// 语言显示名称映射
|
||||||
|
export const LANGUAGE_DISPLAY_NAMES: Record<string, string> = {
|
||||||
|
'zh-CN': '简体中文',
|
||||||
|
'zh-Hant': '繁體中文',
|
||||||
|
'en-US': 'English',
|
||||||
|
'ja-JP': '日本語',
|
||||||
|
'ko-KR': '한국어'
|
||||||
|
};
|
||||||
|
|
||||||
|
// 默认语言
|
||||||
|
export const DEFAULT_LANGUAGE = 'zh-CN';
|
||||||
|
|
||||||
|
// 回退语言
|
||||||
|
export const FALLBACK_LANGUAGE = 'en-US';
|
||||||
|
|
||||||
|
// 语言排序优先级(用于在UI中的显示顺序)
|
||||||
|
export const LANGUAGE_PRIORITY: Record<string, number> = {
|
||||||
|
'zh-CN': 1,
|
||||||
|
'zh-Hant': 2,
|
||||||
|
'en-US': 3,
|
||||||
|
'ja-JP': 4,
|
||||||
|
'ko-KR': 5
|
||||||
|
};
|
||||||
+5
-9
@@ -1,19 +1,15 @@
|
|||||||
import enUS from './lang/en-US';
|
import { DEFAULT_LANGUAGE } from './languages';
|
||||||
import zhCN from './lang/zh-CN';
|
import { buildLanguageMessages } from './utils';
|
||||||
import zhHant from './lang/zh-Hant';
|
|
||||||
|
|
||||||
const messages = {
|
// 使用工具函数构建语言消息对象
|
||||||
'zh-CN': zhCN,
|
const messages = buildLanguageMessages();
|
||||||
'en-US': enUS,
|
|
||||||
'zh-Hant': zhHant
|
|
||||||
} as const;
|
|
||||||
|
|
||||||
type Language = keyof typeof messages;
|
type Language = keyof typeof messages;
|
||||||
|
|
||||||
// 为主进程提供一个简单的 i18n 实现
|
// 为主进程提供一个简单的 i18n 实现
|
||||||
const mainI18n = {
|
const mainI18n = {
|
||||||
global: {
|
global: {
|
||||||
currentLocale: 'zh-CN' as Language,
|
currentLocale: DEFAULT_LANGUAGE as Language,
|
||||||
get locale() {
|
get locale() {
|
||||||
return this.currentLocale;
|
return this.currentLocale;
|
||||||
},
|
},
|
||||||
|
|||||||
+6
-10
@@ -1,19 +1,15 @@
|
|||||||
import { createI18n } from 'vue-i18n';
|
import { createI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import enUS from './lang/en-US';
|
import { DEFAULT_LANGUAGE, FALLBACK_LANGUAGE } from './languages';
|
||||||
import zhCN from './lang/zh-CN';
|
import { buildLanguageMessages } from './utils';
|
||||||
import zhHant from './lang/zh-Hant';
|
|
||||||
|
|
||||||
const messages = {
|
// 使用工具函数构建语言消息对象
|
||||||
'zh-CN': zhCN,
|
const messages = buildLanguageMessages();
|
||||||
'en-US': enUS,
|
|
||||||
'zh-Hant': zhHant
|
|
||||||
};
|
|
||||||
|
|
||||||
const i18n = createI18n({
|
const i18n = createI18n({
|
||||||
legacy: false,
|
legacy: false,
|
||||||
locale: 'zh-CN',
|
locale: DEFAULT_LANGUAGE,
|
||||||
fallbackLocale: 'en-US',
|
fallbackLocale: FALLBACK_LANGUAGE,
|
||||||
messages,
|
messages,
|
||||||
globalInjection: true,
|
globalInjection: true,
|
||||||
silentTranslationWarn: true,
|
silentTranslationWarn: true,
|
||||||
|
|||||||
@@ -0,0 +1,60 @@
|
|||||||
|
// 自动导入所有语言的所有翻译文件
|
||||||
|
const allLangModules = import.meta.glob('./lang/**/*.ts', { eager: true });
|
||||||
|
|
||||||
|
// 构建语言消息对象
|
||||||
|
export const buildLanguageMessages = () => {
|
||||||
|
const messages: Record<string, Record<string, any>> = {};
|
||||||
|
|
||||||
|
Object.entries(allLangModules).forEach(([path, module]) => {
|
||||||
|
// 解析路径,例如 './lang/zh-CN/common.ts' -> { lang: 'zh-CN', module: 'common' }
|
||||||
|
const match = path.match(/\.\/lang\/([^/]+)\/([^/]+)\.ts$/);
|
||||||
|
if (match) {
|
||||||
|
const [, langCode, moduleName] = match;
|
||||||
|
|
||||||
|
// 跳过 index 文件
|
||||||
|
if (moduleName !== 'index') {
|
||||||
|
if (!messages[langCode]) {
|
||||||
|
messages[langCode] = {};
|
||||||
|
}
|
||||||
|
messages[langCode][moduleName] = (module as any).default;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return messages;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 获取所有支持的语言
|
||||||
|
export const getSupportedLanguages = (): string[] => {
|
||||||
|
const messages = buildLanguageMessages();
|
||||||
|
return Object.keys(messages);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const isLanguageSupported = (lang: string): boolean => {
|
||||||
|
return getSupportedLanguages().includes(lang);
|
||||||
|
};
|
||||||
|
|
||||||
|
import { LANGUAGE_DISPLAY_NAMES, LANGUAGE_PRIORITY } from './languages';
|
||||||
|
|
||||||
|
// 获取语言显示名称的映射
|
||||||
|
export const getLanguageDisplayNames = (): Record<string, string> => {
|
||||||
|
return LANGUAGE_DISPLAY_NAMES;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 生成语言选项数组,用于下拉选择等组件
|
||||||
|
export const getLanguageOptions = () => {
|
||||||
|
const supportedLanguages = getSupportedLanguages();
|
||||||
|
const displayNames = getLanguageDisplayNames();
|
||||||
|
|
||||||
|
// 按优先级排序
|
||||||
|
const sortedLanguages = supportedLanguages.sort((a, b) => {
|
||||||
|
const priorityA = LANGUAGE_PRIORITY[a] || 999;
|
||||||
|
const priorityB = LANGUAGE_PRIORITY[b] || 999;
|
||||||
|
return priorityA - priorityB;
|
||||||
|
});
|
||||||
|
|
||||||
|
return sortedLanguages.map(lang => ({
|
||||||
|
label: displayNames[lang] || lang,
|
||||||
|
value: lang
|
||||||
|
}));
|
||||||
|
};
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
{
|
|
||||||
"settings": {
|
|
||||||
"lyricSettings": {
|
|
||||||
"title": "歌词设置",
|
|
||||||
"tabs": {
|
|
||||||
"display": "显示",
|
|
||||||
"interface": "界面",
|
|
||||||
"typography": "文字",
|
|
||||||
"mobile": "移动端"
|
|
||||||
},
|
|
||||||
"pureMode": "纯净模式",
|
|
||||||
"hideCover": "隐藏封面",
|
|
||||||
"centerDisplay": "居中显示",
|
|
||||||
"showTranslation": "显示翻译",
|
|
||||||
"hideLyrics": "隐藏歌词",
|
|
||||||
"hidePlayBar": "隐藏播放栏",
|
|
||||||
"hideMiniPlayBar": "隐藏迷你播放栏",
|
|
||||||
"backgroundTheme": "背景主题",
|
|
||||||
"themeOptions": {
|
|
||||||
"default": "默认",
|
|
||||||
"light": "亮色",
|
|
||||||
"dark": "暗色"
|
|
||||||
},
|
|
||||||
"fontSize": "字体大小",
|
|
||||||
"fontSizeMarks": {
|
|
||||||
"small": "小",
|
|
||||||
"medium": "中",
|
|
||||||
"large": "大"
|
|
||||||
},
|
|
||||||
"letterSpacing": "字间距",
|
|
||||||
"letterSpacingMarks": {
|
|
||||||
"compact": "紧凑",
|
|
||||||
"default": "默认",
|
|
||||||
"loose": "宽松"
|
|
||||||
},
|
|
||||||
"lineHeight": "行高",
|
|
||||||
"lineHeightMarks": {
|
|
||||||
"compact": "紧凑",
|
|
||||||
"default": "默认",
|
|
||||||
"loose": "宽松"
|
|
||||||
},
|
|
||||||
"mobileLayout": "移动端布局",
|
|
||||||
"layoutOptions": {
|
|
||||||
"default": "默认",
|
|
||||||
"ios": "iOS风格",
|
|
||||||
"android": "安卓风格"
|
|
||||||
},
|
|
||||||
"mobileCoverStyle": "封面样式",
|
|
||||||
"coverOptions": {
|
|
||||||
"record": "唱片",
|
|
||||||
"square": "方形",
|
|
||||||
"full": "全屏"
|
|
||||||
},
|
|
||||||
"lyricLines": "歌词行数",
|
|
||||||
"mobileUnavailable": "此设置仅在移动端可用"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -9,8 +9,8 @@ import {
|
|||||||
} from 'electron';
|
} from 'electron';
|
||||||
import { join } from 'path';
|
import { join } from 'path';
|
||||||
|
|
||||||
import type { Language } from '../../i18n/main';
|
|
||||||
import i18n from '../../i18n/main';
|
import i18n from '../../i18n/main';
|
||||||
|
import { getLanguageOptions } from '../../i18n/utils';
|
||||||
import { getStore } from './config';
|
import { getStore } from './config';
|
||||||
|
|
||||||
// 歌曲信息接口定义
|
// 歌曲信息接口定义
|
||||||
@@ -33,11 +33,8 @@ let songTitleTray: Tray | null = null;
|
|||||||
let isPlaying = false;
|
let isPlaying = false;
|
||||||
let currentSong: SongInfo | null = null;
|
let currentSong: SongInfo | null = null;
|
||||||
|
|
||||||
const LANGUAGES: { label: string; value: Language }[] = [
|
// 使用自动导入的语言选项
|
||||||
{ label: '简体中文', value: 'zh-CN' },
|
const LANGUAGES = getLanguageOptions();
|
||||||
{ label: 'English', value: 'en-US' },
|
|
||||||
{ label: '繁體中文', value: 'zh-Hant' }
|
|
||||||
];
|
|
||||||
|
|
||||||
// 更新播放状态
|
// 更新播放状态
|
||||||
export function updatePlayState(playing: boolean) {
|
export function updatePlayState(playing: boolean) {
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { getLanguageOptions } from '@i18n/utils';
|
||||||
import { computed } from 'vue';
|
import { computed } from 'vue';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
@@ -7,11 +8,8 @@ import { useSettingsStore } from '@/store/modules/settings';
|
|||||||
const settingsStore = useSettingsStore();
|
const settingsStore = useSettingsStore();
|
||||||
const { locale } = useI18n();
|
const { locale } = useI18n();
|
||||||
|
|
||||||
const languages = [
|
// 使用自动导入的语言选项
|
||||||
{ label: '简体中文', value: 'zh-CN' },
|
const languages = getLanguageOptions();
|
||||||
{ label: '繁體中文', value: 'zh-Hant' },
|
|
||||||
{ label: 'English', value: 'en-US' }
|
|
||||||
];
|
|
||||||
|
|
||||||
console.log('locale', locale);
|
console.log('locale', locale);
|
||||||
// 使用计算属性来获取当前语言
|
// 使用计算属性来获取当前语言
|
||||||
|
|||||||
@@ -12,5 +12,19 @@
|
|||||||
"electron-vite/node"
|
"electron-vite/node"
|
||||||
],
|
],
|
||||||
"moduleResolution": "bundler",
|
"moduleResolution": "bundler",
|
||||||
|
},
|
||||||
|
"paths": {
|
||||||
|
"@/*": [
|
||||||
|
"src/renderer/*"
|
||||||
|
],
|
||||||
|
"@renderer/*": [
|
||||||
|
"src/renderer/*"
|
||||||
|
],
|
||||||
|
"@main/*": [
|
||||||
|
"src/main/*"
|
||||||
|
],
|
||||||
|
"@i18n/*": [
|
||||||
|
"src/i18n/*"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+2
-1
@@ -28,7 +28,8 @@
|
|||||||
"paths": {
|
"paths": {
|
||||||
"@/*": ["src/renderer/*"],
|
"@/*": ["src/renderer/*"],
|
||||||
"@renderer/*": ["src/renderer/*"],
|
"@renderer/*": ["src/renderer/*"],
|
||||||
"@main/*": ["src/main/*"]
|
"@main/*": ["src/main/*"],
|
||||||
|
"@i18n/*": ["src/i18n/*"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -14,7 +14,8 @@ export default defineConfig({
|
|||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
alias: {
|
||||||
'@': resolve('src/renderer'),
|
'@': resolve('src/renderer'),
|
||||||
'@renderer': resolve('src/renderer')
|
'@renderer': resolve('src/renderer'),
|
||||||
|
'@i18n': resolve('src/i18n')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
|
|||||||
Reference in New Issue
Block a user