命名工具

4/12/2024

拿来即用,随处执行,不需要任何环境,不管是mac本还是Windows的,而且使用到的翻译api不需要注册不需要花钱

# 前言

在软件开发过程中,命名是一个极为重要且充满挑战的任务。一个好的命名不仅能够提高代码的可读性,还能减少后期维护的复杂性。然而,对于很多开发者,特别是那些需要在多种语言之间切换的开发者,命名往往是一个头疼的问题。为了解决这个痛点,我们开发了一个简单而实用的命名工具,希望能够帮助大家在开发过程中更加轻松地处理命名问题。

# 为什么用

在实际开发中,我们经常会遇到需要将中文名称转换为英文名称的情况,特别是在变量名、类名等命名时。手动翻译和格式转换不仅费时费力,而且容易出错。因此,我们希望通过一个自动化的工具来简化这个过程,提高效率。

# 为什么使用go

选择Go语言来实现这个工具,主要有以下几个原因:

  1. 简单高效:Go语言的语法简单,学习曲线平缓,适合快速开发。
  2. 并发支持:Go语言内置对并发的支持,可以方便地处理并发任务。
  3. 跨平台:Go语言编译出来的可执行文件可以在多个平台上运行,这使得我们的工具可以在不同的操作系统上使用。
  4. 性能优越:Go语言编译出的二进制文件执行效率高,适合需要高性能的工具开发。

# 解决了什么痛点

  1. 命名困难:许多开发者在命名时会感到困惑,尤其是需要从中文翻译成英文并符合命名规范时。这个工具自动化了这一过程,大大降低了命名的难度。
  2. 时间浪费:手动翻译和格式转换不仅耗费大量时间,而且容易出错。我们的工具通过调用翻译API并自动转换格式,节省了开发者的时间。
  3. 一致性问题:不同开发者在命名时可能会有不同的习惯和风格,导致代码风格不一致。使用工具可以确保命名的一致性,提升代码质量。

# 关键代码

func main() {
	reader := bufio.NewReader(os.Stdin)
	for {
		// 提示用户输入
		fmt.Println("请输入翻译前缀和中文,例如:xt 项目管理")

		// 读取用户输入
		input, err := reader.ReadString('\n')
		if err != nil {
			fmt.Println("读取输入失败:", err)
			continue
		}

		// 去掉输入末尾的换行符
		input = strings.TrimSpace(input)
		parts := strings.SplitN(input, " ", 2)
		if len(parts) != 2 {
			fmt.Println("输入格式不正确,请输入前缀和中文短语,例如:xt 项目管理")
			continue
		}

		prefix, chinese := parts[0], parts[1]

		// 调用翻译API
		translations, err := translate(chinese)
		if err != nil {
			fmt.Println("翻译失败:", err)
			continue
		}

		// 清理HTML标签
		for i := range translations {
			translations[i] = cleanHTMLTags(translations[i])
		}

		// 如果有多个翻译结果,让用户选择一个
		selectedTranslation := translations[0]
		if len(translations) > 1 {
			fmt.Println("请选择一个翻译结果:")
			for i, translation := range translations {
				fmt.Printf("%d: %s\n", i+1, translation)
			}
			var choice int
			_, err := fmt.Scanln(&choice)
			if err != nil || choice < 1 || choice > len(translations) {
				fmt.Println("选择无效,默认使用第一个翻译结果")
			} else {
				selectedTranslation = translations[choice-1]
			}
		}

		var formatted string

		// 根据前缀进行格式化
		switch prefix {
		case "xt":
			formatted = toCamelCase(selectedTranslation)
		case "cl":
			formatted = toUpperCaseSnake(selectedTranslation)
		case "dt":
			formatted = toPascalCase(selectedTranslation)
		case "sq":
			formatted = toLowerCaseSnake(selectedTranslation)

		default:
			fmt.Println("无效的前缀")
			continue
		}

		// 复制到剪贴板
		err = clipboard.WriteAll(formatted)
		if err != nil {
			fmt.Println("无法复制到剪贴板:", err)
			continue
		}

		// 提示成功
		fmt.Println("翻译成功,结果已复制到剪贴板:", formatted)
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80

# 项目演示之小驼峰命名

iShot_2024-07-16_14.11.59.mp4 [视频转webp输出图片]

# 项目演示之大驼峰命名

iShot_2024-07-16_14.17.22.mp4 [视频转 webp 输出图片]

# 项目演示之常量命名

这里图片出现点问题,和上面演示是一样的

# 获取

如有需要可以关注下方公众号回复transition获取

ezgif-7-34ee1b78c3

Last Updated: 10/30/2024, 10:57:00 AM