Skip to content

Commit bd2df05

Browse files
authored
Add xml tag, escape input better and update indentation (#83)
1 parent b8ff555 commit bd2df05

File tree

12 files changed

+38
-23
lines changed

12 files changed

+38
-23
lines changed

internal/translations/language_file.android.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,28 @@ func (f *androidLanguageFile) Write(translations *translationData) error {
1616
}
1717

1818
func (f *androidLanguageFile) write(translation *translation, io io.Writer) error {
19-
regex := regexp.MustCompile(`%([0-9]+)`)
19+
regex := regexp.MustCompile(`%%([0-9]+)`)
2020

2121
escape := strings.NewReplacer(
2222
"&", "&",
2323
"<", "&lt;",
2424
">", "&gt;",
2525
"\"", "\\\"",
2626
"'", "\\'",
27-
"\n", "\\n")
27+
"\n", "\\n",
28+
"%", "%%")
2829

29-
_, err := io.Write([]byte("<resources>\n"))
30+
_, err := io.Write([]byte("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n"))
3031
if err != nil {
3132
return err
3233
}
3334

3435
for _, k := range translation.keys {
3536
key := strings.ToLower(k)
36-
value := regex.ReplaceAllString(translation.get(k), "%${1}$$s")
37-
_, err = io.Write([]byte(fmt.Sprintf("\t<string name=\"%s\">%s</string>\n", key, escape.Replace(value))))
37+
translationValue := translation.get(k)
38+
escapedValue := escape.Replace(translationValue)
39+
value := regex.ReplaceAllString(escapedValue, "%${1}$$s")
40+
_, err = io.Write([]byte(fmt.Sprintf(" <string name=\"%s\">%s</string>\n", key, value)))
3841
if err != nil {
3942
return err
4043
}

internal/translations/language_file_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ func TestLanguageFileWriteInputFile(t *testing.T) {
127127
}
128128

129129
func TestEscapingSingleColumn(t *testing.T) {
130-
output := "<resources>\n\t<string name=\"that\">Another string including a | even.</string>\n\t<string name=\"this\">This is a longer sentence, which includes a comma.</string>\n</resources>\n"
130+
output := "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"that\">Another string including a | even.</string>\n <string name=\"this\">This is a longer sentence, which includes a comma.</string>\n</resources>\n"
131131
outputPath := "../../build/out.csv"
132132
inputPath := "../../build/test.csv"
133133
err := os.WriteFile("../../build/test.csv", []byte("key,en\nTHIS,\"This is a longer sentence, which includes a comma.\"\nTHAT,Another string including a | even."), 0777)
@@ -155,7 +155,7 @@ func TestEscapingSingleColumn(t *testing.T) {
155155
}
156156

157157
func TestEscapingAllColumns(t *testing.T) {
158-
output := "<resources>\n\t<string name=\"that\">Another string including a | even.</string>\n\t<string name=\"this\">This is a longer sentence, which includes a comma.</string>\n</resources>\n"
158+
output := "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"that\">Another string including a | even.</string>\n <string name=\"this\">This is a longer sentence, which includes a comma.</string>\n</resources>\n"
159159
outputPath := "../../build/out.csv"
160160
inputPath := "../../build/test.csv"
161161
err := os.WriteFile("../../build/test.csv", []byte("\"key\",\"en\"\n\"THIS\",\"This is a longer sentence, which includes a comma.\"\n\"THAT\",\"Another string including a | even.\""), 0777)
Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
<?xml version="1.0" encoding="utf-8"?>
12
<resources>
2-
<string name="something">Noget</string>
3-
<string name="something_escaped">Noget med ,</string>
4-
<string name="something_for_xml">Det er som &amp; og &lt;b&gt;fremhævet&lt;/b&gt; \"tekst\" eller 官话</string>
5-
<string name="something_with_arguments">Noget med %1$s og %2$s</string>
6-
<string name="watch_out_for_new_lines">Tekst\nmed\nline\nskift</string>
7-
<string name="ioscasesensitivekey">Noget</string>
3+
<string name="something">Noget</string>
4+
<string name="something_escaped">Noget med ,</string>
5+
<string name="something_for_xml">Det er som &amp; og &lt;b&gt;fremhævet&lt;/b&gt; \"tekst\" eller 官话</string>
6+
<string name="something_with_arguments">Noget med %1$s og %2$s</string>
7+
<string name="something_with_escaped_percentage">Noget med %% %1$s %%%2$s</string>
8+
<string name="watch_out_for_new_lines">Tekst\nmed\nline\nskift</string>
9+
<string name="ioscasesensitivekey">Noget</string>
810
</resources>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1+
<?xml version="1.0" encoding="utf-8"?>
12
<resources>
23
</resources>
Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
<?xml version="1.0" encoding="utf-8"?>
12
<resources>
2-
<string name="something">Something</string>
3-
<string name="something_escaped">Something with ,</string>
4-
<string name="something_for_xml">It\'s like &amp; and &lt;b&gt;bold&lt;/b&gt; \"text\" or 官话</string>
5-
<string name="something_with_arguments">Something with %1$s and %2$s</string>
6-
<string name="watch_out_for_new_lines">Text\nwith\nnew\nlines</string>
7-
<string name="ioscasesensitivekey">Something</string>
3+
<string name="something">Something</string>
4+
<string name="something_escaped">Something with ,</string>
5+
<string name="something_for_xml">It\'s like &amp; and &lt;b&gt;bold&lt;/b&gt; \"text\" or 官话</string>
6+
<string name="something_with_arguments">Something with %1$s and %2$s</string>
7+
<string name="something_with_escaped_percentage">Something with %% %1$s %%%2$s</string>
8+
<string name="watch_out_for_new_lines">Text\nwith\nnew\nlines</string>
9+
<string name="ioscasesensitivekey">Something</string>
810
</resources>
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1+
<?xml version="1.0" encoding="utf-8"?>
12
<resources>
2-
<string name="something">Noget</string>
3-
<string name="something_only_in_en">Something only in English</string>
3+
<string name="something">Noget</string>
4+
<string name="something_only_in_en">Something only in English</string>
45
</resources>
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1+
<?xml version="1.0" encoding="utf-8"?>
12
<resources>
2-
<string name="something">Something</string>
3-
<string name="something_only_in_en">Something only in English</string>
3+
<string name="something">Something</string>
4+
<string name="something_only_in_en">Something only in English</string>
45
</resources>

internal/translations/testdata/input.csv

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ KEY,UPDATE NEEDED,EN,DA,COMMENT
22
SOMETHING,,Something,Noget,
33
SOMETHING_ESCAPED,,"Something with ,","Noget med ,",
44
SOMETHING_WITH_ARGUMENTS,,Something with %1 and %2,Noget med %1 og %2,
5+
SOMETHING_WITH_ESCAPED_PERCENTAGE,,Something with % %1 %%2,Noget med % %1 %%2,
56
SOMETHING_FOR_XML,,"It's like & and <b>bold</b> ""text"" or 官话","Det er som & og <b>fremhævet</b> ""tekst"" eller 官话",
67
WATCH_OUT_FOR_NEW_LINES,,"Text
78
with

internal/translations/testdata/ios-da.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@
22
"SOMETHING_ESCAPED" = "Noget med ,";
33
"SOMETHING_FOR_XML" = "Det er som & og <b>fremhævet</b> \"tekst\" eller 官话";
44
"SOMETHING_WITH_ARGUMENTS" = "Noget med %1 og %2";
5+
"SOMETHING_WITH_ESCAPED_PERCENTAGE" = "Noget med % %1 %%2";
56
"WATCH_OUT_FOR_NEW_LINES" = "Tekst\nmed\nline\nskift";
67
"iOSCaseSensitiveKey" = "Noget";

internal/translations/testdata/ios-en.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@
22
"SOMETHING_ESCAPED" = "Something with ,";
33
"SOMETHING_FOR_XML" = "It's like & and <b>bold</b> \"text\" or 官话";
44
"SOMETHING_WITH_ARGUMENTS" = "Something with %1 and %2";
5+
"SOMETHING_WITH_ESCAPED_PERCENTAGE" = "Something with % %1 %%2";
56
"WATCH_OUT_FOR_NEW_LINES" = "Text\nwith\nnew\nlines";
67
"iOSCaseSensitiveKey" = "Something";

0 commit comments

Comments
 (0)