`
madbluesky
  • 浏览: 83760 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

google clourse template 学习笔记

阅读更多
google clourse template:

这个模板主要是为了在java或javascript中方便的生成创建动态html的代码,主要分两部分javascript版本和java版本,它们需要不同的jar包和不同的js库,它们运用的方式也有较大的差别.

一.javascript部分:
  主要包括2个核心文件
SoyToJsSrcCompiler.jar 一个独立的可执行的jar文件,它负责将模板源文件(soy文件)编译成有效的javascript函数
soyutils.js 一个独立的js库,所有的通过编译模板源文件得到的javascript代码都需要它才能正常运行.
   SoyToJsSrcCompiler.jar编译soy文件生成js函数,借助soyutils.js的支持,生成的js函数可以动态生成html.这里核心的部分是soy文件的编写,在后面集中进行讲解.
SoyToJsSrcCompiler.jar的运行方法:
  java -jar SoyToJsSrcCompiler.jar  --outputPathFormat 生成的js文件路径   soy文件路径

二.java部分
   1.主要包括2个文件:
    soy.jar 一个独立的jar文件,包含了所有的模板类以及它们的依赖.通过它提供的接口我们可以编写代码根据soy文件生成需要的html.这跟javascript部分不同,javascrit部分是生成能够生成html的js函数,js函数一旦生成,则不再依赖soy文件.而java部分则是直接通过提供的接口编写java方法用于根据(解析)soy文件生成html,它是依赖soy文件的.
    SoyParseInfoGenerator.jar 是一个可执行的jar文件,它能分析soy文件产生包含模板和参数信息的java类(soyFileInfo类).主要作用是方便保持soy文件中参数名,方法名与java类的相应名字的对应关系,soy文件中参数名或方法名修改之后只要通过SoyParseInfoGenerator.jar重新生成一此soyFileInfo就行,无需在其他地方做对应的修改(这些修改可能会导致遗漏)
   2.几个重要的类:
看一个例子
import com.google.template.soy.SoyFileSet;
import com.google.template.soy.data.SoyMapData;
import com.google.template.soy.tofu.SoyTofu;

import java.io.File;

public class HelloWorld {

  public static void main (String[] args) {

// 以SoyFileSet的形式绑定一个或多个soy文件到你的工程.add方法可以连写以绑定多个soy文件(new SoyFileSet.Builder()).add(new File("simple.soy")).add(new File(path)).build();
    SoyFileSet sfs = (new SoyFileSet.Builder()).add(new File("simple.soy")).build();

     //将模板编译成SoyTofu对象
    //SoyTofu 有一个render方法,它能将SoyFileSet中所有的模板翻译html
    SoyTofu tofu = sfs.compileToJavaObj();

    /** render方法有3个参数,第一个参数对应soy文件中的命名空间,第2个参数是需要提供的参数,需要封装成SoyMapData,第三个参数是SoyMsgBundle主要用于多语言的翻译(这个后面专门讲解),
     *     如果无需多语言支持则为null即可.
    *   SoyMapData 中存放的是参数名,值对,可以象一个java map那样创建 SoyMapData aMap = new SoyMapData();aMap.put("xx","xx"),也可以这样 new SoyMapData(名,值,名,值...)
     */
    System.out.println(tofu.render("examples.simple.helloWorld", (SoyMapData) null, null));
  }

}
  上面通过一个简单的例子简单分析了以下及个类
   SoyFileSet : 用来绑定soy文件
   SoyTofu : 将模板编译成SoyTofu对象
   SoyMapData : 存放参数名,值对.名和值都可以是任意的SoyData类型(不能是普通java对象,否则会抛出一个未绑定的对象的异常),SoyData包括基本数据类型,字符串,SoyListData等
    通过这些我我们已经可以进行简单的基本的应用了.
3.SoyParseInfoGenerator.jar的应用
java -jar SoyParseInfoGenerator.jar --outputDirectory generated --javaPackage generated --javaClassNameSource filename simple.soy
这个命名表示创建一个generated文件夹 ,并在generated文件夹下生成一个名为simpleSoyInfo.java的文件,这个文件中包含与soy文件中变量,模板字符串相当的常量.

三 翻译
1.首先下载SoyMsgExtractor.jar 此jar包可以将soy文件格式化成xlf文件
命令为 : java -jar SoyMsgExtractor.jar  --outputFile extracted_msgs.xlf  aaa.soy bbb.soy
注:XLIFF 是用来在参与翻译项目的各方之间交换本地化数据的格式。这种特殊的格式使翻译人员能够把精力集中到所翻译的文本上,而不用担心文本的布局。
  XLIFF 标准得到了大量本地化服务提供商和本地化工具提供商的支持。
           翻译文档时使用 XLIFF 最主要的原因是,在翻译不同类型的文档时,您可以使用单一的文件格式
得到不同语言的xlf文件之后
   对于java :使用SoyMsgBundle进行翻译处理,具体如下
SoyMsgBundleHandler msgBundleHandler = new SoyMsgBundleHandler(new XliffMsgPlugin());
SoyMsgBundle msgBundle = msgBundleHandler.createFromFile(new File("translated_msgs_pt-BR.xlf"));
将创建的msgBundle传给SoyToFun的render方法,这样产生的html时soy文件中msg标签对应的文本就显示的语言就是xlf文件的语言.
   对于javascript :
java -jar SoyToJsSrcCompiler.jar  --locales en,de,pt-BR  --messageFilePathFormat translated_msgs_{LOCALE}.xlf \
        --outputPathFormat '{INPUT_FILE_NAME_NO_EXT}_{LOCALE}.js'  aaa.soy bbb.soy

四 soy文件的编写
    soy文件是整个模板的核心,它有自己的语法,能够定义参数,有分支,循环等结构,可以说是一个简单的语言,soy文件的语法跟大多数编程语言的语法类似,比较容易学.
   1.soy文件的特殊字符
Special Character  Equivalent Raw Text
{sp}                         空格
{nil} 空串
{\r} 回车
{\n} 换行
{\t} 制表符
{lb} 左大括号"{"
{rb} 右大括号"}"
   2.soy文件标签
1)soy文件头必须以一个命名空间的定义开始{namespace xx.xxx} 它表示该soy文件下所有的模板都是在该namespace下

2) template /template 表示一个模板,用法如下:其中template_name必须以"."开头,表示模板的名字,"{"必须定格写
  {template <template_name>}
  ...
  {/template}
      3) literal, /literal 这个跟xml的<![CDATA[...]]>类似,其中可以直接写特殊字符 比如空格,大括号等无需特殊表示

      4) {<expression>}
{print <expression>} 输出<expression> print可省略
      5) msg, /msg 定义需要翻译的消息 语法:
{msg desc="<help_text_for_translators>"}
  ...
{/msg}

6) if, elseif, else, /if 分支标签,语法:
{if <expression>}
  ...
{elseif <expression>}
  ...
{else}
  ...
{/if}
7) switch, case, default, /switch 分支标签 语法:
{switch <expression>}
  {case <expression_list>}
    ...
  {case <expression_list>}
    ...
  {default}
    ...
{/switch}
8) foreach, ifempty, /foreach  迭代标签 语法:
{foreach <local_var> in <data_ref>}
  ...
{ifempty}
  ...
{/foreach}
{foreach <local_var in <data_ref>}比较好理解就是一遍历,{ifempty} 表示<data_ref>为空时执行的语句
另外在foreach语句中还有几个标签可以用 分别是 :    isFirst($var)  isLast($var) index($var)
9) for, /for  循环标签 语法:
{for <local_var> in range(<expression1>, <expression2>, <expression3>)}
  ...
{/for}
这里主要讲解一下rang的含义,rang将返回一个从起始值到最大值间隔为<expression3>的数组,它的参数个数可以是3个,2个或1个.
3个参数时分别表示,起始值,最大值,步长.2个数参数时则步长默认为1,1个参数时起始值得默认为0
10) call, /call, param, /param 调用其他模板的结果,相当于函数调用,语法:
{call <template_name> data="<data_to_pass>" /}

{call <template_name> data="<data_to_pass>"}
  {param <key1>: <expression> /}
  {param <key2>}
    ...
  {/param}
{/call}
<template_name>表示调用的模板的名字,data传给待调用模板的参数,param用来设置待调函数的相应的参数值.
data="all"表示用当前模板的参数传给调用模板,前提是调用模板的参数是当前模板参数的子集,名字必须全部匹配.
   3.soy文件必须以一个新的空行结尾 就是文件结束后得多出一行,否则就会出错.

docs详见:http://code.google.com/intl/zh-CN/closure/templates/docs/overview.html
javascript版本下载 :http://code.google.com/intl/zh-CN/closure/templates/docs/helloworld_js.html
java版本下载 : http://code.google.com/intl/zh-CN/closure/templates/docs/helloworld_java.html
翻译需要的xlf格式化工具下载 : http://code.google.com/intl/zh-CN/closure/templates/docs/translation.html




分享到:
评论

相关推荐

    Go Template学习笔记

    Go 模板是 Go 语言标准库中的一个重要组成部分,它用于生成动态内容,尤其是在 Web 开发中用于渲染 HTML 页面。...通过学习这些基本概念和语法,你可以更好地理解和利用 Go 模板来构建高效、安全的 Web 应用。

    Go 学习笔记 高清

    根据提供的文件内容,以下是对Go语言学习笔记的详细知识点阐述。 Go语言是Google开发的一种静态类型、编译型、并发型,并具有垃圾回收功能的编程语言。它由Robert Griesemer、Rob Pike和Ken Thompson于2007年9月...

    Go语言学习笔记.pdf 共174页

    Go语言学习笔记.pdf 共174页 Go语言学习笔记.pdf 共174页是一本关于Go语言的详细学习笔记,涵盖了Go语言的基础知识、函数、数组、Maps、Structs、接口、并发、程序结构、标准库等方面的内容。本笔记共分为三大部分...

    vue学习笔记,B站黑马程序员的javaweb

    Vue学习笔记 Vue是一个基于JavaScript的渐进式框架,用于构建用户界面。下面是关于Vue的学习笔记。 一、Vue基本知识 在Vue中,以点vue结尾的文件称为组件文件,包含三部分:template、script、style。template是...

    Visual C++程序设计学习笔记

    《Visual C++程序设计学习笔记》是一份深入探讨VC++编程技术的综合资料,涵盖了从基础知识到实际系统开发的广泛内容。Visual C++是Microsoft公司推出的一种强大的集成开发环境,它集成了C++编译器、调试器以及MFC...

    web学习笔记 —— javascript基础

    这篇“web学习笔记——javascript基础”将带你走进JavaScript的世界,理解其基本概念和常用语法。 JavaScript语法基础: 1. 变量:在JavaScript中,变量用于存储数据。声明变量使用`var`关键字,例如`var myVar = ...

    c++ -- stl 学习笔记

    这篇学习笔记将深入探讨STL的核心概念、主要组件以及其在实际编程中的应用。 首先,STL的核心概念是容器、迭代器、算法和函数对象。容器是STL提供的一系列数据结构,如vector(动态数组)、list(双向链表)、set...

    Visual C++程序设计学习笔记(1-12 源码)

    本资源包含的是Visual C++程序设计的学习笔记,涵盖了从基础到进阶的12个章节的源代码,对于学习和理解C++编程,特别是使用Visual C++环境编程,具有极高的参考价值。 首先,我们来详细探讨一下Visual C++的关键...

    C++学习笔记经典(与C比较)

    《C++学习笔记经典(与C比较)》这份资料应该会详细讲解这些知识点,并通过实例来帮助读者深入理解C++与C的差异,以及如何在实际编程中应用C++的特性和功能。这份资料可能会涵盖基本语法、类和对象、模板、STL的使用...

    The template repository for the mysql学习笔记.zip

    这个压缩包“mysql学习笔记.zip”似乎包含了一些关于学习MySQL的资源,可能是笔记、教程或者是示例代码。虽然没有具体的标签来指导我们,但我们可以从标题和描述推测,内容可能涵盖了MySQL的基础知识、查询语言、表...

    Postgis学习笔记.doc

    PostGIS学习笔记 PostGIS 是一个基于 PostgreSQL 的空间数据库扩展,可以处理空间数据和进行空间查询。下面是 PostGIS 学习笔记的要点总结: 一、PostGIS 的基本概念 PostGIS 是一个开源的空间数据库扩展,基于 ...

    前端学习笔记,做一个简单的网站-todomvc-app-template,学习代码

    在这个"前端学习笔记,做一个简单的网站-todomvc-app-template"中,我们将会探索如何利用HTML、JavaScript(JS)以及一些辅助工具和最佳实践来创建一个TodoMVC应用模板。TodoMVC是一个流行的学习和展示MV*(Model-...

    opencms9.0.1开发学习笔记资料

    本开发学习笔记旨在记录在使用该版本时遇到的问题及其解决方案,帮助开发者更好地理解和掌握 Opencms 的核心功能。 1. **Opencms 介绍和环境搭建** - **简介**:Opencms 是一个基于 Java 技术的 CMS 平台,它提供...

    Django学习笔记.pdf

    Django采用的是MVC(Model-View-Controller)设计模式,但是通常被称为MTV(Model-Template-View)模式。接下来,我将对Django框架的主要组成部分和特点进行详细的阐述,帮助你更好地理解和学会基于Python之上的...

    Revit基础教程-学习笔记

    本文将基于“Revit基础教程”的学习笔记,详细讲解Revit的基础知识和操作。 1. BIM(Building Information Modeling)的核心理念是参数化和信息化,意味着模型中的每个元素都含有丰富的信息,可以进行实时更新和...

    php模板引擎Smarty学习笔记(全)

    本学习笔记将详细介绍Smarty的核心概念、安装配置、基本用法以及一些高级特性。 1. Smarty核心概念: - 模板:HTML代码,其中包含特殊的SMARTY标记,用于插入动态数据。 - 配置文件:定义SMARTY的全局设置,如...

    Javascript学习笔记(传智播客视频学习笔记+代码)

    "Javascript学习笔记(传智播客视频学习笔记+代码)"是一份全面介绍JavaScript基础知识的学习资源,适用于初学者。这份笔记结合了传智播客的web前端培训视频内容,提供了丰富的理论讲解和实践代码,帮助读者从零开始...

    达内学生的C++学习笔记

    《达内学生C++学习笔记》是一份专为初学者设计的C++教程,旨在提供清晰易懂、逐步深入的学习路径。这份笔记涵盖了C++语言的基础到进阶内容,是学习C++的理想辅助资料。 首先,C++是一种静态类型的、编译式的、通用...

    C++学习笔记共82页.pdf.zip

    【标题】"C++学习笔记共82页.pdf.zip" 提供的是一个关于C++编程语言的学习资料,其中包含了82页的详细笔记。这个压缩文件可能是为了方便学习者整理和下载,便于他们系统地掌握C++的基础知识和进阶技巧。 【描述】...

Global site tag (gtag.js) - Google Analytics