From abb0ece3e57f1548556ce7bbfef38c25f70812b4 Mon Sep 17 00:00:00 2001 From: Halogly <79710384+Halogly@users.noreply.github.com> Date: Wed, 10 Sep 2025 00:13:41 +0800 Subject: [PATCH] Optimize Chinese Localization, Add Time Units, and Fix Italic Bug (#796) * add time unit to language file * Fixed a bug where the font following a blocktype name was incorrectly rendered in italics. * Collected time unit abbreviations * Update pom.xml --------- Co-authored-by: Intelli <6790859+Intelli@users.noreply.github.com> --- lang/en.yml | 1 + lang/zh-cn.yml | 249 +++++++++--------- pom.xml | 2 +- .../database/lookup/BlockLookup.java | 25 +- .../net/coreprotect/language/Language.java | 1 + .../java/net/coreprotect/language/Phrase.java | 9 +- .../net/coreprotect/utility/ChatUtils.java | 16 +- 7 files changed, 156 insertions(+), 147 deletions(-) diff --git a/lang/en.yml b/lang/en.yml index 8f12325..0be57b5 100644 --- a/lang/en.yml +++ b/lang/en.yml @@ -194,6 +194,7 @@ TIME_HOURS: "{0} {hour|hours}" TIME_MINUTES: "{0} {minute|minutes}" TIME_MONTHS: "{0} {month|months}" TIME_SECONDS: "{0} {second|seconds}" +TIME_UNITS: "{/m|/h|/d}" TIME_WEEKS: "{0} {week|weeks}" TIME_YEARS: "{0} {year|years}" UPDATE_ERROR: "An error occurred while checking for updates." diff --git a/lang/zh-cn.yml b/lang/zh-cn.yml index 4c05b83..f63b2c8 100644 --- a/lang/zh-cn.yml +++ b/lang/zh-cn.yml @@ -1,202 +1,213 @@ # CoreProtect Language File (zh-CN) -# Origin: Intelli, Translator: DreamVoid, StarWishsama, YuanYuanOwO +# Origin: Intelli, Translator: DreamVoid, StarWishsama, YuanYuanOwO, Halogly -ACTION_NOT_SUPPORTED: "该命令不支持该操作。" +ACTION_NOT_SUPPORTED: "此命令不支持该操作。" AMOUNT_BLOCK: "{0}个{方块|方块}" AMOUNT_CHUNK: "{0}个{区块|区块}" AMOUNT_ENTITY: "{0}个{实体|实体}" AMOUNT_ITEM: "{0}个{物品|物品}" API_TEST: "API 测试成功。" -CACHE_ERROR: "警告: 验证缓存 {0} 时出错。" -CACHE_RELOAD: "正在强制从数据库中重新加载{映射|世界}的缓存。" +CACHE_ERROR: "警告:验证缓存 {0} 时出错。" +CACHE_RELOAD: "正在强制从数据库中重新加载{映射|世界}缓存。" CHECK_CONFIG: "请检查 config.yml 文件" COMMAND_CONSOLE: "请在控制台中运行此命令。" -COMMAND_NOT_FOUND: "找不到命令 \"{0}\"" -COMMAND_THROTTLED: "请稍等片刻,然后重试。" +COMMAND_NOT_FOUND: "命令 \"{0}\" 未找到。" +COMMAND_THROTTLED: "请稍后再试。" CONSUMER_ERROR: "数据处理队列已经{暂停|恢复}。" -CONSUMER_TOGGLED: "数据处理队列现已{暂停|恢复}。" +CONSUMER_TOGGLED: "数据处理队列已{暂停|恢复}。" CONTAINER_HEADER: "容器物品变更记录" -DATABASE_BUSY: "数据库繁忙,请稍后重试。" +CPU_CORES: "CPU 核心。" +DATABASE_BUSY: "数据库繁忙,请稍后再试。" DATABASE_INDEX_ERROR: "无法验证数据库索引。" -DATABASE_LOCKED_1: "数据库已被锁定,请等待至少15秒后重试..." -DATABASE_LOCKED_2: "数据库已在使用,请再试一次。" -DATABASE_LOCKED_3: "禁用数据库锁定,请在配置文件中设置 \"database-lock: false\"。" +DATABASE_LOCKED_1: "数据库已锁定,请等待约15秒后再试..." +DATABASE_LOCKED_2: "数据库正在使用中,请稍后再试。" +DATABASE_LOCKED_3: "要禁用数据库锁定,请在配置文件中设置 \"database-lock: false\"。" DATABASE_LOCKED_4: "禁用数据库锁定可能会导致数据损坏。" -DATABASE_UNREACHABLE: "数据库无法访问。正在丢弃数据并关闭。" +DATABASE_UNREACHABLE: "数据库连接失败,正在丢弃数据并关闭。" DEVELOPMENT_BRANCH: "检测到正在使用开发分支的版本,跳过使用补丁脚本。" DIRT_BLOCK: "已在你的下方放置了一个泥土。" -DISABLE_SUCCESS: "禁用 {0} 成功!" -ENABLE_FAILED: "无法启用 {0}!" -ENABLE_SUCCESS: "{0} 已成功启用!" +DISABLE_SUCCESS: "已成功禁用 {0}!" +DONATION_KEY_REQUIRED: "需要有效的捐赠密钥才能执行此命令。" +ENABLE_FAILED: "无法启用 {0}。" +ENABLE_SUCCESS: "已成功启用 {0}!" ENJOY_COREPROTECT: "对 {0} 感到满意吗?请加入我们的 Discord 频道!" -FINISHING_CONVERSION: "正在完成数据转换,请稍等..." -FINISHING_LOGGING: "正在完成数据记录,请稍等..." -FIRST_VERSION: "初始化数据库: {0}" +FINISHING_CONVERSION: "正在完成数据转换,请稍候..." +FINISHING_LOGGING: "正在完成数据记录,请稍候..." +FIRST_VERSION: "初始化数据库:{0}" GLOBAL_LOOKUP: "请勿在执行全局查询时指定半径。" GLOBAL_ROLLBACK: "使用 \"{0}\" 进行全局{回滚|恢复}操作" -HELP_ACTION_1: "将查询限制为一个动作。" -HELP_ACTION_2: "例子: [a:block], [a:+block], [a:-block] [a:click], [a:container], [a:inventory], [a:item], [a:kill], [a:chat], [a:command], [a:sign], [a:session], [a:username]" +HELP_ACTION_1: "将查询限制为一个操作。" +HELP_ACTION_2: "例子:[a:block],[a:+block],[a:-block],[a:click],[a:container],[a:inventory],[a:item],[a:kill],[a:chat],[a:command],[a:sign],[a:session],[a:username]" HELP_COMMAND: "显示附加信息。" HELP_EXCLUDE_1: "排除方块/玩家。" -HELP_EXCLUDE_2: "例子: [e:stone], [e:Notch], [e:stone,Notch]" +HELP_EXCLUDE_2: "例子:[e:stone],[e:Notch],[e:stone,Notch]" HELP_HEADER: "{0} 帮助" HELP_INCLUDE_1: "包括方块/实体。" -HELP_INCLUDE_2: "例子: [i:stone], [i:zombie], [i:stone,wood,bedrock]" -HELP_INSPECT_1: "启用检查器后,你可以:" +HELP_INCLUDE_2: "例子:[i:stone],[i:zombie],[i:stone,wood,bedrock]" +HELP_INSPECT_1: "启用检查器后,你可以:" HELP_INSPECT_2: "左键单击以查看方块放置记录。" HELP_INSPECT_3: "右键单击以查看相邻方块破坏记录。" HELP_INSPECT_4: "放置一个方块以查看放置位置的破坏记录。" HELP_INSPECT_5: "在液体中放置一个方块以查看液体变更记录。" HELP_INSPECT_6: "右键单击门、箱子等以查看交互记录。" -HELP_INSPECT_7: "提示: 你可以使用 \"/co i\" 进行快速查询。" -HELP_INSPECT_COMMAND: "开启或关闭方块检查状态。" -HELP_LIST: "显示所有命令的列表。" +HELP_INSPECT_7: "提示:你可以使用 \"/co i\" 进行快速查询。" +HELP_INSPECT_COMMAND: "开启或关闭方块检查器。" +HELP_LIST: "列出所有命令。" HELP_LOOKUP_1: "命令快捷方式。" -HELP_LOOKUP_2: "在查询记录后使用以查看日志" +HELP_LOOKUP_2: "检查方块后使用以查看日志。" HELP_LOOKUP_COMMAND: "高级方块数据查询。" -HELP_NO_INFO: "命令的信息 \"{0}\" 未找到。" +HELP_NO_INFO: "未找到命令 \"{0}\" 的信息。" HELP_PARAMETER: "请参阅 \"{0}\" 了解详细的参数信息。" HELP_PARAMS_1: "执行{查找|回滚|恢复}操作。" -HELP_PARAMS_2: "指定{查找|回滚|恢复}的玩家。" -HELP_PARAMS_3: "指定{查找|回滚|恢复}的时间。" -HELP_PARAMS_4: "限制{查找|回滚|恢复}的作用范围。" -HELP_PARAMS_5: "限制{查找|回滚|恢复}的动作。" -HELP_PARAMS_6: "{查找|回滚|恢复}时包括方块/实体。" -HELP_PARAMS_7: "{查找|回滚|恢复}时排除方块/玩家。" -HELP_PURGE_1: "删除指定时间的数据。" -HELP_PURGE_2: "例如,\"{0}\" 将删除超过一个月的所有数据,只保留最近30天的数据。" +HELP_PARAMS_2: "指定要{查找|回滚|恢复}的玩家。" +HELP_PARAMS_3: "指定要{查找|回滚|恢复}的时间。" +HELP_PARAMS_4: "指定一个半径区域以限制{查找|回滚|恢复}的范围。" +HELP_PARAMS_5: "将{查找|回滚|恢复}限制为一个操作。" +HELP_PARAMS_6: "{查找|回滚|恢复}时包括指定的方块/实体。" +HELP_PARAMS_7: "{查找|回滚|恢复}时排除指定的方块/玩家。" +HELP_PURGE_1: "删除早于指定时间的数据。" +HELP_PURGE_2: "例如,\"{0}\" 将删除超过一个月以上的所有数据,只保留最近30天的数据。" HELP_PURGE_COMMAND: "删除旧的方块数据。" HELP_RADIUS_1: "指定半径区域。" -HELP_RADIUS_2: "例子: [r:10] (只会影响你周围十格方块的范围)" +HELP_RADIUS_2: "例子:[r:10](只会影响你周围十格方块的范围)" HELP_RELOAD_COMMAND: "重新加载配置文件。" HELP_RESTORE_COMMAND: "恢复方块数据。" HELP_ROLLBACK_COMMAND: "回滚方块数据。" HELP_STATUS: "查看插件状态与版本信息。" HELP_STATUS_COMMAND: "显示插件状态。" HELP_TELEPORT: "传送到一个地点。" -HELP_TIME_1: "指定时间。" -HELP_TIME_2: "例子: [t:2w,5d,7h,2m,10s], [t:5d2h], [t:2.50h]" -HELP_USER_1: "指定玩家。" -HELP_USER_2: "例子: [u:Notch], [u:Notch,#enderman]" -INCOMPATIBLE_ACTION: "\"{0}\" 不能与那个动作一起使用。" -INSPECTOR_ERROR: "检查器已经{启用|禁用}了。" +HELP_TIME_1: "指定要查找的时间。" +HELP_TIME_2: "例子:[t:2w,5d,7h,2m,10s],[t:5d2h],[t:2.50h]" +HELP_USER_1: "指定要查找的玩家。" +HELP_USER_2: "例子:[u:Notch],[u:Notch,#enderman]" +INCOMPATIBLE_ACTION: "\"{0}\" 不能与那个操作一起使用。" +INSPECTOR_ERROR: "检查器已经{启用|禁用}。" INSPECTOR_TOGGLED: "检查器已{启用|禁用}。" -INTEGRATION_ERROR: "无法{初始化|禁用}与插件 {0} 的交互。" -INTEGRATION_SUCCESS: "与 {0} 的交互已成功{初始化|禁用}。" -INTEGRATION_VERSION: "发现 {0} 的版本不兼容。" +INTEGRATION_ERROR: "无法{初始化|禁用} {0} 的日志记录。" +INTEGRATION_SUCCESS: "已成功{初始化|禁用} {0} 的日志记录。" +INTEGRATION_VERSION: "{0} 版本无效。" INTERACTIONS_HEADER: "玩家交互" -INVALID_ACTION: "这不是有效的动作。" -INVALID_BRANCH_1: "插件版本无效(未设置分支)。" -INVALID_BRANCH_2: "要继续,请将项目分支设置为 \"开发\"。" +INVALID_ACTION: "这不是一个有效的操作。" +INVALID_BRANCH_1: "插件版本无效(尚未设置分支)。" +INVALID_BRANCH_2: "请将项目分支设置为 \"development\" 以继续。" INVALID_BRANCH_3: "运行开发版本的插件可能会导致数据损坏。" -INVALID_CONTAINER: "请检查有效的容器。" +INVALID_CONTAINER: "请先检查一个有效的容器。" INVALID_DONATION_KEY: "无效的捐赠密钥。" INVALID_INCLUDE: "\"{0}\" 是无效的方块/实体名称。" INVALID_INCLUDE_COMBO: "那是无效的方块/实体组合。" INVALID_RADIUS: "请输入有效的半径。" -INVALID_SELECTION: "没有找到 {0} 的选择。" -INVALID_USERNAME: "玩家名 \"{0}\" 不存在或已离线。" +INVALID_SELECTION: "未找到 {0} 的选择。" +INVALID_USERNAME: "玩家名 \"{0}\" 无效。" INVALID_WORLD: "请指定一个有效的世界。" -LATEST_VERSION: "最新版本: {0}" -LINK_DISCORD: "Discord: {0}" -LINK_DOWNLOAD: "下载: {0}" -LINK_PATREON: "Patreon 页面: {0}" -LINK_WIKI_BLOCK: "方块名称: {0}" -LINK_WIKI_ENTITY: "实体名称: {0}" -LOGGING_ITEMS: "{0} 物品等待记录,请稍等..." -LOGGING_TIME_LIMIT: "已达到数据记录时间限制。正在丢弃剩余的数据并关闭。" -LOOKUP_BLOCK: "{0} {放置|破坏} {1}。" -LOOKUP_CONTAINER: "{0} {放入|取出} {1} {2}。" +LATEST_VERSION: "最新版本:{0}" +LINK_DISCORD: "Discord:{0}" +LINK_DOWNLOAD: "下载:{0}" +LINK_PATREON: "Patreon:{0}" +LINK_WIKI_BLOCK: "方块名称:{0}" +LINK_WIKI_ENTITY: "实体名称:{0}" +LOGGING_ITEMS: "{0}个物品等待记录,请稍候..." +LOGGING_TIME_LIMIT: "已达到日志时间限制,正在丢弃剩余的数据并关闭。" +LOOKUP_BLOCK: "{0} {放置|破坏}了 {1}。" +LOOKUP_CONTAINER: "{0} {放入|取出}了 {1} {2}。" LOOKUP_HEADER: "{0} 查询结果" -LOOKUP_INTERACTION: "{0} {点击|击杀} {1}." -LOOKUP_ITEM: "{0} {拾起|丢弃} {1} {2}." -LOOKUP_LOGIN: "{0} {登入|离开}." +LOOKUP_INTERACTION: "{0} {点击|击杀}了 {1}。" +LOOKUP_ITEM: "{0} {拾起|丢弃}了 {1} {2}。" +LOOKUP_LOGIN: "{0} 已{登录|离开}。" LOOKUP_PAGE: "第 {0} 页" -LOOKUP_PROJECTILE: "{0} {扔出|发射} {1} {2}." -LOOKUP_ROWS_FOUND: "已找到 {0}{行|行}。" -LOOKUP_SEARCHING: "正在搜索,请稍等..." -LOOKUP_STORAGE: "{0} {放入|取出} {1} {2}." -LOOKUP_TIME: "{0} 前" -LOOKUP_USERNAME: "{0} 已登入为 {1}." -MAXIMUM_RADIUS: "最大{查找|回滚|恢复}半径是 {0}." +LOOKUP_PROJECTILE: "{0} {扔出|发射}了 {1} {2}。" +LOOKUP_ROWS_FOUND: "{0} {行|行}已找到。" +LOOKUP_SEARCHING: "正在搜索,请稍候..." +LOOKUP_STORAGE: "{0} {放入|取出}了 {1} {2}。" +LOOKUP_TIME: "{0}前" +LOOKUP_USERNAME: "{0} 已登录为 {1}。" +MAXIMUM_RADIUS: "最大{查找|回滚|恢复}半径是 {0}。" MISSING_ACTION_USER: "要使用该标识符,请指定玩家名。" -MISSING_LOOKUP_TIME: "请指定{查找|回滚|恢复}时间." -MISSING_LOOKUP_USER: "请指定查找玩家或查找{方块|半径}." +MISSING_LOOKUP_TIME: "请指定要{查找|回滚|恢复}的时间。" +MISSING_LOOKUP_USER: "请指定要查找的玩家或{方块|半径}。" MISSING_PARAMETERS: "请使用 \"{0}\"。" -MISSING_ROLLBACK_RADIUS: "你没有指定{回滚|恢复}半径。" -MISSING_ROLLBACK_USER: "你没有指定{回滚|恢复}的玩家操作。" +MISSING_ROLLBACK_RADIUS: "你没有指定{回滚|恢复}的半径。" +MISSING_ROLLBACK_USER: "你没有指定{回滚|恢复}的玩家。" MYSQL_UNAVAILABLE: "无法连接到 MySQL 服务器。" -NO_DATA: "没有在 {0} 中找到数据" -NO_DATA_LOCATION: "此位置找不到任何{数据|存取|交互|消息}的记录。" +NETWORK_CONNECTION: "{0} 连接{成功|失败},正在使用 {1} {2}。" +NETWORK_TEST: "网络测试数据已成功发送。" +NO_DATA: "没有在 {0} 中找到数据。" +NO_DATA_LOCATION: "此位置找不到任何{数据|存取|交互|消息}记录。" NO_PERMISSION: "你没有权限执行此操作。" NO_RESULTS: "未找到结果。" NO_RESULTS_PAGE: "没有在指定页面找到{结果|数据}。" -NO_ROLLBACK: "没有找到{等待的|上一个}回滚/恢复。" +NO_ROLLBACK: "未找到{待处理的|上一个}回滚/恢复。" PATCH_INTERRUPTED: "升级已中断,将在服务器重新启动时重试。" PATCH_OUTDATED_1: "无法升级早于 {0} 的数据库。" PATCH_OUTDATED_2: "请升级到受支持的 CoreProtect 版本。" -PATCH_PROCESSING: "正在处理新数据,请稍等..." -PATCH_SKIP_UPDATE: "在 {0} 跳过{表|索引}的{更新|创建|删除}。" -PATCH_STARTED: "正在准备更新到版本 {0},请稍等..." -PATCH_SUCCESS: "成功升级到版本 {0}。" -PATCH_UPGRADING: "正在进行数据库升级,请稍等..." -PLEASE_SELECT: "请选择: \"{0}\"或\"{1}\"。" +PATCH_PROCESSING: "正在处理新数据,请稍候..." +PATCH_SKIP_UPDATE: "正在跳过 {0} 的{表格|索引}{更新|创建|删除}操作。" +PATCH_STARTED: "正在进行 {0} 升级,请稍候..." +PATCH_SUCCESS: "成功升级到 {0}。" +PATCH_UPGRADING: "正在进行数据库升级,请稍候..." +PLEASE_SELECT: "请选择:\"{0}\" 或 \"{1}\"。" PREVIEW_CANCELLED: "预览已取消。" PREVIEW_CANCELLING: "正在取消预览..." PREVIEW_IN_GAME: "你只能在游戏中预览回滚操作。" PREVIEW_TRANSACTION: "你不能预览{容器|背包}物品交换。" +PRIMARY_THREAD_ERROR: "该 API 方法不能在主线程上使用。" PURGE_ABORTED: "清除失败,数据库可能已损坏。" PURGE_ERROR: "无法处理 {0} 数据!" -PURGE_FAILED: "数据清除失败,请稍后再试。" +PURGE_FAILED: "清除失败,请稍后再试。" PURGE_IN_PROGRESS: "正在清除数据,请稍后再试。" -PURGE_MINIMUM_TIME: "你只能清除早于 {0} {天|小时}的数据." +PURGE_MINIMUM_TIME: "你只能清除{0}{天|小时}之前的数据。" PURGE_NOTICE_1: "请注意,这可能需要一些时间。" -PURGE_NOTICE_2: "完成前不要重新启动服务器。" -PURGE_OPTIMIZING: "正在优化数据库,请稍等..." -PURGE_PROCESSING: "正在处理表 {0} 中的数据..." -PURGE_REPAIRING: "正在尝试修复,这可能需要一定的时间..." -PURGE_ROWS: "已删除 {0} {行|行}数据。" -PURGE_STARTED: "数据清除开始于\"{0}\"。" -PURGE_SUCCESS: "数据清除成功。" +PURGE_NOTICE_2: "完成前请勿重新启动服务器。" +PURGE_OPTIMIZING: "正在优化数据库,请稍候..." +PURGE_PROCESSING: "正在处理 {0} 的数据..." +PURGE_REPAIRING: "正在尝试修复。这可能需要一些时间..." +PURGE_ROWS: "{0}{行|行}数据已删除。" +PURGE_STARTED: "数据清除开始于 \"{0}\"。" +PURGE_SUCCESS: "数据已清除。" +RAM_STATS: "{0}GB / {1}GB 内存" RELOAD_STARTED: "正在重新加载配置文件 - 请稍候。" -RELOAD_SUCCESS: "配置文件已重新加载成功。" +RELOAD_SUCCESS: "配置文件已重新加载。" ROLLBACK_ABORTED: "回滚或恢复已中止。" -ROLLBACK_CHUNKS_FOUND: "找到 {0} 个{区块|区块}需要更改。" -ROLLBACK_CHUNKS_MODIFIED: "已修改 {0}/{1} 个{区块|区块}." -ROLLBACK_COMPLETED: "{回滚|恢复|预览}已对以下对象完成: {0}。" -ROLLBACK_EXCLUDED_USERS: "已排除{玩家|玩家}: \"{0}\"。" -ROLLBACK_INCLUDE: "{包括|不包括}{方块|实体|目标}{类型|类型}: \"{0}\"。" +ROLLBACK_CHUNKS_FOUND: "找到{0}个待修改的{区块|区块}。" +ROLLBACK_CHUNKS_MODIFIED: "{0}/{1}个{区块|区块}已修改。" +ROLLBACK_COMPLETED: "{0} 的{回滚|恢复|预览}操作已完成。" +ROLLBACK_EXCLUDED_USERS: "已排除{玩家|玩家}:\"{0}\"。" +ROLLBACK_INCLUDE: "{包括|不包括}的{方块|实体|目标}{类型|类型}:\"{0}\"。" ROLLBACK_IN_PROGRESS: "一个回滚/恢复操作已在进行。" -ROLLBACK_LENGTH: "花费时间: {0}{秒|秒}." -ROLLBACK_MODIFIED: "{已修改|正在修改}{0}." -ROLLBACK_RADIUS: "半径: {0}个{方块|方块}." -ROLLBACK_SELECTION: "半径设置为\"{0}\"。" -ROLLBACK_STARTED: "{回滚|恢复|预览}于 \"{0}\" 开始。" -ROLLBACK_TIME: "时间范围: {0}." -ROLLBACK_WORLD_ACTION: "限制{世界|动作}为 \"{0}\"。" -SIGN_HEADER: "木牌消息" -STATUS_CONSUMER: "数据处理器: {0}个{数据|数据}待处理。" -STATUS_DATABASE: "数据库: 正在使用 {0}." -STATUS_INTEGRATION: "{0}: 合并{启用|禁用}." -STATUS_LICENSE: "协议: {0}" -STATUS_VERSION: "版本: {0}" -TELEPORTED: "传送到 {0}." -TELEPORTED_SAFETY: "将你传送到安全地点。" +ROLLBACK_LENGTH: "花费时间:{0}{秒|秒}。" +ROLLBACK_MODIFIED: "{已修改|正在修改} {0}。" +ROLLBACK_RADIUS: "半径:{0}个{方块|方块}。" +ROLLBACK_SELECTION: "半径设置为 {0}\"。" +ROLLBACK_STARTED: "{回滚|恢复|预览}开始于 \"{0}\"。" +ROLLBACK_TIME: "时间范围:{0}。" +ROLLBACK_WORLD_ACTION: "限制为{世界|操作} \"{0}\"。" +SIGN_HEADER: "告示牌消息" +STATUS_CONSUMER: "数据处理器:{0}个{数据|数据}待处理。" +STATUS_DATABASE: "数据库:正在使用 {0}。" +STATUS_INTEGRATION: "{0}:{启用|禁用}合并。" +STATUS_LICENSE: "协议:{0}" +STATUS_SYSTEM: "系统:{0}" +STATUS_VERSION: "版本:{0}" +TELEPORTED: "传送到 {0}。" +TELEPORTED_SAFETY: "将你传送到安全的位置。" TELEPORT_PLAYERS: "只有玩家才能使用传送命令。" TIME_DAYS: "{0}{天|天}" TIME_HOURS: "{0}{小时|小时}" TIME_MINUTES: "{0}{分钟|分钟}" +TIME_MONTHS: "{0} {月|月}" TIME_SECONDS: "{0}{秒|秒}" +TIME_UNITS: "{分钟|小时|天}" TIME_WEEKS: "{0}{周|周}" +TIME_YEARS: "{0} {年|年}" UPDATE_ERROR: "检查更新时出错。" UPDATE_HEADER: "{0} 更新" -UPDATE_NOTICE: "注意: {0} 现在可用。" +UPDATE_NOTICE: "注意:{0} 现在可用。" UPGRADE_IN_PROGRESS: "正在进行升级,请稍后再试。" -USER_NOT_FOUND: "玩家\"{0}\"未找到。" -USER_OFFLINE: "玩家\"{0}\"不在线。" +USER_NOT_FOUND: "玩家 \"{0}\" 未找到。" +USER_OFFLINE: "玩家 \"{0}\" 不在线。" USING_MYSQL: "使用 MySQL 用于数据存储。" USING_SQLITE: "使用 SQLite 用于数据存储。" VALID_DONATION_KEY: "有效的捐赠密钥。" +VERSION_INCOMPATIBLE: "{0} {1} 不受支持。" VERSION_NOTICE: "版本 {0} 现在可用。" VERSION_REQUIRED: "{0} 需要使用 {1} 或更高版本。" -WORLD_NOT_FOUND: "找不到世界 \"{0}\"。" +WORLD_NOT_FOUND: "世界 \"{0}\" 未找到。" \ No newline at end of file diff --git a/pom.xml b/pom.xml index 6d78ad4..ffaf6ec 100755 --- a/pom.xml +++ b/pom.xml @@ -306,4 +306,4 @@ test - \ No newline at end of file + diff --git a/src/main/java/net/coreprotect/database/lookup/BlockLookup.java b/src/main/java/net/coreprotect/database/lookup/BlockLookup.java index 4e6a890..475aede 100644 --- a/src/main/java/net/coreprotect/database/lookup/BlockLookup.java +++ b/src/main/java/net/coreprotect/database/lookup/BlockLookup.java @@ -1,25 +1,18 @@ package net.coreprotect.database.lookup; -import java.sql.ResultSet; -import java.sql.Statement; -import java.util.Locale; - -import org.bukkit.Material; -import org.bukkit.block.BlockState; -import org.bukkit.command.CommandSender; - import net.coreprotect.config.ConfigHandler; import net.coreprotect.database.statement.UserStatement; import net.coreprotect.language.Phrase; import net.coreprotect.language.Selector; import net.coreprotect.listener.channel.PluginChannelListener; -import net.coreprotect.utility.ChatUtils; -import net.coreprotect.utility.Color; -import net.coreprotect.utility.EntityUtils; -import net.coreprotect.utility.MaterialUtils; -import net.coreprotect.utility.StringUtils; -import net.coreprotect.utility.Util; -import net.coreprotect.utility.WorldUtils; +import net.coreprotect.utility.*; +import org.bukkit.Material; +import org.bukkit.block.BlockState; +import org.bukkit.command.CommandSender; + +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.Locale; public class BlockLookup { @@ -157,7 +150,7 @@ public class BlockLookup { // resultText = Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Color.WHITE + "No block data found at " + Color.ITALIC + "x" + x + "/y" + y + "/z" + z + "."; resultText = Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.NO_DATA_LOCATION, Selector.FIRST); if (!blockName.equals("air") && !blockName.equals("cave_air")) { - resultText = Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.NO_DATA, Color.ITALIC + block.getType().name().toLowerCase(Locale.ROOT)) + "\n"; + resultText = Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.NO_DATA, Color.ITALIC + block.getType().name().toLowerCase(Locale.ROOT) + Color.WHITE) + "\n"; } } } diff --git a/src/main/java/net/coreprotect/language/Language.java b/src/main/java/net/coreprotect/language/Language.java index e1ce6a0..32ffac5 100644 --- a/src/main/java/net/coreprotect/language/Language.java +++ b/src/main/java/net/coreprotect/language/Language.java @@ -223,6 +223,7 @@ public class Language { phrases.put(Phrase.TIME_MINUTES, "{0} {minute|minutes}"); phrases.put(Phrase.TIME_MONTHS, "{0} {month|months}"); phrases.put(Phrase.TIME_SECONDS, "{0} {second|seconds}"); + phrases.put(Phrase.TIME_UNITS, "{/m|/h|/d}"); phrases.put(Phrase.TIME_WEEKS, "{0} {week|weeks}"); phrases.put(Phrase.TIME_YEARS, "{0} {year|years}"); phrases.put(Phrase.UPDATE_ERROR, "An error occurred while checking for updates."); diff --git a/src/main/java/net/coreprotect/language/Phrase.java b/src/main/java/net/coreprotect/language/Phrase.java index 64d20f0..51da5f6 100644 --- a/src/main/java/net/coreprotect/language/Phrase.java +++ b/src/main/java/net/coreprotect/language/Phrase.java @@ -1,15 +1,15 @@ package net.coreprotect.language; +import net.coreprotect.utility.ChatMessage; +import net.coreprotect.utility.Color; +import net.coreprotect.utility.StringUtils; + import java.util.Arrays; import java.util.HashSet; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; -import net.coreprotect.utility.ChatMessage; -import net.coreprotect.utility.Color; -import net.coreprotect.utility.StringUtils; - public enum Phrase { ACTION_NOT_SUPPORTED, @@ -206,6 +206,7 @@ public enum Phrase { TIME_MINUTES, TIME_MONTHS, TIME_SECONDS, + TIME_UNITS, TIME_WEEKS, TIME_YEARS, UPDATE_ERROR, diff --git a/src/main/java/net/coreprotect/utility/ChatUtils.java b/src/main/java/net/coreprotect/utility/ChatUtils.java index 676cebc..8dbd9f6 100644 --- a/src/main/java/net/coreprotect/utility/ChatUtils.java +++ b/src/main/java/net/coreprotect/utility/ChatUtils.java @@ -1,15 +1,15 @@ package net.coreprotect.utility; +import net.coreprotect.language.Phrase; +import net.coreprotect.language.Selector; +import org.bukkit.command.ConsoleCommandSender; + import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; -import org.bukkit.command.ConsoleCommandSender; - -import net.coreprotect.language.Phrase; - public class ChatUtils { private ChatUtils() { @@ -137,24 +137,26 @@ public class ChatUtils { timeSince = 0.00; } + DecimalFormat decimalFormat = new DecimalFormat("0.00"); + // minutes timeSince = timeSince / 60; if (timeSince < 60.0) { - message.append(Phrase.build(Phrase.LOOKUP_TIME, new DecimalFormat("0.00").format(timeSince) + "/m")); + message.append(Phrase.build(Phrase.LOOKUP_TIME, decimalFormat.format(timeSince) + Phrase.build(Phrase.TIME_UNITS, Selector.FIRST))); } // hours if (message.length() == 0) { timeSince = timeSince / 60; if (timeSince < 24.0) { - message.append(Phrase.build(Phrase.LOOKUP_TIME, new DecimalFormat("0.00").format(timeSince) + "/h")); + message.append(Phrase.build(Phrase.LOOKUP_TIME, decimalFormat.format(timeSince) + Phrase.build(Phrase.TIME_UNITS, Selector.SECOND))); } } // days if (message.length() == 0) { timeSince = timeSince / 24; - message.append(Phrase.build(Phrase.LOOKUP_TIME, new DecimalFormat("0.00").format(timeSince) + "/d")); + message.append(Phrase.build(Phrase.LOOKUP_TIME, decimalFormat.format(timeSince) + Phrase.build(Phrase.TIME_UNITS, Selector.THIRD))); } if (component) {