diff --git a/zanata-client-commands/src/main/java/org/zanata/client/commands/pull/XliffStrategy.java b/zanata-client-commands/src/main/java/org/zanata/client/commands/pull/XliffStrategy.java
index 707ce1ad..2bcc8ad4 100644
--- a/zanata-client-commands/src/main/java/org/zanata/client/commands/pull/XliffStrategy.java
+++ b/zanata-client-commands/src/main/java/org/zanata/client/commands/pull/XliffStrategy.java
@@ -25,12 +25,15 @@
import java.io.IOException;
import org.zanata.adapter.xliff.XliffWriter;
+import org.zanata.client.commands.TransFileResolver;
import org.zanata.client.config.LocaleMapping;
import org.zanata.common.io.FileDetails;
import org.zanata.rest.StringSet;
import org.zanata.rest.dto.resource.Resource;
import org.zanata.rest.dto.resource.TranslationsResource;
+import static org.zanata.client.commands.TransFileResolver.UnqualifiedSrcDocName;
+
/**
* @author Sean Flanigan sflaniga@redhat.com
@@ -61,10 +64,8 @@ public void writeSrcFile(Resource doc) throws IOException {
@Override
public File
getTransFileToWrite(String docName, LocaleMapping localeMapping) {
- // TODO This is the same as XliffWriter's used file, but code is
- // duplicated
- return new File(getOpts().getTransDir(), docName + "_"
- + localeMapping.getLocalLocale().replace('-', '_') + ".xml");
+ return new TransFileResolver(getOpts()).getTransFile(
+ UnqualifiedSrcDocName.from(docName), localeMapping);
}
@Override
diff --git a/zanata-client-commands/src/test/java/org/zanata/client/commands/pull/XliffStrategyPullTest.java b/zanata-client-commands/src/test/java/org/zanata/client/commands/pull/XliffStrategyPullTest.java
new file mode 100644
index 00000000..7752fb15
--- /dev/null
+++ b/zanata-client-commands/src/test/java/org/zanata/client/commands/pull/XliffStrategyPullTest.java
@@ -0,0 +1,75 @@
+package org.zanata.client.commands.pull;
+
+import com.google.common.base.Optional;
+import com.google.common.collect.Lists;
+import org.junit.Before;
+import org.junit.Test;
+import org.zanata.client.config.FileMappingRule;
+import org.zanata.client.config.LocaleList;
+import org.zanata.client.config.LocaleMapping;
+
+import java.io.File;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+import static org.zanata.client.TestUtils.createAndAddLocaleMapping;
+
+public class XliffStrategyPullTest {
+ private XliffStrategy strategy;
+ private PullOptionsImpl opts;
+
+ @Before
+ public void setUp() {
+ opts = new PullOptionsImpl();
+ opts.setLocaleMapList(new LocaleList());
+ opts.setProjectType("xliff");
+ strategy = new XliffStrategy(opts);
+ }
+
+ @Test
+ public void canGetTransFileWithoutMappingRule() {
+ LocaleMapping deMapping = createAndAddLocaleMapping("de",
+ Optional.absent(), opts);
+ LocaleMapping zhMapping =
+ createAndAddLocaleMapping("zh-CN",
+ Optional.of("zh-Hans"),
+ opts);
+
+ File deTransFile =
+ strategy.getTransFileToWrite("foo/message", deMapping);
+
+ assertThat(deTransFile,
+ equalTo(new File(opts.getTransDir(), "foo/message_de.xml")));
+
+ File zhTransFile =
+ strategy.getTransFileToWrite("foo/message", zhMapping);
+ assertThat(zhTransFile, equalTo(
+ new File(opts.getTransDir(), "foo/message_zh_Hans.xml")));
+
+ }
+
+ @Test
+ public void canGetTransFileWithMappingRule() {
+ LocaleMapping deMapping = createAndAddLocaleMapping("de",
+ Optional.absent(), opts);
+ LocaleMapping zhMapping =
+ createAndAddLocaleMapping("zh-CN",
+ Optional.of("zh-Hans"),
+ opts);
+ opts.setFileMappingRules(Lists.newArrayList(
+ new FileMappingRule("{path}/{filename}_{locale_with_underscore}.{extension}")));
+
+ File deTransFile =
+ strategy.getTransFileToWrite("foo/message", deMapping);
+
+ assertThat(deTransFile,
+ equalTo(new File(opts.getTransDir(), "foo/message_de.xml")));
+
+ File zhTransFile =
+ strategy.getTransFileToWrite("foo/message", zhMapping);
+ assertThat(zhTransFile, equalTo(
+ new File(opts.getTransDir(), "foo/message_zh_Hans.xml")));
+
+ }
+
+}
\ No newline at end of file