use of com.google.template.soy.msgs.SoyMsgBundleHandler in project closure-templates by google.
the class SoyMsgPruner method compile.
@Override
void compile(SoyFileSet.Builder sfsBuilder, Injector injector) throws IOException {
sfsBuilder.setAllowExternalCalls(allowExternalCalls);
SoyFileSet sfs = sfsBuilder.build();
SoyMsgBundleHandler msgBundleHandler = new SoyMsgBundleHandler(messagePlugin);
// Main loop.
for (int i = 0; i < inputMsgFiles.size(); i++) {
// Get the input msg bundle.
File inputMsgFilePath = inputMsgFiles.get(i);
SoyMsgBundle origTransMsgBundle = msgBundleHandler.createFromFile(inputMsgFilePath);
if (origTransMsgBundle.getLocaleString() == null) {
throw new IOException("Error opening or parsing message file " + inputMsgFilePath);
}
// Do the pruning.
SoyMsgBundle prunedTransSoyMsgBundle = sfs.pruneTranslatedMsgs(origTransMsgBundle);
// Write out the pruned msg bundle.
File outputMsgFilePath = outputMsgFiles.get(i);
msgBundleHandler.writeToTranslatedMsgsFile(prunedTransSoyMsgBundle, new OutputFileOptions(), outputMsgFilePath);
}
}
use of com.google.template.soy.msgs.SoyMsgBundleHandler in project closure-templates by google.
the class FeaturesUsage method execMain.
private void execMain(String[] args) throws IOException {
CmdLineParser cmdLineParser = new CmdLineParser(this);
cmdLineParser.setUsageWidth(100);
try {
cmdLineParser.parseArgument(args);
} catch (CmdLineException cle) {
System.err.println("\nError: " + cle.getMessage() + "\n\n");
System.err.println(USAGE_PREFIX);
cmdLineParser.printUsage(System.err);
System.exit(1);
}
Injector injector = Guice.createInjector(new SoyModule());
SoyFileSet.Builder sfsBuilder = injector.getInstance(SoyFileSet.Builder.class);
SoyFileSet sfs = sfsBuilder.add(Resources.getResource("simple.soy")).add(Resources.getResource("features.soy")).setCompileTimeGlobals(Resources.getResource("FeaturesUsage_globals.txt")).build();
SoyTofu tofu = sfs.compileToTofu().forNamespace("soy.examples.features");
SoyMsgBundle msgBundle;
if (locale.length() > 0) {
// Use translations from an XLIFF file.
SoyMsgBundleHandler msgBundleHandler = injector.getInstance(SoyMsgBundleHandler.class);
URL xliffResource = Resources.getResource(XLIFF_RESOURCE_PREFIX + locale + ".xlf");
msgBundle = msgBundleHandler.createFromResource(xliffResource);
if (msgBundle.getLocaleString() == null) {
throw new IOException("Error reading message resource \"" + XLIFF_RESOURCE_PREFIX + locale + ".xlf\".");
}
} else {
// Use the messages from the Soy source files.
msgBundle = null;
}
// Note: In the examples below, I sometimes use the version of render() that takes a SoyMapData
// and sometimes use the version that takes a Map<String, ?>. They both work. The version that
// takes a SoyMapData is more efficient if you need to reuse the same template data object for
// multiple calls of render() (because the version that takes a Map<String, ?> internally
// converts it to a new SoyMapData on every call).
writeExampleHeader("demoComments");
System.out.println(tofu.newRenderer(DEMO_COMMENTS).setMsgBundle(msgBundle).render());
writeExampleHeader("demoLineJoining");
System.out.println(tofu.newRenderer(DEMO_LINE_JOINING).setMsgBundle(msgBundle).render());
writeExampleHeader("demoRawTextCommands");
System.out.println(tofu.newRenderer(DEMO_RAW_TEXT_COMMANDS).setMsgBundle(msgBundle).setContentKind(SanitizedContent.ContentKind.TEXT).render());
writeExampleHeader("demoPrint");
System.out.println(tofu.newRenderer(DEMO_PRINT).setData(new SoyMapData(DemoPrintSoyTemplateInfo.BOO, "Boo!", DemoPrintSoyTemplateInfo.TWO, 2)).setMsgBundle(msgBundle).render());
writeExampleHeader("demoAutoescapeTrue");
System.out.println(tofu.newRenderer(DEMO_AUTOESCAPE_TRUE).setData(new SoyMapData(DemoAutoescapeTrueSoyTemplateInfo.ITALIC_HTML, "<i>italic</i>")).setMsgBundle(msgBundle).render());
writeExampleHeader("demoMsg");
System.out.println(tofu.newRenderer(DEMO_MSG).setData(ImmutableMap.of(DemoMsgSoyTemplateInfo.NAME, "Ed", DemoMsgSoyTemplateInfo.LABS_URL, "http://labs.google.com")).setMsgBundle(msgBundle).render());
writeExampleHeader("demoIf");
System.out.println(tofu.newRenderer(DEMO_IF).setData(new SoyMapData("pi", 3.14159)).setMsgBundle(msgBundle).render());
System.out.println(tofu.newRenderer(DEMO_IF).setData(new SoyMapData("pi", 2.71828)).setMsgBundle(msgBundle).render());
System.out.println(tofu.newRenderer(DEMO_IF).setData(new SoyMapData("pi", 1.61803)).setMsgBundle(msgBundle).render());
writeExampleHeader("demoSwitch");
System.out.println(tofu.newRenderer(DEMO_SWITCH).setData(ImmutableMap.of("name", "Fay")).setMsgBundle(msgBundle).render());
System.out.println(tofu.newRenderer(DEMO_SWITCH).setData(ImmutableMap.of("name", "Go")).setMsgBundle(msgBundle).render());
System.out.println(tofu.newRenderer(DEMO_SWITCH).setData(ImmutableMap.of("name", "Hal")).setMsgBundle(msgBundle).render());
System.out.println(tofu.newRenderer(DEMO_SWITCH).setData(ImmutableMap.of("name", "Ivy")).setMsgBundle(msgBundle).render());
writeExampleHeader("demoFor");
SoyListData persons = new SoyListData();
persons.add(new SoyMapData("name", "Jen", "numWaffles", 1));
persons.add(new SoyMapData("name", "Kai", "numWaffles", 3));
persons.add(new SoyMapData("name", "Lex", "numWaffles", 1));
persons.add(new SoyMapData("name", "Mel", "numWaffles", 2));
System.out.println(tofu.newRenderer(DEMO_FOR).setData(new SoyMapData(DemoForSoyTemplateInfo.PERSONS, persons)).setMsgBundle(msgBundle).render());
writeExampleHeader("demoFor_Range");
System.out.println(tofu.newRenderer(DEMO_FOR_RANGE).setData(new SoyMapData(DemoForRangeSoyTemplateInfo.NUM_LINES, 3)).setMsgBundle(msgBundle).render());
writeExampleHeader("demoCallWithoutParam");
System.out.println(tofu.newRenderer(DEMO_CALL_WITHOUT_PARAM).setData(new SoyMapData(DemoCallWithoutParamSoyTemplateInfo.NAME, "Neo", DemoCallWithoutParamSoyTemplateInfo.TRIP_INFO, new SoyMapData("name", "Neo", "destination", "The Matrix"))).setMsgBundle(msgBundle).render());
writeExampleHeader("demoCallWithParam");
System.out.println(tofu.newRenderer(DEMO_CALL_WITH_PARAM).setData(ImmutableMap.of(DemoCallWithParamSoyTemplateInfo.NAME, "Oz", DemoCallWithParamSoyTemplateInfo.COMPANION_NAME, "Pip", DemoCallWithParamSoyTemplateInfo.DESTINATIONS, ImmutableList.of("Gillikin Country", "Munchkin Country", "Quadling Country", "Winkie Country"))).setMsgBundle(msgBundle).render());
writeExampleHeader("demoCallWithParamBlock");
System.out.println(tofu.newRenderer(DEMO_CALL_WITH_PARAM_BLOCK).setData(new SoyMapData(DemoCallWithParamBlockSoyTemplateInfo.NAME, "Quo")).setMsgBundle(msgBundle).render());
writeExampleHeader("demoExpressions");
SoyListData students = new SoyListData();
students.add(new SoyMapData("name", "Rob", "major", "Physics", "year", 1999));
students.add(new SoyMapData("name", "Sha", "major", "Finance", "year", 1980));
students.add(new SoyMapData("name", "Tim", "major", "Engineering", "year", 2005));
students.add(new SoyMapData("name", "Uma", "major", "Biology", "year", 1972));
System.out.println(tofu.newRenderer(DEMO_EXPRESSIONS).setData(new SoyMapData(DemoExpressionsSoyTemplateInfo.STUDENTS, students, DemoExpressionsSoyTemplateInfo.CURRENT_YEAR, 2008)).setMsgBundle(msgBundle).render());
writeExampleHeader("demoDoubleBraces");
System.out.println(tofu.newRenderer(DEMO_DOUBLE_BRACES).setData(ImmutableMap.of(DemoDoubleBracesSoyTemplateInfo.SET_NAME, "prime numbers", DemoDoubleBracesSoyTemplateInfo.SET_MEMBERS, ImmutableList.of(2, 3, 5, 7, 11, 13))).setMsgBundle(msgBundle).setContentKind(SanitizedContent.ContentKind.TEXT).render());
// The Hebrew in the following example comes out as question marks in the output because
// System.out (and by default stdout generally) is set up to use a Latin encoding. To see
// this really in action, run the Javascript example.
writeExampleHeader("demoBidiSupport");
System.out.println(tofu.newRenderer(DEMO_BIDI_SUPPORT).setData(ImmutableMap.of(DemoBidiSupportSoyTemplateInfo.TITLE, "2008: A BiDi Odyssey", DemoBidiSupportSoyTemplateInfo.AUTHOR, "John Doe, Esq.", DemoBidiSupportSoyTemplateInfo.YEAR, "1973", DemoBidiSupportSoyTemplateInfo.KEYWORDS, ImmutableList.of("Bi(Di)", "2008 (\u05E9\u05E0\u05D4)", "2008 (year)"))).setMsgBundle(msgBundle).render());
}
use of com.google.template.soy.msgs.SoyMsgBundleHandler in project closure-templates by google.
the class SoyFileSet method compileToJsSrcFiles.
/**
* Compiles this Soy file set into JS source code files and writes these JS files to disk.
*
* @param outputPathFormat The format string defining how to build the output file path
* corresponding to an input file path.
* @param inputFilePathPrefix The prefix prepended to all input file paths (can be empty string).
* @param jsSrcOptions The compilation options for the JS Src output target.
* @param locales The list of locales. Can be an empty list if not applicable.
* @param msgPlugin The {@link SoyMsgPlugin} to use, or null if not applicable
* @param messageFilePathFormat The message file path format, or null if not applicable.
* @throws SoyCompilationException If compilation fails.
* @throws IOException If there is an error in opening/reading a message file or opening/writing
* an output JS file.
*/
@SuppressWarnings("deprecation")
void compileToJsSrcFiles(String outputPathFormat, String inputFilePathPrefix, SoyJsSrcOptions jsSrcOptions, List<String> locales, @Nullable SoyMsgPlugin msgPlugin, @Nullable String messageFilePathFormat) throws IOException {
ParseResult result = preprocessJsSrcResults(jsSrcOptions);
SoyFileSetNode soyTree = result.fileSet();
TemplateRegistry registry = result.registry();
if (locales.isEmpty()) {
// Not generating localized JS.
new JsSrcMain(apiCallScopeProvider, typeRegistry).genJsFiles(soyTree, registry, jsSrcOptions, null, null, outputPathFormat, inputFilePathPrefix, errorReporter);
} else {
checkArgument(msgPlugin != null, "a message plugin must be provided when generating localized sources");
checkArgument(messageFilePathFormat != null, "a messageFilePathFormat must be provided when generating localized sources");
// Generating localized JS.
for (String locale : locales) {
SoyFileSetNode soyTreeClone = soyTree.copy(new CopyState());
String msgFilePath = MainEntryPointUtils.buildFilePath(messageFilePathFormat, locale, null, inputFilePathPrefix);
SoyMsgBundle msgBundle = new SoyMsgBundleHandler(msgPlugin).createFromFile(new File(msgFilePath));
if (msgBundle.getLocaleString() == null) {
// begins with "en", because falling back to the Soy source will probably be fine.
if (!locale.startsWith("en")) {
throw new IOException("Error opening or reading message file " + msgFilePath);
}
}
new JsSrcMain(apiCallScopeProvider, typeRegistry).genJsFiles(soyTreeClone, registry, jsSrcOptions, locale, msgBundle, outputPathFormat, inputFilePathPrefix, errorReporter);
}
}
throwIfErrorsPresent();
reportWarnings();
}
use of com.google.template.soy.msgs.SoyMsgBundleHandler in project closure-templates by google.
the class SoyMsgExtractor method compile.
@Override
void compile(SoyFileSet.Builder sfsBuilder, Injector injector) throws IOException {
sfsBuilder.setAllowExternalCalls(allowExternalCalls);
SoyFileSet sfs = sfsBuilder.build();
OutputFileOptions options = new OutputFileOptions();
options.setSourceLocaleString(sourceLocaleString);
if (targetLocaleString.length() > 0) {
options.setTargetLocaleString(targetLocaleString);
}
sfs.extractAndWriteMsgs(new SoyMsgBundleHandler(messagePlugin), options, Files.asByteSink(outputFile));
}
Aggregations