Skip to content

Commit a92dcf1

Browse files
authored
[skip-changelog] Added translations strings to 'board details' command (#752)
* Added translations strings to 'board details' command * Removed ambigous "Identification properties" from board details It's the last piece of the fqbn (like the "uno" in "arduino:avr:uno"). We use it internally but there is no point in showing it in the board details command since there is already the FQBN. * Fixed plural 'Required tools' -> 'Required tool'
1 parent 1f42d58 commit a92dcf1

File tree

4 files changed

+144
-36
lines changed

4 files changed

+144
-36
lines changed

Diff for: cli/board/details.go

+30-29
Original file line numberDiff line numberDiff line change
@@ -24,33 +24,35 @@ import (
2424
"github.com/arduino/arduino-cli/cli/feedback"
2525
"github.com/arduino/arduino-cli/cli/instance"
2626
"github.com/arduino/arduino-cli/commands/board"
27+
"github.com/arduino/arduino-cli/i18n"
2728
rpc "github.com/arduino/arduino-cli/rpc/commands"
2829
"github.com/arduino/arduino-cli/table"
2930
"github.com/fatih/color"
3031
"github.com/spf13/cobra"
3132
)
3233

34+
var tr = i18n.Tr
3335
var showFullDetails bool
3436

3537
func initDetailsCommand() *cobra.Command {
3638
var detailsCommand = &cobra.Command{
3739
Use: "details <FQBN>",
38-
Short: "Print details about a board.",
39-
Long: "Show information about a board, in particular if the board has options to be specified in the FQBN.",
40+
Short: tr("Print details about a board."),
41+
Long: tr("Show information about a board, in particular if the board has options to be specified in the FQBN."),
4042
Example: " " + os.Args[0] + " board details arduino:avr:nano",
4143
Args: cobra.ExactArgs(1),
4244
Run: runDetailsCommand,
4345
}
4446

45-
detailsCommand.Flags().BoolVarP(&showFullDetails, "full", "f", false, "Include full details in text output")
47+
detailsCommand.Flags().BoolVarP(&showFullDetails, "full", "f", false, tr("Show full board details"))
4648

4749
return detailsCommand
4850
}
4951

5052
func runDetailsCommand(cmd *cobra.Command, args []string) {
5153
inst, err := instance.CreateInstance()
5254
if err != nil {
53-
feedback.Errorf("Error getting board details: %v", err)
55+
feedback.Errorf(tr("Error getting board details: %v"), err)
5456
os.Exit(errorcodes.ErrGeneric)
5557
}
5658

@@ -60,7 +62,7 @@ func runDetailsCommand(cmd *cobra.Command, args []string) {
6062
})
6163

6264
if err != nil {
63-
feedback.Errorf("Error getting board details: %v", err)
65+
feedback.Errorf(tr("Error getting board details: %v"), err)
6466
os.Exit(errorcodes.ErrGeneric)
6567
}
6668

@@ -93,51 +95,50 @@ func (dr detailsResult) String() string {
9395
// ATmega168 cpu=atmega168
9496
t := table.New()
9597
t.SetColumnWidthMode(1, table.Average)
96-
t.AddRow("Board name:", details.Name)
97-
t.AddRow("Board fqbn:", details.Fqbn)
98-
t.AddRow("Board propertiesId:", details.PropertiesId)
99-
t.AddRow("Board version:", details.Version)
98+
t.AddRow(tr("Board name:"), details.Name)
99+
t.AddRow("FQBN:", details.Fqbn)
100+
t.AddRow(tr("Board version:"), details.Version)
100101

101102
if details.Official {
102103
t.AddRow() // get some space from above
103-
t.AddRow("Official Arduino board:",
104+
t.AddRow(tr("Official Arduino board:"),
104105
table.NewCell("✔", color.New(color.FgGreen)))
105106
}
106107

107108
for i, idp := range details.IdentificationPref {
108109
if i == 0 {
109110
t.AddRow() // get some space from above
110-
t.AddRow("Identification Preferences:", "VID:"+idp.UsbID.VID+" PID:"+idp.UsbID.PID)
111+
t.AddRow(tr("Identification properties:"), "VID:"+idp.UsbID.VID+" PID:"+idp.UsbID.PID)
111112
continue
112113
}
113114
t.AddRow("", "VID:"+idp.UsbID.VID+" PID:"+idp.UsbID.PID)
114115
}
115116

116117
t.AddRow() // get some space from above
117-
t.AddRow("Package name:", details.Package.Name)
118-
t.AddRow("Package maintainer:", details.Package.Maintainer)
119-
t.AddRow("Package URL:", details.Package.Url)
120-
t.AddRow("Package websiteURL:", details.Package.WebsiteURL)
121-
t.AddRow("Package online help:", details.Package.Help.Online)
118+
t.AddRow(tr("Package name:"), details.Package.Name)
119+
t.AddRow(tr("Package maintainer:"), details.Package.Maintainer)
120+
t.AddRow(tr("Package URL:"), details.Package.Url)
121+
t.AddRow(tr("Package website:"), details.Package.WebsiteURL)
122+
t.AddRow(tr("Package online help:"), details.Package.Help.Online)
122123

123124
t.AddRow() // get some space from above
124-
t.AddRow("Platform name:", details.Platform.Name)
125-
t.AddRow("Platform category:", details.Platform.Category)
126-
t.AddRow("Platform architecture:", details.Platform.Architecture)
127-
t.AddRow("Platform URL:", details.Platform.Url)
128-
t.AddRow("Platform file name:", details.Platform.ArchiveFileName)
129-
t.AddRow("Platform size (bytes):", fmt.Sprint(details.Platform.Size))
130-
t.AddRow("Platform checksum:", details.Platform.Checksum)
125+
t.AddRow(tr("Platform name:"), details.Platform.Name)
126+
t.AddRow(tr("Platform category:"), details.Platform.Category)
127+
t.AddRow(tr("Platform architecture:"), details.Platform.Architecture)
128+
t.AddRow(tr("Platform URL:"), details.Platform.Url)
129+
t.AddRow(tr("Platform file name:"), details.Platform.ArchiveFileName)
130+
t.AddRow(tr("Platform size (bytes):"), fmt.Sprint(details.Platform.Size))
131+
t.AddRow(tr("Platform checksum:"), details.Platform.Checksum)
131132

132133
t.AddRow() // get some space from above
133134
for _, tool := range details.ToolsDependencies {
134-
t.AddRow("Required tools:", tool.Packager+":"+tool.Name, "", tool.Version)
135+
t.AddRow(tr("Required tool:"), tool.Packager+":"+tool.Name, "", tool.Version)
135136
if showFullDetails {
136137
for _, sys := range tool.Systems {
137-
t.AddRow("", "OS:", "", sys.Host)
138-
t.AddRow("", "File:", "", sys.ArchiveFileName)
139-
t.AddRow("", "Size (bytes):", "", fmt.Sprint(sys.Size))
140-
t.AddRow("", "Checksum:", "", sys.Checksum)
138+
t.AddRow("", tr("OS:"), "", sys.Host)
139+
t.AddRow("", tr("File:"), "", sys.ArchiveFileName)
140+
t.AddRow("", tr("Size (bytes):"), "", fmt.Sprint(sys.Size))
141+
t.AddRow("", tr("Checksum:"), "", sys.Checksum)
141142
t.AddRow("", "URL:", "", sys.Url)
142143
t.AddRow() // get some space from above
143144
}
@@ -146,7 +147,7 @@ func (dr detailsResult) String() string {
146147
}
147148

148149
for _, option := range details.ConfigOptions {
149-
t.AddRow("Option:", option.OptionLabel, "", option.Option)
150+
t.AddRow(tr("Option:"), option.OptionLabel, "", option.Option)
150151
for _, value := range option.Values {
151152
green := color.New(color.FgGreen)
152153
if value.Selected {

Diff for: go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
235235
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
236236
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
237237
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
238+
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3 h1:XQyxROzUlZH+WIQwySDgnISgOivlhjIEwaQaJEJrrN0=
238239
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
239240
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
240241
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -272,6 +273,7 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
272273
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
273274
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
274275
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
276+
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135 h1:5Beo0mZN8dRzgrMMkDp0jc8YXQKx9DiJ2k1dkvGsn5A=
275277
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
276278
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
277279
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=

Diff for: i18n/data/en.po

+105
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,31 @@ msgstr "Aliases:"
1313
msgid "Available Commands:"
1414
msgstr "Available Commands:"
1515

16+
#: cli/board/details.go:98
17+
msgid "Board name:"
18+
msgstr "Board name:"
19+
20+
#: cli/board/details.go:100
21+
msgid "Board version:"
22+
msgstr "Board version:"
23+
24+
#: cli/board/details.go:141
25+
msgid "Checksum:"
26+
msgstr "Checksum:"
27+
28+
#: cli/board/details.go:55
29+
#: cli/board/details.go:65
30+
msgid "Error getting board details: %v"
31+
msgstr "Error getting board details: %v"
32+
1633
#: cli/usage.go:27
1734
msgid "Examples:"
1835
msgstr "Examples:"
1936

37+
#: cli/board/details.go:139
38+
msgid "File:"
39+
msgstr "File:"
40+
2041
#: cli/usage.go:29
2142
msgid "Flags:"
2243
msgstr "Flags:"
@@ -25,6 +46,90 @@ msgstr "Flags:"
2546
msgid "Global Flags:"
2647
msgstr "Global Flags:"
2748

49+
#: cli/board/details.go:111
50+
msgid "Identification properties:"
51+
msgstr "Identification properties:"
52+
53+
#: cli/board/details.go:138
54+
msgid "OS:"
55+
msgstr "OS:"
56+
57+
#: cli/board/details.go:104
58+
msgid "Official Arduino board:"
59+
msgstr "Official Arduino board:"
60+
61+
#: cli/board/details.go:150
62+
msgid "Option:"
63+
msgstr "Option:"
64+
65+
#: cli/board/details.go:120
66+
msgid "Package URL:"
67+
msgstr "Package URL:"
68+
69+
#: cli/board/details.go:119
70+
msgid "Package maintainer:"
71+
msgstr "Package maintainer:"
72+
73+
#: cli/board/details.go:118
74+
msgid "Package name:"
75+
msgstr "Package name:"
76+
77+
#: cli/board/details.go:122
78+
msgid "Package online help:"
79+
msgstr "Package online help:"
80+
81+
#: cli/board/details.go:121
82+
msgid "Package website:"
83+
msgstr "Package website:"
84+
85+
#: cli/board/details.go:128
86+
msgid "Platform URL:"
87+
msgstr "Platform URL:"
88+
89+
#: cli/board/details.go:127
90+
msgid "Platform architecture:"
91+
msgstr "Platform architecture:"
92+
93+
#: cli/board/details.go:126
94+
msgid "Platform category:"
95+
msgstr "Platform category:"
96+
97+
#: cli/board/details.go:131
98+
msgid "Platform checksum:"
99+
msgstr "Platform checksum:"
100+
101+
#: cli/board/details.go:129
102+
msgid "Platform file name:"
103+
msgstr "Platform file name:"
104+
105+
#: cli/board/details.go:125
106+
msgid "Platform name:"
107+
msgstr "Platform name:"
108+
109+
#: cli/board/details.go:130
110+
msgid "Platform size (bytes):"
111+
msgstr "Platform size (bytes):"
112+
113+
#: cli/board/details.go:40
114+
msgid "Print details about a board."
115+
msgstr "Print details about a board."
116+
117+
#: cli/board/details.go:135
118+
msgid "Required tool:"
119+
msgstr "Required tool:"
120+
121+
#: cli/board/details.go:47
122+
msgid "Show full board details"
123+
msgstr "Show full board details"
124+
125+
#: cli/board/details.go:41
126+
msgid "Show information about a board, in particular if the board has options to be specified in the FQBN."
127+
msgstr "Show information about a board, in particular if the board has options to be specified in the FQBN."
128+
129+
#: cli/board/details.go:140
130+
msgid "Size (bytes):"
131+
msgstr "Size (bytes):"
132+
28133
#: cli/usage.go:25
29134
msgid "Usage:"
30135
msgstr "Usage:"

Diff for: i18n/rice-box.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -11,33 +11,33 @@ func init() {
1111
// define files
1212
file2 := &embedded.EmbeddedFile{
1313
Filename: ".gitkeep",
14-
FileModTime: time.Unix(1591581706, 0),
14+
FileModTime: time.Unix(1591978108, 0),
1515

1616
Content: string(""),
1717
}
1818
file3 := &embedded.EmbeddedFile{
1919
Filename: "en.po",
20-
FileModTime: time.Unix(1591581706, 0),
20+
FileModTime: time.Unix(1592476091, 0),
2121

22-
Content: string("msgid \"\"\nmsgstr \"\"\n\n#: cli/usage.go:31\nmsgid \"Additional help topics:\"\nmsgstr \"Additional help topics:\"\n\n#: cli/usage.go:26\nmsgid \"Aliases:\"\nmsgstr \"Aliases:\"\n\n#: cli/usage.go:28\nmsgid \"Available Commands:\"\nmsgstr \"Available Commands:\"\n\n#: cli/usage.go:27\nmsgid \"Examples:\"\nmsgstr \"Examples:\"\n\n#: cli/usage.go:29\nmsgid \"Flags:\"\nmsgstr \"Flags:\"\n\n#: cli/usage.go:30\nmsgid \"Global Flags:\"\nmsgstr \"Global Flags:\"\n\n#: cli/usage.go:25\nmsgid \"Usage:\"\nmsgstr \"Usage:\"\n\n#: cli/usage.go:32\nmsgid \"Use %s for more information about a command.\"\nmsgstr \"Use %s for more information about a command.\"\n\n"),
22+
Content: string("msgid \"\"\nmsgstr \"\"\n\n#: cli/usage.go:31\nmsgid \"Additional help topics:\"\nmsgstr \"Additional help topics:\"\n\n#: cli/usage.go:26\nmsgid \"Aliases:\"\nmsgstr \"Aliases:\"\n\n#: cli/usage.go:28\nmsgid \"Available Commands:\"\nmsgstr \"Available Commands:\"\n\n#: cli/board/details.go:98\nmsgid \"Board name:\"\nmsgstr \"Board name:\"\n\n#: cli/board/details.go:100\nmsgid \"Board version:\"\nmsgstr \"Board version:\"\n\n#: cli/board/details.go:141\nmsgid \"Checksum:\"\nmsgstr \"Checksum:\"\n\n#: cli/board/details.go:55\n#: cli/board/details.go:65\nmsgid \"Error getting board details: %v\"\nmsgstr \"Error getting board details: %v\"\n\n#: cli/usage.go:27\nmsgid \"Examples:\"\nmsgstr \"Examples:\"\n\n#: cli/board/details.go:139\nmsgid \"File:\"\nmsgstr \"File:\"\n\n#: cli/usage.go:29\nmsgid \"Flags:\"\nmsgstr \"Flags:\"\n\n#: cli/usage.go:30\nmsgid \"Global Flags:\"\nmsgstr \"Global Flags:\"\n\n#: cli/board/details.go:111\nmsgid \"Identification properties:\"\nmsgstr \"Identification properties:\"\n\n#: cli/board/details.go:138\nmsgid \"OS:\"\nmsgstr \"OS:\"\n\n#: cli/board/details.go:104\nmsgid \"Official Arduino board:\"\nmsgstr \"Official Arduino board:\"\n\n#: cli/board/details.go:150\nmsgid \"Option:\"\nmsgstr \"Option:\"\n\n#: cli/board/details.go:120\nmsgid \"Package URL:\"\nmsgstr \"Package URL:\"\n\n#: cli/board/details.go:119\nmsgid \"Package maintainer:\"\nmsgstr \"Package maintainer:\"\n\n#: cli/board/details.go:118\nmsgid \"Package name:\"\nmsgstr \"Package name:\"\n\n#: cli/board/details.go:122\nmsgid \"Package online help:\"\nmsgstr \"Package online help:\"\n\n#: cli/board/details.go:121\nmsgid \"Package website:\"\nmsgstr \"Package website:\"\n\n#: cli/board/details.go:128\nmsgid \"Platform URL:\"\nmsgstr \"Platform URL:\"\n\n#: cli/board/details.go:127\nmsgid \"Platform architecture:\"\nmsgstr \"Platform architecture:\"\n\n#: cli/board/details.go:126\nmsgid \"Platform category:\"\nmsgstr \"Platform category:\"\n\n#: cli/board/details.go:131\nmsgid \"Platform checksum:\"\nmsgstr \"Platform checksum:\"\n\n#: cli/board/details.go:129\nmsgid \"Platform file name:\"\nmsgstr \"Platform file name:\"\n\n#: cli/board/details.go:125\nmsgid \"Platform name:\"\nmsgstr \"Platform name:\"\n\n#: cli/board/details.go:130\nmsgid \"Platform size (bytes):\"\nmsgstr \"Platform size (bytes):\"\n\n#: cli/board/details.go:40\nmsgid \"Print details about a board.\"\nmsgstr \"Print details about a board.\"\n\n#: cli/board/details.go:135\nmsgid \"Required tool:\"\nmsgstr \"Required tool:\"\n\n#: cli/board/details.go:47\nmsgid \"Show full board details\"\nmsgstr \"Show full board details\"\n\n#: cli/board/details.go:41\nmsgid \"Show information about a board, in particular if the board has options to be specified in the FQBN.\"\nmsgstr \"Show information about a board, in particular if the board has options to be specified in the FQBN.\"\n\n#: cli/board/details.go:140\nmsgid \"Size (bytes):\"\nmsgstr \"Size (bytes):\"\n\n#: cli/usage.go:25\nmsgid \"Usage:\"\nmsgstr \"Usage:\"\n\n#: cli/usage.go:32\nmsgid \"Use %s for more information about a command.\"\nmsgstr \"Use %s for more information about a command.\"\n\n"),
2323
}
2424
file4 := &embedded.EmbeddedFile{
2525
Filename: "it_IT.po",
26-
FileModTime: time.Unix(1591581735, 0),
26+
FileModTime: time.Unix(1591978150, 0),
2727

2828
Content: string("# \n# Translators:\n# Cristian Maglie <[email protected]>, 2020\n# \nmsgid \"\"\nmsgstr \"\"\n\"Last-Translator: Cristian Maglie <[email protected]>, 2020\\n\"\n\"Language-Team: Italian (Italy) (https://www.transifex.com/arduino-1/teams/108174/it_IT/)\\n\"\n\"Language: it_IT\\n\"\n\"Plural-Forms: nplurals=2; plural=(n != 1);\\n\"\n\n#: cli/usage.go:31\nmsgid \"Additional help topics:\"\nmsgstr \"Informazioni aggiuntive:\"\n\n#: cli/usage.go:26\nmsgid \"Aliases:\"\nmsgstr \"Alias:\"\n\n#: cli/usage.go:28\nmsgid \"Available Commands:\"\nmsgstr \"Comandi disponibili:\"\n\n#: cli/usage.go:27\nmsgid \"Examples:\"\nmsgstr \"Esempi:\"\n\n#: cli/usage.go:29\nmsgid \"Flags:\"\nmsgstr \"\"\n\n#: cli/usage.go:30\nmsgid \"Global Flags:\"\nmsgstr \"\"\n\n#: cli/usage.go:25\nmsgid \"Usage:\"\nmsgstr \"\"\n\n#: cli/usage.go:32\nmsgid \"Use %s for more information about a command.\"\nmsgstr \"\"\n"),
2929
}
3030
file5 := &embedded.EmbeddedFile{
3131
Filename: "pt_BR.po",
32-
FileModTime: time.Unix(1591581735, 0),
32+
FileModTime: time.Unix(1591978150, 0),
3333

3434
Content: string("# \n# Translators:\n# Henrique Diniz <[email protected]>, 2020\n# \nmsgid \"\"\nmsgstr \"\"\n\"Last-Translator: Henrique Diniz <[email protected]>, 2020\\n\"\n\"Language-Team: Portuguese (Brazil) (https://www.transifex.com/arduino-1/teams/108174/pt_BR/)\\n\"\n\"Language: pt_BR\\n\"\n\"Plural-Forms: nplurals=2; plural=(n > 1);\\n\"\n\n#: cli/usage.go:31\nmsgid \"Additional help topics:\"\nmsgstr \"\"\n\n#: cli/usage.go:26\nmsgid \"Aliases:\"\nmsgstr \"\"\n\n#: cli/usage.go:28\nmsgid \"Available Commands:\"\nmsgstr \"\"\n\n#: cli/usage.go:27\nmsgid \"Examples:\"\nmsgstr \"\"\n\n#: cli/usage.go:29\nmsgid \"Flags:\"\nmsgstr \"\"\n\n#: cli/usage.go:30\nmsgid \"Global Flags:\"\nmsgstr \"\"\n\n#: cli/usage.go:25\nmsgid \"Usage:\"\nmsgstr \"\"\n\n#: cli/usage.go:32\nmsgid \"Use %s for more information about a command.\"\nmsgstr \"Use %s para mais informações sobre um comando.\"\n"),
3535
}
3636

3737
// define dirs
3838
dir1 := &embedded.EmbeddedDir{
3939
Filename: "",
40-
DirModTime: time.Unix(1591581735, 0),
40+
DirModTime: time.Unix(1592476041, 0),
4141
ChildFiles: []*embedded.EmbeddedFile{
4242
file2, // ".gitkeep"
4343
file3, // "en.po"
@@ -53,7 +53,7 @@ func init() {
5353
// register embeddedBox
5454
embedded.RegisterEmbeddedBox(`./data`, &embedded.EmbeddedBox{
5555
Name: `./data`,
56-
Time: time.Unix(1591581735, 0),
56+
Time: time.Unix(1592476041, 0),
5757
Dirs: map[string]*embedded.EmbeddedDir{
5858
"": dir1,
5959
},

0 commit comments

Comments
 (0)