From c54d1491e636af1f29f81cfde74bd243558f40dc Mon Sep 17 00:00:00 2001 From: LiamillionSS Date: Sun, 10 Nov 2024 00:57:28 +1100 Subject: [PATCH 01/10] [bugfix-452] fix to launch game when steam is not running on linux --- src/main/services/steam.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/services/steam.service.ts b/src/main/services/steam.service.ts index 19e67ef8..77ffc916 100644 --- a/src/main/services/steam.service.ts +++ b/src/main/services/steam.service.ts @@ -116,7 +116,7 @@ export class SteamService { public async openSteam(): Promise { - await shell.openPath("steam://open/games"); + await shell.openExternal("steam://open/games"); return new Promise((resolve, reject) => { // Every 3 seconds check if steam is running From db616c6bd7e0883095f79be1180a4297e3cc7346 Mon Sep 17 00:00:00 2001 From: LiamillionSS Date: Sun, 10 Nov 2024 19:20:46 +1100 Subject: [PATCH 02/10] [bugfix-452] PROCESS_NAME now uses steam-runtime-launcher-service on linux to avoid steamProcessRunning false positives --- src/main/services/steam.service.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/services/steam.service.ts b/src/main/services/steam.service.ts index 77ffc916..608a761c 100644 --- a/src/main/services/steam.service.ts +++ b/src/main/services/steam.service.ts @@ -13,7 +13,9 @@ const { list } = (execOnOs({ win32: () => require("regedit-rs") }, true) ?? {}) export class SteamService { - private static readonly PROCESS_NAME = "steam"; + private static readonly PROCESS_NAME: string = process.platform === "linux" + ? "steam-runtime-launcher-service" + : "steam"; private static instance: SteamService; From 58788b0ebcf216a097e462de360ff99f7892d29e Mon Sep 17 00:00:00 2001 From: MathieuG-P <40181755+Zagrios@users.noreply.github.com> Date: Mon, 11 Nov 2024 13:58:42 +0100 Subject: [PATCH 03/10] Added beatleader icon to playlist oneclick setting + change tippys color --- .../pages/settings-page.component.tsx | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/renderer/pages/settings-page.component.tsx b/src/renderer/pages/settings-page.component.tsx index 46d44aa1..9a10dfe6 100644 --- a/src/renderer/pages/settings-page.component.tsx +++ b/src/renderer/pages/settings-page.component.tsx @@ -405,7 +405,7 @@ export function SettingsPage() { {t("notifications.settings.additional-content.deep-link.select-all")}
- + - + - + - + - + {t("misc.maps")}
- + - + - + - + tooglePlaylistsDeepLinks()} checked={playlistsDeepLinkEnabled} /> {t("misc.playlists")}
-
- +
+ + + { + e.stopPropagation(); + linkOpener.open("https://www.beatleader.xyz/"); + }} + /> +
  • toogleModelsDeepLinks()}> @@ -530,7 +540,7 @@ export function SettingsPage() { {t("misc.models")}
  • - + Date: Tue, 12 Nov 2024 15:10:29 +0100 Subject: [PATCH 04/10] [chore] Added a pre-download warning modal for outdated BS versions --- assets/jsons/translations/de.json | 7 +++- assets/jsons/translations/en.json | 7 +++- assets/jsons/translations/es.json | 7 +++- assets/jsons/translations/fr.json | 7 +++- assets/jsons/translations/ja.json | 7 +++- assets/jsons/translations/ko.json | 7 +++- assets/jsons/translations/ru.json | 7 +++- assets/jsons/translations/zh-tw.json | 7 +++- assets/jsons/translations/zh.json | 7 +++- .../bs-version-outdated-modal.component.tsx | 42 +++++++++++++++++++ src/renderer/hooks/use-translation.hook.ts | 37 ++++++++++++++++ .../available-versions-list.components.tsx | 28 +++++++++++-- src/renderer/services/i18n.service.ts | 27 ++++++++++++ 13 files changed, 185 insertions(+), 12 deletions(-) create mode 100644 src/renderer/components/modal/modal-types/bs-version-outdated-modal.component.tsx diff --git a/assets/jsons/translations/de.json b/assets/jsons/translations/de.json index 92fd6732..dd7dced5 100644 --- a/assets/jsons/translations/de.json +++ b/assets/jsons/translations/de.json @@ -17,7 +17,9 @@ "copied": "Kopiert!", "confirm": "Bestätigen", "choose-folder": "Ordner Wählen", - "unknown": "Ein unbekannter Fehler ist aufgetreten ¯\\_(ツ)_/¯" + "unknown": "Ein unbekannter Fehler ist aufgetreten ¯\\_(ツ)_/¯", + "warning": "Achtung", + "continue": "Weiter" }, "nav-bar": { "add-version": "Version hinzufügen", @@ -838,6 +840,9 @@ "proton-folder-description": "Unter Linux benötigt BSManager Proton, um zu funktionieren. Wählen Sie den Installationsordner von Proton, um fortzufahren.", "proton-folder-placeholder": "Proton-Installationsordner", "where-is-proton-installed": "Wo ist Proton installiert?" + }, + "bs-version-outdated": { + "body": "Die Version {outdatedVersion} ist veraltet, und einige Mods oder Funktionen funktionieren möglicherweise nicht mehr wie erwartet. Bitte lade die neueste empfohlene Version ({recommendedVersion}) von Beat Saber herunter, um die neuesten Funktionen und Fehlerbehebungen zu nutzen." } }, "maps": { diff --git a/assets/jsons/translations/en.json b/assets/jsons/translations/en.json index a0517d94..9f54797e 100644 --- a/assets/jsons/translations/en.json +++ b/assets/jsons/translations/en.json @@ -17,7 +17,9 @@ "copied": "Copied!", "confirm": "Confirm", "choose-folder": "Choose folder", - "unknown": "An unknown error occurred ¯\\_(ツ)_/¯" + "unknown": "An unknown error occurred ¯\\_(ツ)_/¯", + "warning": "Warning", + "continue": "Continue" }, "nav-bar": { "add-version": "Add a version", @@ -838,6 +840,9 @@ "proton-folder-description": "On Linux, BSManager requires Proton to work. Choose the Proton installation folder to continue.", "proton-folder-placeholder": "Proton installation folder", "where-is-proton-installed": "Where is Proton installed?" + }, + "bs-version-outdated": { + "body": "The version {outdatedVersion} is outdated, and some mods or features may no longer work as expected. Please download the latest recommended version ({recommendedVersion}) of Beat Saber to enjoy the latest features and bugfixes." } }, "maps": { diff --git a/assets/jsons/translations/es.json b/assets/jsons/translations/es.json index bb4c2298..764cd4ca 100644 --- a/assets/jsons/translations/es.json +++ b/assets/jsons/translations/es.json @@ -17,7 +17,9 @@ "copied": "¡Copiado!", "confirm": "Confirmar", "choose-folder": "Elige la carpeta", - "unknown": "Se ha producido un error desconocido ¯\\_(ツ)_/¯" + "unknown": "Se ha producido un error desconocido ¯\\_(ツ)_/¯", + "warning": "Advertencia", + "continue": "Continuar" }, "nav-bar": { "add-version": "Agregar una versión", @@ -838,6 +840,9 @@ "proton-folder-description": "En Linux, BSManager necesita Proton para funcionar. Elija la carpeta de instalación de Proton para continuar.", "proton-folder-placeholder": "Carpeta de instalación de Proton", "where-is-proton-installed": "¿Dónde está instalado Proton?" + }, + "bs-version-outdated": { + "body": "La versión {outdatedVersion} está obsoleta, y algunos mods o funciones pueden no funcionar como se espera. Por favor, descarga la última versión recomendada ({recommendedVersion}) de Beat Saber para disfrutar de las últimas funciones y correcciones de errores." } }, "maps": { diff --git a/assets/jsons/translations/fr.json b/assets/jsons/translations/fr.json index ef4ff496..e484cfba 100644 --- a/assets/jsons/translations/fr.json +++ b/assets/jsons/translations/fr.json @@ -17,7 +17,9 @@ "copied": "Copié !", "confirm": "Confirmer", "choose-folder": "Choisir un dossier", - "unknown": "Une erreur inconnue s'est produite ¯\\_(ツ)_/¯" + "unknown": "Une erreur inconnue s'est produite ¯\\_(ツ)_/¯", + "warning": "Attention", + "continue": "Continuer" }, "nav-bar": { "add-version": "Ajouter une version", @@ -839,6 +841,9 @@ "proton-folder-description": "Sous Linux, BSManager a besoin de Proton pour fonctionner. Choisissez le dossier d'installation de Proton pour continuer.", "proton-folder-placeholder": "Dossier d'installation de Proton", "where-is-proton-installed": "Où est installé Proton ?" + }, + "bs-version-outdated": { + "body": "La version {outdatedVersion} est obsolète, et certains mods ou fonctionnalités peuvent ne plus fonctionner comme prévu. Veuillez télécharger la dernière version recommandée ({recommendedVersion}) de Beat Saber pour profiter des dernières fonctionnalités et corrections de bugs." } }, "maps": { diff --git a/assets/jsons/translations/ja.json b/assets/jsons/translations/ja.json index 76f8011f..49faa14c 100644 --- a/assets/jsons/translations/ja.json +++ b/assets/jsons/translations/ja.json @@ -17,7 +17,9 @@ "copied": "コピー済み!", "confirm": "確認", "choose-folder": "フォルダーを選択", - "unknown": "不明なエラーが発生しました (´・ω・`)" + "unknown": "不明なエラーが発生しました (´・ω・`)", + "warning": "警告", + "continue": "続ける" }, "nav-bar": { "add-version": "バージョンを追加", @@ -838,6 +840,9 @@ "proton-folder-description": "Linuxでは、BSManagerを動作させるためにProtonが必要です。続行するには、Protonのインストールフォルダを選択してください。", "proton-folder-placeholder": "Protonのインストールフォルダ", "where-is-proton-installed": "Protonはどこにインストールされていますか?" + }, + "bs-version-outdated": { + "body": "バージョン {outdatedVersion} は古いため、一部のモッドや機能が期待通りに動作しない場合があります。最新の機能やバグ修正を楽しむために、推奨される最新バージョンの Beat Saber ({recommendedVersion}) をダウンロードしてください。" } }, "maps": { diff --git a/assets/jsons/translations/ko.json b/assets/jsons/translations/ko.json index a2381fcd..3ba2a1d8 100644 --- a/assets/jsons/translations/ko.json +++ b/assets/jsons/translations/ko.json @@ -17,7 +17,9 @@ "copied": "복사 완료!", "confirm": "확인", "choose-folder": "폴더를 선택하세요", - "unknown": "알 수 없는 오류가 발생했습니다 (´・ω・`)" + "unknown": "알 수 없는 오류가 발생했습니다 (´・ω・`)", + "warning": "경고", + "continue": "계속" }, "nav-bar": { "add-version": "버전 추가", @@ -838,6 +840,9 @@ "proton-folder-description": "Linux에서는 BSManager가 작동하려면 Proton이 필요합니다. 계속하려면 Proton 설치 폴더를 선택하세요.", "proton-folder-placeholder": "Proton 설치 폴더", "where-is-proton-installed": "Proton이 설치된 위치는 어디인가요?" + }, + "bs-version-outdated": { + "body": "버전 {outdatedVersion}은(는) 오래되어 일부 모드나 기능이 예상대로 작동하지 않을 수 있습니다. 최신 기능과 버그 수정 사항을 즐기기 위해 Beat Saber의 최신 권장 버전 ({recommendedVersion})을 다운로드하십시오." } }, "maps": { diff --git a/assets/jsons/translations/ru.json b/assets/jsons/translations/ru.json index f2044880..e1536105 100644 --- a/assets/jsons/translations/ru.json +++ b/assets/jsons/translations/ru.json @@ -17,7 +17,9 @@ "copied": "Скопировано!", "confirm": "Подтвердить", "choose-folder": "Изменить папку", - "unknown": "Неизвестная ошибка ¯\\_(ツ)_/¯" + "unknown": "Неизвестная ошибка ¯\\_(ツ)_/¯", + "warning": "Внимание", + "continue": "Продолжить" }, "nav-bar": { "add-version": "Добавить версию игры", @@ -837,6 +839,9 @@ "proton-folder-description": "В Linux BSManager требует Proton для работы. Выберите папку установки Proton, чтобы продолжить.", "proton-folder-placeholder": "Папка установки Proton", "where-is-proton-installed": "Где установлен Proton?" + }, + "bs-version-outdated": { + "body": "Версия {outdatedVersion} устарела, и некоторые моды или функции могут работать некорректно. Пожалуйста, скачайте последнюю рекомендуемую версию ({recommendedVersion}) Beat Saber, чтобы воспользоваться новейшими функциями и исправлениями ошибок." } }, "maps": { diff --git a/assets/jsons/translations/zh-tw.json b/assets/jsons/translations/zh-tw.json index 55fc0e51..39a81e93 100644 --- a/assets/jsons/translations/zh-tw.json +++ b/assets/jsons/translations/zh-tw.json @@ -17,7 +17,9 @@ "copied": "已複製!", "confirm": "確認", "choose-folder": "選擇文件夾", - "unknown": "發生了一個錯誤 ¯\\_(ツ)_/¯" + "unknown": "發生了一個錯誤 ¯\\_(ツ)_/¯", + "warning": "警告", + "continue": "繼續" }, "nav-bar": { "add-version": "新增版本", @@ -838,6 +840,9 @@ "proton-folder-description": "在Linux上,BSManager需要Proton才能運行。請選擇Proton的安裝資料夾以繼續。", "proton-folder-placeholder": "Proton安裝資料夾", "where-is-proton-installed": "Proton安裝在哪裡?" + }, + "bs-version-outdated": { + "body": "版本 {outdatedVersion} 已過時,某些模組或功能可能無法正常運作。請下載最新推薦的 Beat Saber 版本 ({recommendedVersion}),以享受最新功能和修正。" } }, "maps": { diff --git a/assets/jsons/translations/zh.json b/assets/jsons/translations/zh.json index 9489c6a6..8a144419 100644 --- a/assets/jsons/translations/zh.json +++ b/assets/jsons/translations/zh.json @@ -17,7 +17,9 @@ "copied": "已复制!", "confirm": "确认", "choose-folder": "选择文件夹", - "Unknown": "发生了一个错误 ¯\\_(ツ)_/¯" + "Unknown": "发生了一个错误 ¯\\_(ツ)_/¯", + "warning": "警告", + "continue": "继续" }, "nav-bar": { "add-version": "添加版本", @@ -838,6 +840,9 @@ "proton-folder-description": "在Linux上,BSManager需要Proton才能运行。请选择Proton的安装文件夹以继续。", "proton-folder-placeholder": "Proton安装文件夹", "where-is-proton-installed": "Proton安装在哪里?" + }, + "bs-version-outdated": { + "body": "版本 {outdatedVersion} 已过时,某些模组或功能可能无法正常工作。请下载最新推荐的 Beat Saber 版本 ({recommendedVersion}),以享受最新功能和修复。" } }, "maps": { diff --git a/src/renderer/components/modal/modal-types/bs-version-outdated-modal.component.tsx b/src/renderer/components/modal/modal-types/bs-version-outdated-modal.component.tsx new file mode 100644 index 00000000..869130e0 --- /dev/null +++ b/src/renderer/components/modal/modal-types/bs-version-outdated-modal.component.tsx @@ -0,0 +1,42 @@ +import { BsmButton } from "renderer/components/shared/bsm-button.component"; +import { BsmImage } from "renderer/components/shared/bsm-image.component"; +import { ModalComponent, ModalExitCode } from "renderer/services/modale.service"; +import BeatConflict from "../../../../../assets/images/apngs/beat-conflict.png"; +import { BSVersion } from "shared/bs-version.interface"; +import { BsmCheckbox } from "renderer/components/shared/bsm-checkbox.component"; +import { useTranslationV2 } from "renderer/hooks/use-translation.hook"; +import { useState } from "react"; +import { ConfigurationService } from "renderer/services/configuration.service"; +import { useService } from "renderer/hooks/use-service.hook"; + +export const BSVersionOutdatedModal: ModalComponent = ({ resolver, options: {data : { outdated, recommended }}}) => { + + const t = useTranslationV2(); + const config = useService(ConfigurationService); + + const [remember, setRemember] = useState(false); + + const handleContinue = () => { + if (remember) { + config.set("not-show-bs-version-outdated", true); + } + + resolver({ exitCode: ModalExitCode.COMPLETED }); + }; + + return ( +
    +

    {t.text("misc.warning")}

    + +

    {t.element("modals.bs-version-outdated.body", { outdatedVersion: {outdated.BSVersion}, recommendedVersion: {recommended.BSVersion} })}

    +
    + setRemember(() => val)} /> + {t.text("modals.misc.remember-my-choice")} +
    +
    + resolver({ exitCode: ModalExitCode.CANCELED })} withBar={false} text="misc.cancel" /> + +
    + + ); +}; diff --git a/src/renderer/hooks/use-translation.hook.ts b/src/renderer/hooks/use-translation.hook.ts index 542e2fd8..83b1769a 100644 --- a/src/renderer/hooks/use-translation.hook.ts +++ b/src/renderer/hooks/use-translation.hook.ts @@ -1,7 +1,12 @@ import { I18nService } from "renderer/services/i18n.service"; import { useService } from "./use-service.hook"; import { useObservable } from "./use-observable.hook"; +import { useConstant } from "./use-constant.hook"; +import { createElement, Fragment } from "react"; +/** + * @deprecated Use useTranslationV2 instead + */ export function useTranslation(): (translationKey: string, args?: Record) => string { const i18nService = useService(I18nService); @@ -15,3 +20,35 @@ export function useTranslation(): (translationKey: string, args?: Record) => string; + element: (translationKey: string, args?: Record) => JSX.Element; +} + +export function useTranslationV2(): TranslateFunctions { + + const i18nService = useService(I18nService); + + useObservable(() => i18nService.currentLanguage$); + + const text = useConstant(() => { + return (key: string, args?: Record) => { + if (!key) { + return key; + } + return i18nService.translate(key, args); + }; + }); + + const element = useConstant(() => { + return (key: string, args?: Record) => { + if (!key) { + return createElement(Fragment, null, key); + } + return i18nService.translateElement(key, args); + }; + }); + + return { text, element }; +} diff --git a/src/renderer/pages/available-versions-list.components.tsx b/src/renderer/pages/available-versions-list.components.tsx index 8be40307..b781282d 100644 --- a/src/renderer/pages/available-versions-list.components.tsx +++ b/src/renderer/pages/available-versions-list.components.tsx @@ -12,6 +12,11 @@ import { BSVersion } from "shared/bs-version.interface"; import { useObservable } from "renderer/hooks/use-observable.hook"; import { BsDownloaderService } from "renderer/services/bs-version-download/bs-downloader.service"; import { logRenderError } from "renderer"; +import { ModalExitCode, ModalService } from "renderer/services/modale.service"; +import { BSVersionOutdatedModal } from "renderer/components/modal/modal-types/bs-version-outdated-modal.component"; +import { ConfigurationService } from "renderer/services/configuration.service"; +import { coerce, lt, valid } from "semver"; +import { tryit } from "shared/helpers/error.helpers"; export const AvailableVersionsContext = createContext<{ selectedVersion: BSVersion; setSelectedVersion: (version: BSVersion) => void }>(null); @@ -19,6 +24,8 @@ export function AvailableVersionsList() { const bsDownloader = useService(BsDownloaderService); const versionManager = useService(BSVersionManagerService); + const modals = useService(ModalService); + const config = useService(ConfigurationService); const [selectedVersion, setSelectedVersion] = useState(null); const contextValue = useMemo(() => ({ selectedVersion, setSelectedVersion }), [selectedVersion]); @@ -26,9 +33,24 @@ export function AvailableVersionsList() { const downloading = useObservable(() => bsDownloader.downloadingVersion$.pipe(map(v => !!v))); const t = useTranslation(); - const startDownload = async () => { + const startDownload = async (version: BSVersion) => { + const showOutdated = !config.get("not-show-bs-version-outdated"); + const recommendedVersion = showOutdated ? versionManager.availableVersions$.value.find(v => v.recommended) : undefined; - return bsDownloader.downloadVersion(selectedVersion) + const isVersionOutdated = recommendedVersion?.BSVersion ? ( + tryit(() => lt(valid(coerce(version.BSVersion)), valid(coerce(recommendedVersion.BSVersion)))).result ?? false + ) : false; + + if (showOutdated && isVersionOutdated) { + + const res = await modals.openModal(BSVersionOutdatedModal, {data: { outdated: version, recommended: recommendedVersion }}); + + if (res.exitCode !== ModalExitCode.COMPLETED) { + return; + } + } + + return bsDownloader.downloadVersion(version) .catch(logRenderError) .finally(() => setSelectedVersion(null)); }; @@ -56,7 +78,7 @@ export function AvailableVersionsList() { {selectedVersion && !downloading && ( - + startDownload(selectedVersion)}> )} diff --git a/src/renderer/services/i18n.service.ts b/src/renderer/services/i18n.service.ts index 08a498b2..859d0f19 100644 --- a/src/renderer/services/i18n.service.ts +++ b/src/renderer/services/i18n.service.ts @@ -4,6 +4,7 @@ import { Observable } from "rxjs"; import { ConfigurationService } from "./configuration.service"; import { getProperty } from "dot-prop"; import { i18n } from "dateformat"; +import { createElement, Fragment } from "react"; export class I18nService { private static instance: I18nService; @@ -90,4 +91,30 @@ export class I18nService { return translated; } + + public translateElement(translationKey: string, args?: Record): JSX.Element { + let translated = this.cache.get(translationKey); + if (!translated) { + translated = getProperty(this.dictionary, translationKey) ?? translationKey; + this.cache.set(translationKey, translated); + } + + if (!args) { + return createElement(Fragment, null, translated); + } + + // Sort keys by length in descending order to avoid partial matches within keys + const sortedKeys = Object.keys(args).sort((a, b) => b.length - a.length); + + const pattern = sortedKeys.map(key => `\\{${key}\\}`).join('|'); + const regex = new RegExp(`(${pattern})`, 'g'); + const segments = translated.split(regex); + + const children = segments.map((segment) => { + const key = segment.slice(1, -1); // Remove surrounding {} + return args[key] || segment; + }); + + return createElement(Fragment, null, ...children); + } } From 6bb90c580dbfbbc29adfe16e8355661ad356d88f Mon Sep 17 00:00:00 2001 From: Iluhadesu <92525749+Iluhadesu@users.noreply.github.com> Date: Tue, 12 Nov 2024 16:58:16 +0000 Subject: [PATCH 05/10] Add v1.39.0 to bs-versions.json --- assets/jsons/bs-versions.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/assets/jsons/bs-versions.json b/assets/jsons/bs-versions.json index a1fa8659..090ace50 100644 --- a/assets/jsons/bs-versions.json +++ b/assets/jsons/bs-versions.json @@ -787,5 +787,14 @@ "ReleaseDate": "1728399815", "year": "2024", "recommended": true + }, + { + "BSVersion": "1.39.0", + "BSManifest": "5365094543246905054", + "OculusBinaryId": "7978663688900007", + "ReleaseURL": "https://steamcommunity.com/games/620980/announcements/detail/4451339035198095638", + "ReleaseImg": "https://clan.cloudflare.steamstatic.com/images/32055887/fd8e2c783e46decdf5e10fed1e16f124616d9321.png", + "ReleaseDate": "1731426932", + "year": "2024" } ] \ No newline at end of file From f523e34867db3376a2da6d10e07888051b106c1a Mon Sep 17 00:00:00 2001 From: izunya Date: Sat, 16 Nov 2024 03:32:37 +0900 Subject: [PATCH 06/10] Fix korean --- assets/jsons/translations/ko.json | 34 +++++++++++++++---------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/assets/jsons/translations/ko.json b/assets/jsons/translations/ko.json index 3ba2a1d8..3b0f1567 100644 --- a/assets/jsons/translations/ko.json +++ b/assets/jsons/translations/ko.json @@ -239,7 +239,7 @@ "modal": { "title": "재시작 필요", "body": "하드웨어 가속 설정을 변경하면 BSManager가 종료 후 재시작됩니다. 계속하시겠습니까?", - "confirm-btn": "네, 맞습니다" + "confirm-btn": "네!" }, "error-notification": { "message": "오류가 발생했습니다. 하드웨어 가속을 비활성화할 수 없습니다." @@ -251,7 +251,7 @@ "modal": { "title": "심볼릭 링크 권한", "body": "심볼릭 링크를 생성하려면 BSManager는 관리자 권한 또는 시스템에 활성화된 개발자 모드를 필요로 합니다. 계속하시겠습니까?", - "confirm-btn": "네, 맞습니다" + "confirm-btn": "네!" }, "error-notification": { "message": "오류가 발생했습니다. 심볼릭 링크 설정을 변경할 수 없습니다." @@ -341,7 +341,7 @@ "SOME_FILES_FAILED_TO_DOWNLOAD": "일부 파일을 다운로드하지 못했습니다.", "OCULUS_LOGIN_TIMED_OUT": "로그인 토큰을 얻는 데 시간이 너무 오래 걸렸습니다.", "OCULUS_LOGIN_WINDOW_CLOSED_BY_USER": "메타 로그인 창이 닫혔습니다.", - "NO_META_AUTH_TOKEN": "다운로드에 필요한 Meta 로그인 토큰을 얻을 수 없습니다.", + "NO_META_AUTH_TOKEN": "다운로드에 필요한 메타 로그인 토큰을 얻을 수 없습니다.", "UNKNOWN_ERROR": "알 수 없는 오류가 발생했습니다." } } @@ -490,8 +490,8 @@ "mods": { "install-mods": { "titles": { - "success": "Mod 설치 완료 🎉", - "warning": "Mod 설치 완료 🤔" + "success": "모드 설치 완료 🎉", + "warning": "모드 설치 완료 🤔" }, "msg": { "success": "모든 MOD가 설치되었습니다.", @@ -504,7 +504,7 @@ }, "uninstall-mod": { "titles": { - "success": "Mod 제거 완료 🎉" + "success": "모드 제거 완료 🎉" }, "msg": { "errors": { @@ -514,7 +514,7 @@ }, "uninstall-all-mods": { "titles": { - "success": "Mod 제거 완료 🎉" + "success": "모드 제거 완료 🎉" }, "msg": { "success": "모든 Mod가 제거되었습니다.", @@ -831,7 +831,7 @@ }, "ask-install-path": { "title": "설치 폴더", - "choose-folder-description": "BSManager에 의해 다운로드된 모든 콘텐츠 (버전, MOD, 맵, 재생 목록 등)를 포함하는 폴더를 선택하세요.", + "choose-folder-description": "BSManager에 의해 다운로드된 모든 콘텐츠 (버전, 모드, 맵, 재생 목록 등)를 포함하는 폴더를 선택하세요.", "default": "기본값", "default-tooltip": "기본적으로 홈 폴더로 설정됩니다" }, @@ -885,7 +885,7 @@ "comedy-meme": "코미디 & 밈", "instrumental": "기악", "hardcore": "하드코어", - "k-pop": "K-팝", + "k-pop": "K-POP", "indie": "인디", "techno": "테크노", "house": "하우스", @@ -896,15 +896,15 @@ "metal": "메탈", "anime": "애니메이션", "hip-hop-rap": "힙합 & 랩", - "j-pop": "J-팝", + "j-pop": "J-POP", "rock": "록", "pop": "팝", "electronic": "일렉트로닉", "classical-orchestral": "클래식 & 오케스트라" }, "map-specificities": { - "automapper": "AI", - "ranked": "랭크 인", + "automapper": "오토매핑", + "ranked": "랭크", "curated": "선별됨", "verified": "인증됨", "fullSpread": "풀 스프레드" @@ -920,8 +920,8 @@ "ExpertPlus": "전문가+" }, "map-item": { - "by": "{songAutor} 작성", - "mapped-by": "작성자 ", + "by": "{songAutor} 작곡", + "mapped-by": "매퍼: ", "delete": "삭제", "preview": "맵 미리보기", "bsr-code": "BSR 코드", @@ -970,7 +970,7 @@ "modals": { "delete-model": { "title": "모델 삭제", - "desc": "정말로 모델 {modelName}를 삭제하시겠습니까?", + "desc": "정말로 모델 {modelName}을(를) 삭제하시겠습니까?", "linked-annotation": "이 모델은 모든 링크된 버전에서 삭제됩니다." }, "delete-models": { @@ -1187,7 +1187,7 @@ "synchronize-playlist-tip": "이 작업은 재생목록을 업데이트하고 부족한 맵을 다운로드합니다. 몇 분이 걸릴 수 있습니다.", "synchronize": "동기화", "curated": "추천", - "verified-mapper": "인증된 맵퍼", + "verified-mapper": "인증된 매퍼", "empty-playlists": "빈 재생목록", "search-playlist": "재생목록 검색", "no-playlists-found": "재생목록이 없습니다", @@ -1223,7 +1223,7 @@ "playlist-is-empty": "재생목록이 비어 있습니다", "continue": "계속", "nb-maps": "맵 수", - "nb-mappers": "맵퍼 수", + "nb-mappers": "매퍼 수", "duration": "지속 시간", "nps": "초당 음표 수", "date-picker": { From 1b33b29847f33f5208b38dcf7f109618b526ba8b Mon Sep 17 00:00:00 2001 From: izunya Date: Sat, 16 Nov 2024 03:42:26 +0900 Subject: [PATCH 07/10] Fix korean --- assets/jsons/translations/ko.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/jsons/translations/ko.json b/assets/jsons/translations/ko.json index 3b0f1567..48fb6197 100644 --- a/assets/jsons/translations/ko.json +++ b/assets/jsons/translations/ko.json @@ -340,8 +340,8 @@ "VERIFY_INTEGRITY_FAILED": "파일 검증 중 오류가 발생했습니다.", "SOME_FILES_FAILED_TO_DOWNLOAD": "일부 파일을 다운로드하지 못했습니다.", "OCULUS_LOGIN_TIMED_OUT": "로그인 토큰을 얻는 데 시간이 너무 오래 걸렸습니다.", - "OCULUS_LOGIN_WINDOW_CLOSED_BY_USER": "메타 로그인 창이 닫혔습니다.", - "NO_META_AUTH_TOKEN": "다운로드에 필요한 메타 로그인 토큰을 얻을 수 없습니다.", + "OCULUS_LOGIN_WINDOW_CLOSED_BY_USER": "Meta 로그인 창이 닫혔습니다.", + "NO_META_AUTH_TOKEN": "다운로드에 필요한 Meta 로그인 토큰을 얻을 수 없습니다.", "UNKNOWN_ERROR": "알 수 없는 오류가 발생했습니다." } } From 57cd955780a410e2b013aee9264404997a9cfdb1 Mon Sep 17 00:00:00 2001 From: Christoph Kisfeld Date: Fri, 15 Nov 2024 20:01:16 +0100 Subject: [PATCH 08/10] [bugfix-658] Change background color of Mods search box for light mode --- .../version-viewer/slides/mods/mods-grid.component.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/components/version-viewer/slides/mods/mods-grid.component.tsx b/src/renderer/components/version-viewer/slides/mods/mods-grid.component.tsx index d9996cf3..c67e1472 100644 --- a/src/renderer/components/version-viewer/slides/mods/mods-grid.component.tsx +++ b/src/renderer/components/version-viewer/slides/mods/mods-grid.component.tsx @@ -61,7 +61,7 @@ export function ModsGrid({ modsMap, installed, modsSelected, onModChange, moreIn - {filterEnabled ? handleInput(e.target.value)} /> : {t("pages.version-viewer.mods.mods-grid.header-bar.name")}} + {filterEnabled ? handleInput(e.target.value)} /> : {t("pages.version-viewer.mods.mods-grid.header-bar.name")}} {t("pages.version-viewer.mods.mods-grid.header-bar.installed")} {t("pages.version-viewer.mods.mods-grid.header-bar.latest")} {t("pages.version-viewer.mods.mods-grid.header-bar.description")} From c4ee9ba15529aaf14b60a821d6b7a5228e1b88cf Mon Sep 17 00:00:00 2001 From: MathieuG-P <40181755+Zagrios@users.noreply.github.com> Date: Sat, 16 Nov 2024 20:02:46 +0100 Subject: [PATCH 09/10] Add patreon --- assets/jsons/patreons.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/assets/jsons/patreons.json b/assets/jsons/patreons.json index b9dc0cc2..6f98d6cf 100644 --- a/assets/jsons/patreons.json +++ b/assets/jsons/patreons.json @@ -114,5 +114,9 @@ }, { "username": "clapxz" - } -] \ No newline at end of file + }, + { + "username": "Reflected Chop", + "type": "gold" + }, +] From 2744df680380bc0af7f6841b960cd37aa97843c2 Mon Sep 17 00:00:00 2001 From: MathieuG-P <40181755+Zagrios@users.noreply.github.com> Date: Sat, 16 Nov 2024 20:04:05 +0100 Subject: [PATCH 10/10] fix json error --- assets/jsons/patreons.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/jsons/patreons.json b/assets/jsons/patreons.json index 6f98d6cf..ac1dcceb 100644 --- a/assets/jsons/patreons.json +++ b/assets/jsons/patreons.json @@ -118,5 +118,5 @@ { "username": "Reflected Chop", "type": "gold" - }, + } ]