TranslateMenuTitles.php 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. <?php
  2. namespace App\Console\Commands;
  3. use App\Module\System\Models\AdminMenu;
  4. use Illuminate\Console\Command;
  5. use Illuminate\Support\Str;
  6. class TranslateMenuTitles extends Command
  7. {
  8. /**
  9. * The name and signature of the console command.
  10. *
  11. * @var string
  12. */
  13. protected $signature = 'admin:translate-menu-titles {--fix : 是否修复菜单标题}';
  14. /**
  15. * The console command description.
  16. *
  17. * @var string
  18. */
  19. protected $description = '将菜单标题翻译为中文';
  20. /**
  21. * 英文标题到中文标题的映射
  22. *
  23. * @var array
  24. */
  25. protected $titleMap = [
  26. // 系统菜单
  27. '👑 Admin' => '👑 管理员',
  28. '🔰 Roles' => '🔰 角色管理',
  29. '🔒 Permission' => '🔒 权限管理',
  30. '📜 Menu' => '📜 菜单管理',
  31. '🧩 Extensions' => '🧩 扩展管理',
  32. '🔀 router' => '🔀 路由管理',
  33. '🔑 OAuth' => '🔑 OAuth认证',
  34. 'Tool' => '🛠️ 工具',
  35. 'Action Log' => '📝 操作日志',
  36. 'Notice Templete' => '📢 通知模板',
  37. // Activity模块
  38. 'Activity Condition' => '🔍 活动条件',
  39. 'Activity' => '🎯 活动',
  40. 'Activity Participation' => '👥 活动参与',
  41. 'User Activity Data' => '📊 用户活动数据',
  42. // Fund模块
  43. 'Fund Admin' => '💼 资金管理员',
  44. 'Fund Circulation' => '🔄 资金流通',
  45. 'Fund2' => '💰 资金2',
  46. // Farm模块
  47. 'Farm Crop' => '🌾 作物管理',
  48. 'Farm God Buff' => '🔮 神灵加持管理',
  49. 'Farm Harvest Log' => '📝 收获记录管理',
  50. 'Farm House Config' => '🏠 房屋等级配置',
  51. 'Farm Land' => '🌱 土地管理',
  52. 'Farm Land Type' => '🏞️ 土地类型配置',
  53. 'Farm Land Upgrade Config' => '⬆️ 土地升级配置',
  54. 'Farm Seed' => '🌱 种子配置管理',
  55. 'Farm Seed Output' => '🌽 种子产出配置',
  56. 'Farm Team Profit' => '💰 团队收益记录',
  57. 'Farm Upgrade Log' => '📈 升级记录管理',
  58. 'Farm User' => '👨‍🌾 用户农场管理',
  59. // Pet模块
  60. 'Pet Battle Log' => '⚔️ 宠物战斗记录',
  61. 'Pet Battle Season' => '🏆 争霸赛-赛季',
  62. 'Pet Battle Team' => '👥 争霸赛-队伍',
  63. 'Pet Battle Team Member' => '👤 争霸赛-队伍成员',
  64. 'Pet Config' => '🐾 宠物配置',
  65. 'Pet Level Config' => '📊 宠物-等级配置',
  66. 'Pet Remould Log' => '🔄 宠物洗髓记录',
  67. 'Pet Skill' => '✨ 宠物-技能配置',
  68. 'Pet Skill Log' => '📝 宠物-技能使用日志',
  69. 'Pet User' => '🐶 宠物管理',
  70. // Task模块
  71. 'Task Achievement Condition' => '✅ 任务达成条件',
  72. 'Task Category' => '📂 任务分类',
  73. 'Task Completion Log' => '📝 任务完成日志',
  74. 'Task Condition' => '🔍 任务条件',
  75. 'Task' => '📋 任务',
  76. 'Task Cost' => '💰 任务消耗',
  77. 'Task Cost Log' => '📝 任务消耗日志',
  78. 'Task Reset Log' => '🔄 任务重置日志',
  79. 'Task Reward' => '🏆 任务奖励',
  80. 'Task Reward Log' => '📝 任务奖励日志',
  81. 'Task User Progress' => '📊 用户进度',
  82. 'Task User Task' => '📋 用户任务',
  83. // Team模块
  84. 'Team Invite Reward' => '🎁 邀请奖励记录',
  85. 'Team Profit' => '💰 团队收益记录',
  86. 'Team Profit Rule' => '💰 收益规则配置',
  87. 'Team Referral Change' => '🔄 推荐关系变更记录',
  88. 'Team Referral Code' => '🔗 推荐码管理',
  89. 'Team Referral Code Usage' => '📊 推荐码使用记录',
  90. 'Team Talent Config' => '🌟 达人等级配置',
  91. 'Team User Referral' => '👥 用户推荐关系',
  92. 'Team User Relation Cache' => '🔄 用户关系缓存',
  93. 'Team User Talent' => '🌟 达人等级管理',
  94. // GameItems模块
  95. 'Category' => '📁 物品分类',
  96. 'Chest Content' => '📦 宝箱内容',
  97. 'Chest Open Log' => '📝 宝箱开启记录',
  98. 'Craft Log' => '📝 物品合成记录',
  99. 'Dismantle Log' => '📝 物品分解记录',
  100. 'Dismantle Rule' => '⚙️ 物品分解规则',
  101. 'Group' => '📚 物品组管理',
  102. 'Group Item' => '📋 物品组内容',
  103. 'Instance' => '🔍 单独属性物品管理',
  104. 'Item Chest Open Cost' => '💰 宝箱消耗配置',
  105. 'Item' => '🎁 物品设置',
  106. 'Output Limit' => '⛔ 物品产出限制',
  107. 'Pity Time' => '🔄 用户宝箱保底计数',
  108. 'Recipe' => '📜 合成配方管理',
  109. 'Transaction Log' => '📝 物品记录',
  110. 'User Item' => '👤 用户物品',
  111. 'User Output Counter' => '📊 用户产出限制计数',
  112. 'User Recipe' => '👤 用户配方解锁状态',
  113. // Article模块
  114. 'Article Cate' => '📂 文章分类',
  115. 'Article' => '📝 文章',
  116. // File模块
  117. 'File' => '📁 文件',
  118. 'Image' => '🖼️ 图片',
  119. 'Storage' => '💾 存储',
  120. 'Temporary' => '⏱️ 临时文件',
  121. // Fund模块
  122. 'Fund' => '💰 资金',
  123. 'Fund Log' => '📝 资金日志',
  124. 'Fund Order' => '🧾 资金订单',
  125. 'Fund Transfer' => '💸 转账记录',
  126. // Game模块
  127. 'Game Config' => '⚙️ 游戏配置',
  128. 'Game Reward Group' => '🎁 游戏奖励组',
  129. 'Game Reward Item' => '🎁 游戏奖励项',
  130. 'Game Reward Log' => '📝 游戏奖励日志',
  131. // OAuth模块
  132. 'O Auth Client' => '🔑 OAuth客户端',
  133. // Sms模块
  134. 'My Gateway' => '📨 短信网关',
  135. 'Smscode Log' => '🔢 短信验证码',
  136. // System模块
  137. 'Admin Grid View' => '📊 管理员视图',
  138. 'Config A' => '⚙️ 配置A',
  139. 'Config Admin' => '⚙️ 管理员配置',
  140. 'Config' => '⚙️ 配置',
  141. 'System Log' => '📝 系统日志',
  142. 'View Config' => '👁️ 视图配置',
  143. // User模块
  144. 'User Action' => '🔍 用户行为',
  145. 'User' => '👤 用户',
  146. 'User Info' => '📋 用户信息',
  147. 'User Phone' => '📱 用户手机',
  148. 'User Secret Password' => '🔒 用户密码'
  149. ];
  150. /**
  151. * Execute the console command.
  152. *
  153. * @return int
  154. */
  155. public function handle()
  156. {
  157. $this->info("开始检查菜单标题...");
  158. // 获取所有菜单项
  159. $menus = AdminMenu::all();
  160. $englishMenus = [];
  161. $translatedCount = 0;
  162. foreach ($menus as $menu) {
  163. // 检查标题是否包含中文字符
  164. if (!preg_match('/[\x{4e00}-\x{9fa5}]/u', $menu->title) && !empty($menu->title)) {
  165. // 检查是否有对应的中文标题
  166. if (isset($this->titleMap[$menu->title])) {
  167. $englishMenus[] = [
  168. 'menu' => $menu,
  169. 'chinese_title' => $this->titleMap[$menu->title]
  170. ];
  171. } else {
  172. $englishMenus[] = [
  173. 'menu' => $menu,
  174. 'chinese_title' => null
  175. ];
  176. }
  177. }
  178. }
  179. if (count($englishMenus) > 0) {
  180. $this->info("\n发现 " . count($englishMenus) . " 个英文标题的菜单项:");
  181. $table = [];
  182. foreach ($englishMenus as $item) {
  183. $menu = $item['menu'];
  184. $chineseTitle = $item['chinese_title'] ?? '未提供翻译';
  185. $table[] = [
  186. 'id' => $menu->id,
  187. 'title' => $menu->title,
  188. 'chinese_title' => $chineseTitle,
  189. 'uri' => $menu->uri,
  190. 'parent_id' => $menu->parent_id
  191. ];
  192. }
  193. $this->table(['ID', '英文标题', '中文标题', 'URI', '父ID'], $table);
  194. if ($this->option('fix') || $this->confirm('是否要将这些菜单标题翻译为中文?')) {
  195. foreach ($englishMenus as $item) {
  196. $menu = $item['menu'];
  197. $chineseTitle = $item['chinese_title'];
  198. if ($chineseTitle) {
  199. $oldTitle = $menu->title;
  200. $menu->title = $chineseTitle;
  201. $menu->save();
  202. $this->info(" - 已翻译菜单标题: ID = {$menu->id}, {$oldTitle} -> {$chineseTitle}");
  203. $translatedCount++;
  204. } else {
  205. $this->warn(" - 未提供翻译: ID = {$menu->id}, 标题 = {$menu->title}");
  206. }
  207. }
  208. $this->info("\n已翻译 {$translatedCount} 个菜单标题");
  209. }
  210. } else {
  211. $this->info("\n所有菜单标题都是中文!");
  212. }
  213. return 0;
  214. }
  215. }