diff --git a/.github/workflows/check-translations.yml b/.github/workflows/check-translations.yml new file mode 100644 index 000000000..39dee5d19 --- /dev/null +++ b/.github/workflows/check-translations.yml @@ -0,0 +1,21 @@ +name: Check Translations + +on: [push, pull_request] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Checkout submodules + run: git submodule update --init --recursive + - name: Set up JDK 11 + uses: actions/setup-java@v1 + with: + distribution: 'zulu' + java-version: '11' + java-package: jdk+fx + - name: Check style test + run: ./gradlew checkTranslations diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index b65b6e245..4b23a9a60 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -29,6 +29,7 @@ about.legal=Legal Acknowledgement about.thanks_to=Thanks to about.thanks_to.bangbang93.statement=BMCLAPI about.thanks_to.contributors=All contributors who participated in this project via issues, pull requests, etc. +about.thanks_to.contributors.statement=Thanks to the open source community for supporting the Hello Minecraft! Launcher about.thanks_to.gamerteam.statement=Default background image about.thanks_to.mcbbs=MCBBS about.thanks_to.mcbbs.statement=Provide MCBBS download source @@ -59,8 +60,6 @@ account.failed.no_character=No character in this account. account.failed.server_response_malformed=Invalid server response. The authentication server may have an error. account.injector.add=Add an authentication server account.injector.empty=Empty (Click the plus button on the right to add) -account.injector.manage=Manage authentication servers -account.injector.manage.title=Authentication servers account.injector.http=Warning: This server uses HTTP so your password will be transmitted in clear text. account.injector.link.register=Register account.injector.server=Auth Server @@ -69,7 +68,7 @@ account.injector.server_name=Server Name account.login=Login account.login.hint=We will not save your password. account.logout=Logout -account.register=註冊 +account.register=Register account.manage=Account List account.methods=Login Type account.methods.authlib_injector=authlib-injector @@ -121,6 +120,7 @@ button.refresh=Refresh button.remove=Remove button.remove.confirm=Are you sure you want to delete? You cannot roll back this operation! button.save=Save +button.save_as=Save As button.yes=Yes color.recent=Recommended @@ -237,6 +237,8 @@ curse.sort.total_downloads=Total Downloads download=Download download.code.404=File not found on the remote server: %s +download.curseforge.customization=Light and shadow, and game customization +download.existing=The file cannot be saved because it already exists. You can choose 'Save As' to save the file elsewhere. download.external_link=Open Download Site download.failed=Failed to download %1$s, response code: %2$d download.failed.empty=No candidates. Click here to return. @@ -293,6 +295,9 @@ folder.resourcepacks=Resource packs folder.saves=Saves folder.screenshots=Screenshots +game=Game +game.version=Game version + help=Help help.doc=Documentations help.detail=For manufacturers of datapacks, modpacks, etc. @@ -337,7 +342,7 @@ install.new_game.already_exists=This version already exists. install.new_game.current_game_version=Current Game Version install.new_game.malformed=Invalid name install.select=Select an operation -install.success=successfully installed +install.success=successfully installed lang=English lang.default=Use system language @@ -478,6 +483,7 @@ mods=Mods mods.add=Install mods mods.add.failed=Failed to install mods %s. mods.add.success=Successfully installed mods %s. +mods.category=Category mods.choose_mod=Choose your mods mods.disable=Disable mods.download=Mod Downloads @@ -571,6 +577,9 @@ repositories.chooser.title=Do you want to download JavaFX? resourcepack=Resource Pack +search=Search +search.sort=Sort + selector.choose=Choose selector.choose_file=Select a file selector.custom=Custom @@ -587,12 +596,14 @@ settings.advanced.java_permanent_generation_space=PermGen Space/MB settings.advanced.java_permanent_generation_space.prompt=Metaspace on Java 8 and above, MB settings.advanced.jvm=Java Virtual Machine Settings settings.advanced.jvm_args=Java VM Arguments (overriding defaults) +settings.advanced.jvm_args.prompt=Fill in here to override the default settings settings.advanced.launcher_visibility.close=Close the launcher when the game launched. settings.advanced.launcher_visibility.hide=Hide the launcher when the game launched. settings.advanced.launcher_visibility.hide_and_reopen=Hide the launcher and re-open when game closes. settings.advanced.launcher_visibility.keep=Keep the launcher visible. settings.advanced.launcher_visible=Launcher Visibility settings.advanced.minecraft_arguments=Minecraft Arguments +settings.advanced.minecraft_arguments.prompt=Default settings.advanced.natives_directory=Local Library Path (LWJGL) settings.advanced.natives_directory.choose=Choose Local Library Path settings.advanced.natives_directory.default=Standerd (.minecraft/versions//natives/) @@ -633,6 +644,7 @@ settings.launcher=Settings settings.launcher.appearance=Appearance settings.launcher.common_path.tooltip=This app will cache all downloads here. settings.launcher.debug=Debug +settings.launcher.download=Download settings.launcher.download.threads=Threads settings.launcher.download.threads.auto=Auto Determined settings.launcher.download.threads.hint=Too large concurrency may cause system to freeze. Download speed may be affected by ICP and destination server. diff --git a/HMCL/src/main/resources/assets/lang/I18N_es.properties b/HMCL/src/main/resources/assets/lang/I18N_es.properties index 94c86ba03..386ea89e5 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_es.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_es.properties @@ -47,8 +47,6 @@ account.failed.no_character=No hay personaje en esta cuenta. account.failed.server_response_malformed=Respuesta de servidor inválida. El servidor de autenticación puede tener fallo. account.injector.add=Añadir servidor de autenticación account.injector.empty=Vacío (clic el botón plus a la derecha para añadir) -account.injector.manage=Gestionar servidores de autenticación -account.injector.manage.title=Servidores de autenticación account.injector.http=Advertencia: Este servidor está usando HTTP, su contraseña será transmitida en lo claro. account.injector.link.register=Registrar account.injector.server=Servidor de aut. diff --git a/HMCL/src/main/resources/assets/lang/I18N_ru.properties b/HMCL/src/main/resources/assets/lang/I18N_ru.properties index da810b441..911d3bbc3 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_ru.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_ru.properties @@ -47,8 +47,6 @@ account.failed.no_character=В этой учётной записи нет пе account.failed.server_response_malformed=Неверный ответ сервера. Возможно, на сервере аутентификации произошёл сбой. account.injector.add=Добавить сервер аутентификации account.injector.empty=Пусто (Для добавления, нажмите кнопку «ПЛЮС») -account.injector.manage=Управление серверами аутентификации -account.injector.manage.title=Сервера аутентификации account.injector.http=Внимание: Этот сервер использует HTTP, поэтому ваш пароль будет передаваться открытым текстом. account.injector.link.register=Регистрация account.injector.server=Сервер аутентификации diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index 9ad82bf41..9b2c17fa1 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -17,11 +17,22 @@ # # Contributors: pan93412 +about=關於 about.copyright=著作權 about.copyright.statement=著作權所有 (c) 2021 huangyuhui。 about.author=作者 about.author.statement=huanghongxun (hmcl@huangyuhui.net) +about.legal=法律聲明 about.thanks_to=鳴謝 +about.thanks_to.bangbang93.statement=提供 BMCLAPI 下載源,請贊助支持 BMCLAPI! +about.thanks_to.contributors=所有通過 Issues、Pull Requests 等管道參與本項目的貢獻者 +about.thanks_to.contributors.statement=沒有開源社區的支持,Hello Minecraft! Launcher 無法走到今天 +about.thanks_to.gamerteam.statement=提供默認背景圖 +about.thanks_to.mcbbs=MCBBS 我的世界中文論壇 +about.thanks_to.mcbbs.statement=提供 MCBBS 下載源 +about.thanks_to.users=HMCL 用戶群成員 +about.thanks_to.users.statement=感謝用戶群成員贊助充電、積極催更、迴響問題、出謀劃策 +about.thanks_to.yushijinhun.statement=authlib-injector 相关支持 about.thanks_to.statement=bangbang93 (BMCLAPI, https://bmclapi2.bangbang93.com/)\ngamerteam (預設背景圖)\n所有透過 Issues、Pull Requests 等方式參與本項目的貢獻者 about.dependency=相依元件 # 由於篇幅限制,僅列出第一作者 @@ -38,7 +49,7 @@ account.create=建立帳戶 account.create.microsoft=添加微軟帳戶 account.create.yggdrasil=添加 Mojang 帳戶 account.create.offline=添加離線模式帳戶 -account.create.authlibInjector=添加外置登錄帳戶 (authlib-injector) +account.create.authlibInjector=添加外置登入帳戶 (authlib-injector) account.email=電子信箱 account.failed=錯誤碼: %d account.failed.character_deleted=已刪除此角色 @@ -59,7 +70,7 @@ account.injector.link.register=註冊 account.injector.server=認證伺服器 account.injector.server_url=伺服器位址 account.injector.server_name=伺服器名稱 -account.login=登錄 +account.login=登入 account.login.hint=我們不會保存你的密碼 account.logout=登出 account.register=註冊 @@ -67,16 +78,16 @@ account.manage=帳戶列表 account.methods=登入方式 account.methods.authlib_injector=authlib-injector 登入 account.methods.microsoft=微軟帳戶 -account.methods.microsoft.close_page=已完成微軟帳號授權,接下來啟動器還需要完成剩餘登錄步驟。你已經可以關閉本頁面了。 -account.methods.microsoft.error.add_family=由於你未滿 18 歲,你的帳號必須被加入到家庭中才能登錄遊戲。 +account.methods.microsoft.close_page=已完成微軟帳號授權,接下來啟動器還需要完成剩餘登入步驟。你已經可以關閉本頁面了。 +account.methods.microsoft.error.add_family=由於你未滿 18 歲,你的帳號必須被加入到家庭中才能登入遊戲。你也可以更改你的帳戶的出生日期,使年齡滿18歲以上以繼續登入。 account.methods.microsoft.error.country_unavailable=你所在的國家或地區不受 XBox Live 的支持。 -account.methods.microsoft.error.missing_xbox_account=你的微軟帳號尚未關聯 XBox 帳號,你必須先創建 XBox 帳號,才能登錄遊戲。 +account.methods.microsoft.error.missing_xbox_account=你的微軟帳號尚未關聯 XBox 帳號,你必須先創建 XBox 帳號,才能登入遊戲。 account.methods.microsoft.error.no_character=該帳號沒有包含 Minecraft Java 版購買記錄 -account.methods.microsoft.error.unknown=登錄失敗,錯誤碼:%d -account.methods.microsoft.logging_in=登錄中... -account.methods.microsoft.hint=您需要點擊登錄按鈕,並在新打開的瀏覽器窗口中完成登錄。 -account.methods.microsoft.manual=若登錄頁面未能打開,您可以點擊此處複製連結,並手動在瀏覽器中打開網頁。 -account.methods.microsoft.waiting_browser=等待在新打開的瀏覽器窗口中完成登錄... +account.methods.microsoft.error.unknown=登入失敗,錯誤碼:%d +account.methods.microsoft.logging_in=登入中... +account.methods.microsoft.hint=您需要點擊登入按鈕,並在新打開的瀏覽器窗口中完成登入。 +account.methods.microsoft.manual=若登入頁面未能打開,您可以點擊此處複製連結,並手動在瀏覽器中打開網頁。 +account.methods.microsoft.waiting_browser=等待在新打開的瀏覽器窗口中完成登入... account.methods.offline=離線模式 account.methods.offline.uuid=UUID account.methods.offline.uuid.hint=UUID 是 Minecraft 對玩家角色的唯一標識符,每個啟動器生成 UUID 的方式可能不同。通過修改 UUID 選項至原啟動器所生成的 UUID,你可以保證在切換啟動器後,遊戲還能將你的遊戲角色識別為給定 UUID 所對應的角色,從而保留原來角色的背包物品。UUID 選項為高級選項,除非你知道你在做什麼,否則你不需要調整該選項。 @@ -84,7 +95,7 @@ account.methods.offline.uuid.malformed=格式錯誤 account.methods.yggdrasil=正版登入 account.missing=沒有遊戲帳戶 account.missing.add=按一下此處加入帳戶 -account.not_logged_in=未登錄 +account.not_logged_in=未登入 account.password=密碼 account.skin.file=皮膚圖片檔案 account.skin.upload=上傳皮膚 @@ -114,6 +125,7 @@ button.refresh=重新整理 button.remove=刪除 button.remove.confirm=您確認要刪除嗎?該操作無法撤銷! button.save=儲存 +button.save_as=另存為 button.yes=是 color.recent=建議 @@ -230,12 +242,18 @@ curse.sort.total_downloads=下載量 download=下載 download.code.404=遠端伺服器沒有需要下載的檔案: %s +download.curseforge.customization=光影與遊戲定制 +download.existing=檔案已存在,無法保存。你可以選擇另存為將檔案保存至其他地方。 +download.external_link=打開下載網站 download.failed=下載失敗: %1$s,錯誤碼:%2$d download.failed.empty=沒有能安裝的版本,按一下此處返回。 download.failed.refresh=載入版本列表失敗,按一下此處重試。 download.provider.mcbbs=我的世界中文論壇 (MCBBS, https://www.mcbbs.net/) download.provider.bmclapi=BMCLAPI (bangbang93,https://bmclapi2.bangbang93.com/) download.provider.mojang=官方伺服器 (OptiFine 自動安裝的下載來源是 BMCLAPI) +download.provider.official=儘量使用官方源(最新,但可能加載慢) +download.provider.balanced=選擇加載速度快的下載源(平衡,但可能不是最新) +download.provider.mirror=儘量使用鏡像源(加載快,但可能不是最新) download.javafx=正在下載 JavaFX 運行時組件 extension.bat=Windows 指令碼 @@ -255,12 +273,13 @@ feedback.add=新增回饋 feedback.add.hint.search_before_add=添加回饋前,請先搜索已有回饋中是否已經有人提出過相關內容,如果有,你可以透過給對應回饋按讚來提升對應回饋的優先度。 feedback.add.hint.title=回饋標題需能簡練概括你的需求。"我有問題"、"我有一個想法"、"遊戲打不開" 等無法讓其他人一眼看出大致問題的標題是不被接受的。 feedback.add.hint.content=回饋內容需完整且簡練地表達你的需求。如果你遇到了問題,你需要詳細描述復現路徑,比如在打開啟動器後通過點擊什麼按鈕,做了什麼操作後觸發了什麼問題。如果你希望添加新功能,你需要闡述:為什麼玩家需要該功能,該功能能解決什麼問題,該功能可以怎麼實現。 -feedback.add.login=你需要先登錄/註冊 HMCL 回饋帳號並獲得回饋權限才能添加回饋。 +feedback.add.login=你需要先登入/註冊 HMCL 回饋帳號並獲得回饋權限才能添加回饋。 feedback.add.permission=你需要獲得回饋權限才能添加回饋。 feedback.author=發布者 feedback.content=正文 +feedback.failed=載入失敗 feedback.like=贊成 -feedback.login=登錄 HMCL 帳號 +feedback.login=登入 HMCL 帳號 feedback.response=回復 feedback.state.accepted=接受 feedback.state.pending=審核中 @@ -281,6 +300,9 @@ folder.resourcepacks=資源包資料夾 folder.saves=遊戲存檔資料夾 folder.screenshots=截圖資料夾 +game=遊戲 +game.version=遊戲版本 + help=說明 help.doc=Hello Minecraft! Launcher 說明文件 help.detail=可查閱資料包、整合包製作指南等內容。 @@ -303,7 +325,9 @@ install.failed.optifine_conflict=暫不支援 OptiFine 與 Forge 同時安裝在 install.failed.version_mismatch=該軟體需要的遊戲版本為 %s,但實際的遊戲版本為 %s。 install.installer.change_version=%s,該版本與當前遊戲不相容,您需要點擊此處更換版本或刪除 install.installer.choose=選擇 %s 版本 +install.installer.depend=需要先安裝 %s install.installer.fabric=Fabric +install.installer.fabric-api=Fabric API install.installer.forge=Forge install.installer.game=Minecraft install.installer.incompatible=與 %s 不相容 @@ -338,6 +362,7 @@ launch.advice.java8_51_1_13=低於 1.8.0_51 的 Java 版本可能會導致 Minec launch.advice.java9=低於 (包含) 1.13 的有安裝 Mod 的 Minecraft 版本不支援 Java 9 或更高版本,請使用 Java 8。 launch.advice.newer_java=偵測到您未使用 Java 8 及更新版本,Java 8 能使遊戲更順暢而且 Minecraft 1.12 及更新版本和很多 Mod 強制需要 Java 8 版本。 launch.advice.not_enough_space=您設定的記憶體大小過大,由於超過了系統記憶體大小 %dMB,所以可能影響遊戲體驗或無法啟動遊戲。是否繼續啟動? +launch.advice.require_newer_java_version=Minecraft %1$s 僅能運行在 Java %2$s 或更高版本上,是否下載? launch.advice.too_large_memory_for_32bit=您設定的記憶體大小過大,由於可能超過了 32 位元 Java 的記憶體分配限制,所以可能無法啟動遊戲,請將記憶體調至低於 1024MB 的值。是否繼續啟動? launch.failed=啟動失敗 launch.failed.cannot_create_jvm=偵測到無法建立 Java 虛擬機,可能是 Java 參數有問題。可以在設定中開啟無參數模式啟動。 @@ -398,6 +423,7 @@ modpack.choose.remote.detail=需要提供整合包的下載連結 modpack.choose.remote.tooltip=要下載的整合包的連結 modpack.desc=描述你要製作的整合包,比如整合包注意事項和更新記錄,支援 Markdown(圖片請上傳至網路)。 modpack.description=整合包描述 +modpack.download=下載整合包 modpack.enter_name=給遊戲取個你喜歡的名稱 modpack.export=匯出整合包 modpack.export.as=請選擇整合包類型。若你無法決定,請選擇 HMCL 類型。 @@ -422,6 +448,10 @@ modpack.invalid=無效的整合包升級檔案,可能是下載時出現問題 modpack.mismatched_type=整合包類型不符,目前遊戲是 %s 整合包,但是提供的整合包更新檔案是 %s 整合包。 modpack.name=整合包名稱 modpack.not_a_valid_name=整合包名稱無效 +modpack.origin=來源 +modpack.origin.url=官方網站 +modpack.origin.mcbbs=MCBBS +modpack.origin.mcbbs.prompt=貼子 id modpack.scan=解析整合包 modpack.task.install=匯入整合包 modpack.task.install.error=無法識別該整合包,目前僅支援匯入 Curse、MultiMC、HMCL 整合包。 @@ -433,6 +463,8 @@ modpack.type.curse.error=無法完成 Curse 整合包的下載,請多次重試 modpack.type.curse.not_found=部分必需檔案已經從網路中被刪除並且再也無法下載,請嘗試該整合包的最新版本或者安裝其他整合包。 modpack.type.hmcl=HMCL modpack.type.hmcl.export=可以被 Hello Minecraft! Launcher (HMCL) 匯入 +modpack.type.mcbbs=我的世界中文論壇整合包標準 +modpack.type.mcbbs.export=可以被 Hello Minecraft! Launcher (HMCL) 和 MultiMC 匯入 modpack.type.multimc=MultiMC modpack.type.multimc.export=可以被 Hello Minecraft! Launcher (HMCL) 和 MultiMC 匯入 modpack.type.server=伺服器自動更新整合包 @@ -448,6 +480,7 @@ modpack.wizard.step.2.title=選中你想加到整合包中的檔案或資料夾 modpack.wizard.step.3=整合包類型 modpack.wizard.step.3.title=選擇整合包匯出類型 modpack.wizard.step.initialization.exported_version=要匯出的遊戲版本 +modpack.wizard.step.initialization.force_update=強制陞級綜合包至最新版本(需要自建服務器) modpack.wizard.step.initialization.include_launcher=包含啟動器 modpack.wizard.step.initialization.save=選擇要匯出到的遊戲整合包位置 modpack.wizard.step.initialization.warning=在製作整合包前,請您確認您選擇的版本可以正常啟動,\n並保證您的 Minecraft 是正式版而非快照版,\n而且不應將不允許非官方途徑傳播的 Mod 模組、材質包等納入整合包。\n整合包會儲存您目前的下載來源設定 @@ -457,12 +490,18 @@ mods=模組 mods.add=新增模組 mods.add.failed=新增模組 %s 失敗。 mods.add.success=成功新增模組 %s。 +mods.category=類別 mods.choose_mod=選擇模組 -mods.enable=啟用 mods.disable=停用 -mods.mangage=模組管理 +mods.download=模組下載 +mods.download.title=模組下載 - %1s +mods.enable=啟用 +mods.manage=模組管理 +mods.mcmod.page=MC 百科頁面 +mods.mcmod.search=MC 百科蒐索 mods.name=名稱 mods.not_modded=你需要先在自動安裝頁面安裝 Fabric、Forge 或 LiteLoader 才能進行模組管理。 +mods.url=官方頁面 multiplayer=聯機 multiplayer.download=正在下載依賴 @@ -609,6 +648,7 @@ settings.game.working_directory.choose=選擇執行路徑 settings.icon=遊戲圖示 settings.launcher=啟動器設定 +settings.launcher.appearance=外觀 settings.launcher.common_path.tooltip=啟動器將所有遊戲資源及相依元件庫檔案放於此集中管理,如果遊戲資料夾內有現成的將不會使用公共庫檔案 settings.launcher.debug=除錯 settings.launcher.download=下載 @@ -631,6 +671,7 @@ settings.launcher.proxy.authentication=身份驗證 settings.launcher.proxy.disable=使用系統代理 settings.launcher.proxy.host=主機 settings.launcher.proxy.http=HTTP +settings.launcher.proxy.none=不使用代理 settings.launcher.proxy.password=密碼 settings.launcher.proxy.port=連線埠 settings.launcher.proxy.socks=Socks diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties index fd831e25b..7e9684083 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -39,14 +39,14 @@ about.thanks_to.yushijinhun.statement=authlib-injector 相关支持 about.open_source=开源 about.open_source.statement=GPL v3 (https://github.com/huanghongxun/HMCL/) -account=账户 +account=帐户 account.character=角色 account.choose=选择一个角色 -account.create=添加账户 -account.create.microsoft=添加微软账户 -account.create.yggdrasil=添加 Mojang 账户 -account.create.offline=添加离线模式账户 -account.create.authlibInjector=添加外置登录账户 (authlib-injector) +account.create=添加帐户 +account.create.microsoft=添加微软帐户 +account.create.yggdrasil=添加 Mojang 帐户 +account.create.offline=添加离线模式帐户 +account.create.authlibInjector=添加外置登录帐户 (authlib-injector) account.email=邮箱 account.failed=错误码: %d account.failed.character_deleted=此角色已被删除 @@ -69,15 +69,15 @@ account.login=登录 account.login.hint=我们不会保存你的密码 account.logout=登出 account.register=注册 -account.manage=账户列表 +account.manage=帐户列表 account.methods=登录方式 account.methods.authlib_injector=外置登录 (authlib-injector) -account.methods.microsoft=微软账户 -account.methods.microsoft.close_page=已完成微软账号授权,接下来启动器还需要完成剩余登录步骤。你已经可以关闭本页面了。 -account.methods.microsoft.error.add_family=由於你的帳號登記年齡未滿 18 歲,你的帳號必須被加入到家庭中才能登錄遊戲。你可以更改你的帳號的出生日期設置,使年齡滿 18 歲以上以繼續登錄。 +account.methods.microsoft=微软帐户 +account.methods.microsoft.close_page=已完成微软帐户授权,接下来启动器还需要完成剩余登录步骤。你已经可以关闭本页面了。 +account.methods.microsoft.error.add_family=由于你未满 18 岁,你的帐户必须被加入到家庭中才能登录游戏。你也可以更改你的帐户的出生日期,使年龄满 18 岁以上以继续登录。 account.methods.microsoft.error.country_unavailable=你所在的国家或地区不受 XBox Live 的支持。 -account.methods.microsoft.error.missing_xbox_account=你的微软账号尚未关联 XBox 账号,你必须先创建 XBox 账号,才能登录游戏。 -account.methods.microsoft.error.no_character=该账号没有包含 Minecraft Java 版购买记录 +account.methods.microsoft.error.missing_xbox_account=你的微软帐户尚未关联 XBox 帐户,你必须先创建 XBox 帐户,才能登录游戏。 +account.methods.microsoft.error.no_character=该帐户没有包含 Minecraft Java 版购买记录 account.methods.microsoft.error.unknown=登录失败,错误码:%d account.methods.microsoft.logging_in=登录中... account.methods.microsoft.hint=您需要点击登录按钮,并在新打开的浏览器窗口中完成登录。 @@ -87,9 +87,9 @@ account.methods.offline=离线模式 account.methods.offline.uuid=UUID account.methods.offline.uuid.hint=UUID 是 Minecraft 对玩家角色的唯一标识符,每个启动器生成 UUID 的方式可能不同。通过修改 UUID 选项至原启动器所生成的 UUID,你可以保证在切换启动器后,游戏还能将你的游戏角色识别为给定 UUID 所对应的角色,从而保留原来角色的背包物品。UUID 选项为高级选项,除非你知道你在做什么,否则你不需要调整该选项。 account.methods.offline.uuid.malformed=格式错误 -account.methods.yggdrasil=Mojang 账号 -account.missing=没有游戏账户 -account.missing.add=点击此处添加账户 +account.methods.yggdrasil=Mojang 帐户 +account.missing=没有游戏帐户 +account.missing.add=点击此处添加帐户 account.not_logged_in=未登录 account.password=密码 account.skin.file=皮肤图片文件 @@ -268,13 +268,13 @@ feedback.add=新增反馈 feedback.add.hint.search_before_add=添加反馈前,请先搜索已有反馈中是否已经有人提出过相关内容,如果有,你可以通过给对应反馈点赞来提升对应反馈的优先级。 feedback.add.hint.title=反馈标题需能简练概括你的需求。带有 "我有问题"、"我有一个想法"、"游戏打不开" 等无法让其他人一眼看出大致问题的标题的反馈将会被直接关闭。 feedback.add.hint.content=反馈内容需完整且简练地表达你的需求。如果你遇到了问题,你需要详细描述复现路径,比如在打开启动器后通过点击什么按钮,做了什么操作后触发了什么问题。如果你希望添加新功能,你需要阐述:为什么玩家需要该功能,该功能能解决什么问题,该功能可以怎么实现。 -feedback.add.login=你需要先登录/注册 HMCL 反馈账号并获得反馈权限才能添加反馈。 +feedback.add.login=你需要先登录/注册 HMCL 反馈帐户并获得反馈权限才能添加反馈。 feedback.add.permission=你需要获得反馈权限才能添加反馈。 feedback.author=发布者 feedback.content=正文 -feedback.failed=載入失敗 +feedback.failed=加载失败 feedback.like=赞成 -feedback.login=登录 HMCL 账号 +feedback.login=登录 HMCL 帐户 feedback.response=回复 feedback.state.accepted=接受 feedback.state.pending=审核中 @@ -671,7 +671,7 @@ settings.launcher.proxy.none=不使用代理 settings.launcher.proxy.password=密码 settings.launcher.proxy.port=端口 settings.launcher.proxy.socks=Socks -settings.launcher.proxy.username=账户 +settings.launcher.proxy.username=帐户 settings.launcher.theme=主题 settings.launcher.version_list_source=版本列表源 diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java index 29b2535bc..49b508bfc 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java @@ -18,12 +18,15 @@ package org.jackhuang.hmcl.util.platform; import java.io.File; +import java.io.IOException; import java.nio.charset.Charset; +import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; import java.util.Locale; import java.util.Optional; +import java.util.regex.Matcher; import java.util.regex.Pattern; /** @@ -92,6 +95,8 @@ public enum OperatingSystem { private static final String[] INVALID_RESOURCE_BASENAMES; private static final String[] INVALID_RESOURCE_FULLNAMES; + private static final Pattern MEMINFO_PATTERN = Pattern.compile("^(?.*?):\\s+(?\\d+) kB?$"); + static { String name = System.getProperty("os.name").toLowerCase(Locale.US); if (name.contains("win")) @@ -130,6 +135,33 @@ public enum OperatingSystem { } public static Optional getPhysicalMemoryStatus() { + if (CURRENT_OS == LINUX) { + try { + long free = 0, available = 0, total = 0; + for (String line : Files.readAllLines(Paths.get("/proc/meminfo"))) { + Matcher matcher = MEMINFO_PATTERN.matcher(line); + if (matcher.find()) { + String key = matcher.group("key"); + String value = matcher.group("value"); + if ("MemAvailable".equals(key)) { + available = Long.parseLong(value) * 1024; + } + if ("MemFree".equals(key)) { + free = Long.parseLong(value) * 1024; + } + if ("MemTotal".equals(key)) { + total = Long.parseLong(value) * 1024; + } + } + } + if (total > 0) { + return Optional.of(new PhysicalMemoryStatus(total, available > 0 ? available : free)); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + java.lang.management.OperatingSystemMXBean bean = java.lang.management.ManagementFactory.getOperatingSystemMXBean(); if (bean instanceof com.sun.management.OperatingSystemMXBean) { com.sun.management.OperatingSystemMXBean sunBean = diff --git a/HMCLauncher/HMCL/main.cpp b/HMCLauncher/HMCL/main.cpp index 5f0c1b1da..ea6a097c7 100644 --- a/HMCLauncher/HMCL/main.cpp +++ b/HMCLauncher/HMCL/main.cpp @@ -6,6 +6,11 @@ Version J8(TEXT("8")); +extern "C" { + _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; + _declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 0x00000001; +} + void RawLaunchJVM(const std::wstring &javaPath, const std::wstring &workdir, const std::wstring &jarPath) { if (MyCreateProcess( diff --git a/build.gradle b/build.gradle index d2221bed1..444942b18 100644 --- a/build.gradle +++ b/build.gradle @@ -122,4 +122,37 @@ task 'preTouchOpenJFXDependencies' { } } } +} + +task 'checkTranslations' { + group 'verification' + doLast { + var en = new Properties() + var zh = new Properties() + var zh_CN = new Properties() + + file("HMCL/src/main/resources/assets/lang/I18N.properties").withInputStream { en.load(it) } + file("HMCL/src/main/resources/assets/lang/I18N_zh.properties").withInputStream { zh.load(it) } + file("HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties").withInputStream { zh_CN.load(it) } + + boolean success = true + + zh_CN.forEach { k, v -> + if (!en.containsKey(k)) { + project.logger.log(LogLevel.WARN, "I18N.properties missing key '$k'") + success = false + } + } + + zh_CN.forEach { k, v -> + if (!zh.containsKey(k)) { + project.logger.log(LogLevel.WARN, "I18N_zh.properties missing key '$k'") + success = false + } + } + + if (!success) { + throw new GradleException("Part of the translation is missing") + } + } } \ No newline at end of file