Skip to content

Commit

Permalink
Add file type for VSCode Extension
Browse files Browse the repository at this point in the history
VSCode Extension uses JSON with simple map id to source string. The source files are package.nls.json and l10n/bundle.l10n.json.

Also see docs: https://github.com/microsoft/vscode-extension-samples/tree/main/l10n-sample
  • Loading branch information
ja-openai committed Feb 18, 2025
1 parent 66ef94a commit 5d46bc5
Show file tree
Hide file tree
Showing 37 changed files with 456 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public enum FileTypes {
JSON_NOBASENAME(JSONNoBasenameFileType.class),
CHROME_EXT_JSON(ChromeExtensionJSONFileType.class),
FORMATJS_JSON_NOBASENAME(FormatJSJSONNoBasenameFileType.class),
VSCODE_EXTENSION_JSON(VSCodeFileType.class),
I18NEXT_PARSER_JSON(I18NextFileType.class),
TS(TSFileType.class),
YAML(YamlFileType.class),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.box.l10n.mojito.cli.filefinder.file;

import static com.box.l10n.mojito.cli.filefinder.FilePattern.BASE_NAME;
import static com.box.l10n.mojito.cli.filefinder.FilePattern.DOT;
import static com.box.l10n.mojito.cli.filefinder.FilePattern.FILE_EXTENSION;
import static com.box.l10n.mojito.cli.filefinder.FilePattern.LOCALE;
import static com.box.l10n.mojito.cli.filefinder.FilePattern.PARENT_PATH;

import com.box.l10n.mojito.cli.filefinder.locale.AnyLocaleType;

/**
* https://github.com/microsoft/vscode-extension-samples/tree/main/l10n-sample
*
* @author jaurambault
*/
public class VSCodeFileType extends JSONFileType {

public VSCodeFileType() {
this.baseNamePattern = "(package\\.nls|bundle\\.l10n)";
this.sourceFilePatternTemplate =
"{" + PARENT_PATH + "}{" + BASE_NAME + "}" + DOT + "{" + FILE_EXTENSION + "}";
this.targetFilePatternTemplate =
"{"
+ PARENT_PATH
+ "}{"
+ BASE_NAME
+ "}"
+ DOT
+ "{"
+ LOCALE
+ "}"
+ DOT
+ "{"
+ FILE_EXTENSION
+ "}";
this.localeType = new AnyLocaleType();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -906,6 +906,48 @@ public void importJsonI18NextParser() throws Exception {
checkExpectedGeneratedResources();
}

@Test
public void importJsonVSCodeExtension() throws Exception {

Repository repository = createTestRepoUsingRepoService();

getL10nJCommander()
.run(
"push",
"-r",
repository.getName(),
"-s",
getInputResourcesTestDir("source").getAbsolutePath(),
"-ft",
"VSCODE_EXTENSION_JSON");

getL10nJCommander()
.run(
"import",
"-r",
repository.getName(),
"-s",
getInputResourcesTestDir("source").getAbsolutePath(),
"-t",
getInputResourcesTestDir("translations").getAbsolutePath(),
"-ft",
"VSCODE_EXTENSION_JSON");

getL10nJCommander()
.run(
"pull",
"-r",
repository.getName(),
"-s",
getInputResourcesTestDir("source").getAbsolutePath(),
"-t",
getTargetTestDir().getAbsolutePath(),
"-ft",
"VSCODE_EXTENSION_JSON");

checkExpectedGeneratedResources();
}

@Test
public void importXcodeXliff() throws Exception {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,57 @@ public void pullJsonI18NextParser() throws Exception {
checkExpectedGeneratedResources();
}

@Test
public void pullJsonVSCodeExtension() throws Exception {

Repository repository = createTestRepoUsingRepoService();

getL10nJCommander()
.run(
"push",
"-r",
repository.getName(),
"-s",
getInputResourcesTestDir("source").getAbsolutePath(),
"-ft",
"VSCODE_EXTENSION_JSON");

Asset asset = assetClient.getAssetByPathAndRepositoryId("package.nls.json", repository.getId());
importTranslations(asset.getId(), "source-xliff_", "fr-FR");
importTranslations(asset.getId(), "source-xliff_", "ja-JP");

Asset asset2 =
assetClient.getAssetByPathAndRepositoryId("l10n/bundle.l10n.json", repository.getId());
importTranslations(asset2.getId(), "source-xliff_", "fr-FR");
importTranslations(asset2.getId(), "source-xliff_", "ja-JP");

getL10nJCommander()
.run(
"pull",
"-r",
repository.getName(),
"-s",
getInputResourcesTestDir("source").getAbsolutePath(),
"-t",
getTargetTestDir("target").getAbsolutePath(),
"-ft",
"VSCODE_EXTENSION_JSON");

getL10nJCommander()
.run(
"pull",
"-r",
repository.getName(),
"-s",
getInputResourcesTestDir("source_modified").getAbsolutePath(),
"-t",
getTargetTestDir("target_modified").getAbsolutePath(),
"-ft",
"VSCODE_EXTENSION_JSON");

checkExpectedGeneratedResources();
}

@Test
public void pullFullyTranslated() throws Exception {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package com.box.l10n.mojito.cli.filefinder.file;

import static com.box.l10n.mojito.cli.filefinder.FilePattern.BASE_NAME;
import static com.box.l10n.mojito.cli.filefinder.FilePattern.FILE_EXTENSION;
import static com.box.l10n.mojito.cli.filefinder.FilePattern.LOCALE;
import static com.box.l10n.mojito.cli.filefinder.FilePattern.PARENT_PATH;

import com.box.l10n.mojito.cli.filefinder.FilePattern;
import java.util.regex.Matcher;
import org.junit.Assert;
import org.junit.Test;

public class VSCodeFileTypeTest {

@Test
public void testSourcePattern() {
VSCodeFileType vSCodeFileType = new VSCodeFileType();
FilePattern sourceFilePattern = vSCodeFileType.getSourceFilePattern();
Matcher matcher = sourceFilePattern.getPattern().matcher("/l10n/bundle.l10n.json");
Assert.assertTrue(matcher.matches());
Assert.assertEquals("/l10n/", matcher.group(PARENT_PATH));
Assert.assertEquals("bundle.l10n", matcher.group(BASE_NAME));
Assert.assertEquals("json", matcher.group(FILE_EXTENSION));
}

@Test
public void testSourcePatternPakcage() {
VSCodeFileType vSCodeFileType = new VSCodeFileType();
FilePattern sourceFilePattern = vSCodeFileType.getSourceFilePattern();
Matcher matcher = sourceFilePattern.getPattern().matcher("package.nls.json");
Assert.assertTrue(matcher.matches());
Assert.assertEquals("", matcher.group(PARENT_PATH));
Assert.assertEquals("package.nls", matcher.group(BASE_NAME));
Assert.assertEquals("json", matcher.group(FILE_EXTENSION));
}

@Test
public void testTargetPattern() {
VSCodeFileType vSCodeFileType = new VSCodeFileType();
Matcher matcher =
vSCodeFileType.getTargetFilePattern().getPattern().matcher("/l10n/bundle.l10n.fr.json");
Assert.assertTrue(matcher.matches());
Assert.assertEquals("fr", matcher.group(LOCALE));
Assert.assertEquals("/l10n/", matcher.group(PARENT_PATH));
Assert.assertEquals("bundle.l10n", matcher.group(BASE_NAME));
Assert.assertEquals("json", matcher.group(FILE_EXTENSION));
}

@Test
public void testTargetPatternBcp47() {
VSCodeFileType vSCodeFileType = new VSCodeFileType();
Matcher matcher =
vSCodeFileType.getTargetFilePattern().getPattern().matcher("/l10n/bundle.l10n.fr-FR.json");
Assert.assertTrue(matcher.matches());
Assert.assertEquals("fr-FR", matcher.group(LOCALE));
Assert.assertEquals("/l10n/", matcher.group(PARENT_PATH));
Assert.assertEquals("bundle.l10n", matcher.group(BASE_NAME));
Assert.assertEquals("json", matcher.group(FILE_EXTENSION));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"100_character_description_": "Description de 100 caractères :",
"15_min_duration": "15 min",
"1_day_duration": "1 jour",
"1_hour_duration": "1 heure",
"1_month_duration": "1 mois"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"100_character_description_": "Description de 100 caractères :",
"15_min_duration": "15 min",
"1_day_duration": "1 jour",
"1_hour_duration": "1 heure",
"1_month_duration": "1 mois"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"100_character_description_": "100文字の説明:",
"15_min_duration": "15分",
"1_day_duration": "1日",
"1_hour_duration": "1時間",
"1_month_duration": "1か月"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"100_character_description_": "Description de 100 caractères :",
"15_min_duration": "15 min",
"1_day_duration": "1 jour",
"1_hour_duration": "1 heure",
"1_month_duration": "1 mois"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"100_character_description_": "Description de 100 caractères :",
"15_min_duration": "15 min",
"1_day_duration": "1 jour",
"1_hour_duration": "1 heure",
"1_month_duration": "1 mois"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"100_character_description_": "100文字の説明:",
"15_min_duration": "15分",
"1_day_duration": "1日",
"1_hour_duration": "1時間",
"1_month_duration": "1か月"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"100_character_description_": "100 character description:",
"15_min_duration": "15 min",
"1_day_duration": "1 day",
"1_hour_duration": "1 hour",
"1_month_duration": "1 month"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"100_character_description_": "100 character description:",
"15_min_duration": "15 min",
"1_day_duration": "1 day",
"1_hour_duration": "1 hour",
"1_month_duration": "1 month"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"100_character_description_": "Description de 100 caractères :",
"15_min_duration": "15 min",
"1_day_duration": "1 jour",
"1_hour_duration": "1 heure",
"1_month_duration": "1 mois"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"100_character_description_": "Description de 100 caractères :",
"15_min_duration": "15 min",
"1_day_duration": "1 jour",
"1_hour_duration": "1 heure",
"1_month_duration": "1 mois"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"100_character_description_": "100文字の説明:",
"15_min_duration": "15分",
"1_day_duration": "1日",
"1_hour_duration": "1時間",
"1_month_duration": "1か月"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"100_character_description_": "Description de 100 caractères :",
"15_min_duration": "15 min",
"1_day_duration": "1 jour",
"1_hour_duration": "1 heure",
"1_month_duration": "1 mois"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"100_character_description_": "Description de 100 caractères :",
"15_min_duration": "15 min",
"1_day_duration": "1 jour",
"1_hour_duration": "1 heure",
"1_month_duration": "1 mois"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"100_character_description_": "100文字の説明:",
"15_min_duration": "15分",
"1_day_duration": "1日",
"1_hour_duration": "1時間",
"1_month_duration": "1か月"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"100_character_description_": "Description de 100 caractères :",
"15_min_duration": "15 min",
"1_day_duration": "1 jour",
"1_hour_duration": "1 heure",
"1_month_duration": "1 mois"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"100_character_description_": "Description de 100 caractères :",
"15_min_duration": "15 min",
"1_day_duration": "1 jour",
"1_hour_duration": "1 heure",
"1_month_duration": "1 mois"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"100_character_description_": "100文字の説明:",
"15_min_duration": "15分",
"1_day_duration": "1日",
"1_hour_duration": "1時間",
"1_month_duration": "1か月"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"100_character_description_": "Description de 100 caractères :",
"15_min_duration": "15 min",
"1_day_duration": "1 jour",
"1_hour_duration": "1 heure",
"1_month_duration": "1 mois"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"100_character_description_": "Description de 100 caractères :",
"15_min_duration": "15 min",
"1_day_duration": "1 jour",
"1_hour_duration": "1 heure",
"1_month_duration": "1 mois"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"100_character_description_": "100文字の説明:",
"15_min_duration": "15分",
"1_day_duration": "1日",
"1_hour_duration": "1時間",
"1_month_duration": "1か月"
}
Loading

0 comments on commit 5d46bc5

Please sign in to comment.