2015年3月4日 星期三

Java ResourceBundle 多語系(本地化)

http://villebez.logdown.com/posts/2014/07/25/java-resourcebundle

這個類提供軟體國際化的捷徑。通過此類,可以使您所編寫的程式可以:
輕鬆地當地語系化或翻譯成不同的語言
一次處理多個語言環境
以後可以輕鬆地進行修改,支援更多的語言環境
這個類的作用就是讀取資源屬性檔(properties),然後根據.properties檔的名稱資訊(當地語系化資訊),匹配當前系統的國別語言資訊(也可以程式指定),然後獲取相應的properties檔的內容。
使用這個類,要注意的一點是,這個properties檔的名字是有規範的:一般的命名規範是:自訂名_語言代碼_國別代碼.properties,如果是默認的,直接寫為:自訂名.properties
例如:
example.properties
example_en_US.properties
example_zh_TW.properties
範例:
定義資源檔,放到src的根目錄下面
example_en_US.properties
aaa = Hello
example_zh_TW.properties
aaa = \u54C8\u56C9
public static void main(String[] args) {
         Locale locale1 = new Locale("zh", "TW"); 
     ResourceBundle resb1 = ResourceBundle.getBundle("example", locale1); 
     System.out.println(resb1.getString("aaa")); 

     Locale locale2 = new Locale("en", "US"); 
     ResourceBundle resb2 = ResourceBundle.getBundle("example", locale2); 
     System.out.println(resb2.getString("aaa")); 
}
執行結果:
哈囉
Hello
Eclipse Plugin:ResourceBundleEditor
好用的properties編輯工具,可以同時開啟不同語系的properties檔案,自動同步key,方便編輯多語系value,並會自動將文字轉換為Java Unicode Escape的格式

Apache Thrift

Command:thrift --gen java
Example.thrift



include "example2.thrift"
namespace java com.thrift.example
typedef i32 int  
typedef i64 long

service ThriftAuthService {  
    example2.XXX auth(1:string account, 2:string password),
}

2015年3月2日 星期一

Gradle Build Project Example

  • Build.gradle : Simple Java Project Example

apply plugin: 'java'
sourceSets {
    main {
        java {
            srcDir 'src'
        }
        resources {
            srcDir 'src'
        }
    }
}
repositories {
    maven {
        credentials {
            username 'deployment'
            password ''
        }
        url "http://127.0.0.1:8081/nexus/content/groups/public/"
    }
}
 
dependencies {
    compile 'junit:junit:4.11'
    …
    …
}

  • Build.gradle : Web Project Example

apply plugin: 'eclipse-wtp'
apply plugin: 'jetty'

  • Build.gradle : Application Project Example

apply plugin: 'application'

def createScript(project, mainClass, name) {
  project.tasks.create(name: name, type: CreateStartScripts) {
    outputDir       = new File(project.buildDir, 'scripts')
    mainClassName   = mainClass
    applicationName = name
    classpath       = project.tasks[JavaPlugin.JAR_TASK_NAME].outputs.files + project.configurations.runtime
}

project.tasks[name].dependsOn(project.jar)

  project.applicationDistribution.with {
    into("bin") {
      from(project.tasks[name])
      fileMode = 0755
    }
  }
  
project.tasks[name].doLast {
    unixScript.text = unixScript.text.replace("\$CLASSPATH", ".:\$APP_HOME/lib/*") 
    //windowsScript.text = windowsScript.text.replace("%CLASSPATH%", ".;%APP_HOME%\\lib\\*") 
}
}

startScripts.enabled = false
run.enabled = false

createScript(project, 'com.gigabyte.HelloWorld ', 'helloworld')