Index: /branches/TaskRewrite/gnuMims/grails-app/conf/BootStrap.groovy
===================================================================
--- /branches/TaskRewrite/gnuMims/grails-app/conf/BootStrap.groovy	(revision 55)
+++ /branches/TaskRewrite/gnuMims/grails-app/conf/BootStrap.groovy	(revision 55)
@@ -0,0 +1,7 @@
+class BootStrap {
+
+     def init = { servletContext ->
+     }
+     def destroy = {
+     }
+} 
Index: /branches/TaskRewrite/gnuMims/grails-app/conf/Config.groovy
===================================================================
--- /branches/TaskRewrite/gnuMims/grails-app/conf/Config.groovy	(revision 55)
+++ /branches/TaskRewrite/gnuMims/grails-app/conf/Config.groovy	(revision 55)
@@ -0,0 +1,70 @@
+// locations to search for config files that get merged into the main config
+// config files can either be Java properties files or ConfigSlurper scripts
+
+// grails.config.locations = [ "classpath:${appName}-config.properties",
+//                             "classpath:${appName}-config.groovy",
+//                             "file:${userHome}/.grails/${appName}-config.properties",
+//                             "file:${userHome}/.grails/${appName}-config.groovy"]
+
+// if(System.properties["${appName}.config.location"]) {
+//    grails.config.locations << "file:" + System.properties["${appName}.config.location"]
+// }
+grails.mime.file.extensions = true // enables the parsing of file extensions from URLs into the request format
+grails.mime.types = [ html: ['text/html','application/xhtml+xml'],
+                      xml: ['text/xml', 'application/xml'],
+                      text: 'text-plain',
+                      js: 'text/javascript',
+                      rss: 'application/rss+xml',
+                      atom: 'application/atom+xml',
+                      css: 'text/css',
+                      csv: 'text/csv',
+                      all: '*/*',
+                      json: ['application/json','text/json'],
+                      form: 'application/x-www-form-urlencoded',
+                      multipartForm: 'multipart/form-data'
+                    ]
+// The default codec used to encode data with ${}
+grails.views.default.codec="none" // none, html, base64
+grails.views.gsp.encoding="UTF-8"
+grails.converters.encoding="UTF-8"
+
+// enabled native2ascii conversion of i18n properties files
+grails.enable.native2ascii = true
+
+// set per-environment serverURL stem for creating absolute links
+environments {
+    production {
+        grails.serverURL = "http://www.changeme.com"
+    }
+}
+
+// log4j configuration
+log4j {
+    appender.stdout = "org.apache.log4j.ConsoleAppender"
+    appender.'stdout.layout'="org.apache.log4j.PatternLayout"
+    appender.'stdout.layout.ConversionPattern'='[%r] %c{2} %m%n'
+    appender.stacktraceLog = "org.apache.log4j.FileAppender"
+    appender.'stacktraceLog.layout'="org.apache.log4j.PatternLayout"
+    appender.'stacktraceLog.layout.ConversionPattern'='[%r] %c{2} %m%n'
+    appender.'stacktraceLog.File'="stacktrace.log"
+    rootLogger="error,stdout"
+    logger {
+        grails="error"
+        StackTrace="error,stacktraceLog"
+        org {
+            codehaus.groovy.grails.web.servlet="error"  //  controllers
+            codehaus.groovy.grails.web.pages="error" //  GSP
+            codehaus.groovy.grails.web.sitemesh="error" //  layouts
+            codehaus.groovy.grails."web.mapping.filter"="error" // URL mapping
+            codehaus.groovy.grails."web.mapping"="error" // URL mapping
+            codehaus.groovy.grails.commons="info" // core / classloading
+            codehaus.groovy.grails.plugins="error" // plugins
+            codehaus.groovy.grails.orm.hibernate="error" // hibernate integration
+            springframework="off"
+            hibernate="off"
+        }
+    }
+    additivity.StackTrace=false
+}
+
+
Index: /branches/TaskRewrite/gnuMims/grails-app/conf/DataSource.groovy
===================================================================
--- /branches/TaskRewrite/gnuMims/grails-app/conf/DataSource.groovy	(revision 55)
+++ /branches/TaskRewrite/gnuMims/grails-app/conf/DataSource.groovy	(revision 55)
@@ -0,0 +1,32 @@
+dataSource {
+	pooled = true
+	driverClassName = "org.hsqldb.jdbcDriver"
+	username = "sa"
+	password = ""
+}
+hibernate {
+    cache.use_second_level_cache=true
+    cache.use_query_cache=true
+    cache.provider_class='com.opensymphony.oscache.hibernate.OSCacheProvider'
+}
+// environment specific settings
+environments {
+	development {
+		dataSource {
+			dbCreate = "create-drop" // one of 'create', 'create-drop','update'
+			url = "jdbc:hsqldb:mem:devDB"
+		}
+	}
+	test {
+		dataSource {
+			dbCreate = "update"
+			url = "jdbc:hsqldb:mem:testDb"
+		}
+	}
+	production {
+		dataSource {
+			dbCreate = "update"
+			url = "jdbc:hsqldb:file:prodDb;shutdown=true"
+		}
+	}
+}
Index: /branches/TaskRewrite/gnuMims/grails-app/conf/UrlMappings.groovy
===================================================================
--- /branches/TaskRewrite/gnuMims/grails-app/conf/UrlMappings.groovy	(revision 55)
+++ /branches/TaskRewrite/gnuMims/grails-app/conf/UrlMappings.groovy	(revision 55)
@@ -0,0 +1,10 @@
+class UrlMappings {
+    static mappings = {
+      "/$controller/$action?/$id?"{
+	      constraints {
+			 // apply constraints here
+		  }
+	  }
+	  "500"(view:'/error')
+	}
+}
Index: /branches/TaskRewrite/gnuMims/grails-app/i18n/messages.properties
===================================================================
--- /branches/TaskRewrite/gnuMims/grails-app/i18n/messages.properties	(revision 55)
+++ /branches/TaskRewrite/gnuMims/grails-app/i18n/messages.properties	(revision 55)
@@ -0,0 +1,30 @@
+default.doesnt.match.message=Property [{0}] of class [{1}] with value [{2}] does not match the required pattern [{3}]
+default.invalid.url.message=Property [{0}] of class [{1}] with value [{2}] is not a valid URL
+default.invalid.creditCard.message=Property [{0}] of class [{1}] with value [{2}] is not a valid credit card number
+default.invalid.email.message=Property [{0}] of class [{1}] with value [{2}] is not a valid e-mail address
+default.invalid.range.message=Property [{0}] of class [{1}] with value [{2}] does not fall within the valid range from [{3}] to [{4}]
+default.invalid.size.message=Property [{0}] of class [{1}] with value [{2}] does not fall within the valid size range from [{3}] to [{4}]
+default.invalid.max.message=Property [{0}] of class [{1}] with value [{2}] exceeds maximum value [{3}]
+default.invalid.min.message=Property [{0}] of class [{1}] with value [{2}] is less than minimum value [{3}]
+default.invalid.max.size.message=Property [{0}] of class [{1}] with value [{2}] exceeds the maximum size of [{3}]
+default.invalid.min.size.message=Property [{0}] of class [{1}] with value [{2}] is less than the minimum size of [{3}]
+default.invalid.validator.message=Property [{0}] of class [{1}] with value [{2}] does not pass custom validation
+default.not.inlist.message=Property [{0}] of class [{1}] with value [{2}] is not contained within the list [{3}]
+default.blank.message=Property [{0}] of class [{1}] cannot be blank
+default.not.equal.message=Property [{0}] of class [{1}] with value [{2}] cannot equal [{3}]
+default.null.message=Property [{0}] of class [{1}] cannot be null
+default.not.unique.message=Property [{0}] of class [{1}] with value [{2}] must be unique
+
+default.paginate.prev=Previous
+default.paginate.next=Next
+
+# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
+typeMismatch.java.net.URL=Property {0} must be a valid URL
+typeMismatch.java.net.URI=Property {0} must be a valid URI
+typeMismatch.java.util.Date=Property {0} must be a valid Date
+typeMismatch.java.lang.Double=Property {0} must be a valid number
+typeMismatch.java.lang.Integer=Property {0} must be a valid number
+typeMismatch.java.lang.Long=Property {0} must be a valid number
+typeMismatch.java.lang.Short=Property {0} must be a valid number
+typeMismatch.java.math.BigDecimal=Property {0} must be a valid number
+typeMismatch.java.math.BigInteger=Property {0} must be a valid number
Index: /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_de.properties
===================================================================
--- /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_de.properties	(revision 55)
+++ /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_de.properties	(revision 55)
@@ -0,0 +1,30 @@
+default.doesnt.match.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] entspricht nicht dem vorgegebenen Muster [{3}]
+default.invalid.url.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist keine gÃŒltige URL
+default.invalid.creditCard.message=Das Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist keine gÃŒltige Kreditkartennummer
+default.invalid.email.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist keine gÃŒltige E-Mail Adresse
+default.invalid.range.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist nicht im Wertebereich von [{3}] bis [{4}]
+default.invalid.size.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist nicht im Wertebereich von [{3}] bis [{4}]
+default.invalid.max.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist grÃ¶Ãer als der HÃ¶chstwert von [{3}]
+default.invalid.min.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist kleiner als der Mindestwert von [{3}]
+default.invalid.max.size.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ÃŒbersteigt den HÃ¶chstwert von [{3}]
+default.invalid.min.size.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] unterschreitet den Mindestwert von [{3}]
+default.invalid.validator.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist ungÃŒltig
+default.not.inlist.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist nicht in der Liste [{3}] enthalten.
+default.blank.message=Die Eigenschaft [{0}] des Typs [{1}] darf nicht leer sein
+default.not.equal.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] darf nicht gleich [{3}] sein
+default.null.message=Die Eigenschaft [{0}] des Typs [{1}] darf nicht null sein
+default.not.unique.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] darf nur einmal vorkommen
+
+default.paginate.prev=Vorherige
+default.paginate.next=NÃ€chste
+
+# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
+typeMismatch.java.net.URL=Die Eigenschaft {0} muss eine gÃŒltige URL sein
+typeMismatch.java.net.URI=Die Eigenschaft {0} muss eine gÃŒltige URI sein
+typeMismatch.java.util.Date=Die Eigenschaft {0} muss ein gÃŒltiges Datum sein
+typeMismatch.java.lang.Double=Die Eigenschaft {0} muss eine gÃŒltige Zahl sein
+typeMismatch.java.lang.Integer=Die Eigenschaft {0} muss eine gÃŒltige Zahl sein
+typeMismatch.java.lang.Long=Die Eigenschaft {0} muss eine gÃŒltige Zahl sein
+typeMismatch.java.lang.Short=Die Eigenschaft {0} muss eine gÃŒltige Zahl sein
+typeMismatch.java.math.BigDecimal=Die Eigenschaft {0} muss eine gÃŒltige Zahl sein
+typeMismatch.java.math.BigInteger=Die Eigenschaft {0} muss eine gÃŒltige Zahl sein
Index: /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_es.properties
===================================================================
--- /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_es.properties	(revision 55)
+++ /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_es.properties	(revision 55)
@@ -0,0 +1,30 @@
+default.doesnt.match.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no corresponde al patrÃ³n [{3}]
+default.invalid.url.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no es una URL vÃ¡lida
+default.invalid.creditCard.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no es un nÃºmero de tarjeta de crÃ©dito vÃ¡lida
+default.invalid.email.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no es una direcciÃ³n de correo electrÃ³nico vÃ¡lida
+default.invalid.range.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no entra en el rango vÃ¡lido de [{3}] a [{4}]
+default.invalid.size.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no entra en el tamaÃ±o vÃ¡lido de [{3}] a [{4}]
+default.invalid.max.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] excede el valor mÃ¡ximo [{3}]
+default.invalid.min.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] es menos que el valor mÃ­nimo [{3}]
+default.invalid.max.size.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] excede el tamaÃ±o mÃ¡ximo de [{3}]
+default.invalid.min.size.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] es menor que el tamaÃ±o mÃ­nimo de [{3}]
+default.invalid.validator.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no es vÃ¡lido
+default.not.inlist.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no esta contenido dentro de la lista [{3}]
+default.blank.message=La propiedad [{0}] de la clase [{1}] no puede ser vacÃ­a
+default.not.equal.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no puede igualar a [{3}]
+default.null.message=La propiedad [{0}] de la clase [{1}] no puede ser nulo
+default.not.unique.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] debe ser Ãºnica
+
+default.paginate.prev=Anterior
+default.paginate.next=Siguiente
+
+# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
+typeMismatch.java.net.URL=La propiedad {0} debe ser una URL vÃ¡lida
+typeMismatch.java.net.URI=La propiedad {0} debe ser una URI vÃ¡lida
+typeMismatch.java.util.Date=La propiedad {0} debe ser una fecha vÃ¡lida
+typeMismatch.java.lang.Double=La propiedad {0} debe ser un nÃºmero vÃ¡lido
+typeMismatch.java.lang.Integer=La propiedad {0} debe ser un nÃºmero vÃ¡lido
+typeMismatch.java.lang.Long=La propiedad {0} debe ser un nÃºmero vÃ¡lido
+typeMismatch.java.lang.Short=La propiedad {0} debe ser un nÃºmero vÃ¡lido
+typeMismatch.java.math.BigDecimal=La propiedad {0} debe ser un nÃºmero vÃ¡lido
+typeMismatch.java.math.BigInteger=La propiedad {0} debe ser un nÃºmero vÃ¡lido
Index: /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_fr.properties
===================================================================
--- /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_fr.properties	(revision 55)
+++ /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_fr.properties	(revision 55)
@@ -0,0 +1,19 @@
+default.doesnt.match.message=La propriÃ©tÃ© [{0}] de la classe [{1}] avec la valeur [{2}] ne correspond pas au pattern [{3}]
+default.invalid.url.message=La propriÃ©tÃ© [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas une URL valide
+default.invalid.creditCard.message=La propriÃ©tÃ© [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas un numÃ©ro de carte de crÃ©dit valide
+default.invalid.email.message=La propriÃ©tÃ© [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas une adresse e-mail valide
+default.invalid.range.message=La propriÃ©tÃ© [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas contenue dans l'intervalle [{3}] Ã  [{4}]
+default.invalid.size.message=La propriÃ©tÃ© [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas contenue dans l'intervalle [{3}] Ã  [{4}]
+default.invalid.max.message=La propriÃ©tÃ© [{0}] de la classe [{1}] avec la valeur [{2}] est supÃ©rieure Ã  la valeur maximum [{3}]
+default.invalid.min.message=La propriÃ©tÃ© [{0}] de la classe [{1}] avec la valeur [{2}] est infÃ©rieure Ã  la valeur minimum [{3}]
+default.invalid.max.size.message=La propriÃ©tÃ© [{0}] de la classe [{1}] avec la valeur [{2}] est supÃ©rieure Ã  la valeur maximum [{3}]
+default.invalid.min.size.message=La propriÃ©tÃ© [{0}] de la classe [{1}] avec la valeur [{2}] est infÃ©rieure Ã  la valeur minimum [{3}]
+default.invalid.validator.message=La propriÃ©tÃ© [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas valide
+default.not.inlist.message=La propriÃ©tÃ© [{0}] de la classe [{1}] avec la valeur [{2}] ne fait pas partie de la liste [{3}]
+default.blank.message=La propriÃ©tÃ© [{0}] de la classe [{1}] ne peut pas Ãªtre vide
+default.not.equal.message=La propriÃ©tÃ© [{0}] de la classe [{1}] avec la valeur [{2}] ne peut pas Ãªtre Ã©gale Ã  [{3}]
+default.null.message=La propriÃ©tÃ© [{0}] de la classe [{1}] ne peut pas Ãªtre nulle
+default.not.unique.message=La propriÃ©tÃ© [{0}] de la classe [{1}] avec la valeur [{2}] doit Ãªtre unique
+
+default.paginate.prev=PrÃ©cÃ©dent
+default.paginate.next=Suivant
Index: /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_it.properties
===================================================================
--- /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_it.properties	(revision 55)
+++ /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_it.properties	(revision 55)
@@ -0,0 +1,19 @@
+default.doesnt.match.message=La proprietÃ  [{0}] della classe [{1}] con valore [{2}] non corrisponde al pattern [{3}]
+default.invalid.url.message=La proprietÃ  [{0}] della classe [{1}] con valore [{2}] non Ãš un URL valido
+default.invalid.creditCard.message=La proprietÃ  [{0}] della classe [{1}] con valore [{2}] non Ãš un numero di carta di credito valido
+default.invalid.email.message=La proprietÃ  [{0}] della classe [{1}] con valore [{2}] non Ãš un indirizzo email valido
+default.invalid.range.message=La proprietÃ  [{0}] della classe [{1}] con valore [{2}] non rientra nell'intervallo valido da [{3}] a [{4}]
+default.invalid.size.message=La proprietÃ  [{0}] della classe [{1}] con valore [{2}] non rientra nell'intervallo di dimensioni valide da [{3}] a [{4}]
+default.invalid.max.message=La proprietÃ  [{0}] della classe [{1}] con valore [{2}] Ãš maggiore di [{3}]
+default.invalid.min.message=La proprietÃ  [{0}] della classe [{1}] con valore [{2}] Ãš minore di [{3}]
+default.invalid.max.size.message=La proprietÃ  [{0}] della classe [{1}] con valore [{2}] Ãš maggiore di [{3}]
+default.invalid.min.size.message=La proprietÃ  [{0}] della classe [{1}] con valore [{2}] Ãš minore di [{3}]
+default.invalid.validator.message=La proprietÃ  [{0}] della classe [{1}] con valore [{2}] non Ãš valida
+default.not.inlist.message=La proprietÃ  [{0}] della classe [{1}] con valore [{2}] non Ãš contenuta nella lista [{3}]
+default.blank.message=La proprietÃ  [{0}] della classe [{1}] non puÃ² essere vuota
+default.not.equal.message=La proprietÃ  [{0}] della classe [{1}] con valore [{2}] non puÃ² essere uguale a [{3}]
+default.null.message=La proprietÃ  [{0}] della classe [{1}] non puÃ² essere null
+default.not.unique.message=La proprietÃ  [{0}] della classe [{1}] con valore [{2}] deve essere unica
+
+default.paginate.prev=Precedente
+default.paginate.next=Successivo
Index: /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_ja.properties
===================================================================
--- /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_ja.properties	(revision 55)
+++ /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_ja.properties	(revision 55)
@@ -0,0 +1,22 @@
+default.doesnt.match.message=ã¯ã©ã¹[{1}]ãã­ããã£[{0}]ã®å€[{2}]ã¯ã[{3}]ãã¿ãŒã³ãšäžèŽããŠããŸããã
+default.invalid.url.message=ã¯ã©ã¹[{1}]ãã­ããã£[{0}]ã®å€[{2}]ã¯ãURLã§ã¯ãããŸããã
+default.invalid.creditCard.message=ã¯ã©ã¹[{1}]ãã­ããã£[{0}]ã®å€[{2}]ã¯ãæ­£åœãªã¯ã¬ãžããã«ãŒãçªå·ã§ã¯ãããŸããã
+default.invalid.email.message=ã¯ã©ã¹[{1}]ãã­ããã£[{0}]ã®å€[{2}]ã¯ãã¡ãŒã«ã¢ãã¬ã¹ã§ã¯ãããŸããã
+default.invalid.range.message=ã¯ã©ã¹[{1}]ãã­ããã£[{0}]ã®å€[{2}]ã¯ã[{3}]ãã[{4}]ç¯å²å
+ãæå®ããŠãã ããã
+default.invalid.size.message=ã¯ã©ã¹[{1}]ãã­ããã£[{0}]ã®å€[{2}]ã¯ã[{3}]ãã[{4}]ä»¥å
+ãæå®ããŠãã ããã
+default.invalid.max.message=ã¯ã©ã¹[{1}]ãã­ããã£[{0}]ã®å€[{2}]ã¯ãæå€§å€[{3}]ããå€§ããã§ãã
+default.invalid.min.message=ã¯ã©ã¹[{1}]ãã­ããã£[{0}]ã®å€[{2}]ã¯ãæå°å€[{3}]ããå°ããã§ãã
+default.invalid.max.size.message=ã¯ã©ã¹[{1}]ãã­ããã£[{0}]ã®å€[{2}]ã¯ãæå€§å€[{3}]ããå€§ããã§ãã
+default.invalid.min.size.message=ã¯ã©ã¹[{1}]ãã­ããã£[{0}]ã®å€[{2}]ã¯ãæå°å€[{3}]ããå°ããã§ãã
+default.invalid.validator.message=ã¯ã©ã¹[{1}]ãã­ããã£[{0}]ã®å€[{2}]ã¯ãã«ã¹ã¿ã ããªããŒã·ã§ã³ãééã§ããŸããã
+default.not.inlist.message=ã¯ã©ã¹[{1}]ãã­ããã£[{0}]ã®å€[{2}]ã¯ã[{3}]ãªã¹ãå
+ã«å­åšããŸããã
+default.blank.message=[{1}]ã¯ã©ã¹ã®ãã­ããã£[{0}]ã®ç©ºçœã¯èš±å¯ãããŸããã
+default.not.equal.message=ã¯ã©ã¹[{1}]ãã­ããã£[{0}]ã®å€[{2}]ã¯ã[{3}]ãšåç­ã§ã¯ãããŸããã
+default.null.message=[{1}]ã¯ã©ã¹ã®ãã­ããã£[{0}]ã«nullã¯èš±å¯ãããŸããã
+default.not.unique.message=ã¯ã©ã¹[{1}]ãã­ããã£[{0}]ã®å€[{2}]ã¯æ¢ã«äœ¿çšãããŠããŸãã
+
+default.paginate.prev=æ»ã
+default.paginate.next=æ¬¡ãž
Index: /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_nl.properties
===================================================================
--- /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_nl.properties	(revision 55)
+++ /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_nl.properties	(revision 55)
@@ -0,0 +1,30 @@
+default.doesnt.match.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] komt niet overeen met het vereiste patroon [{3}]
+default.invalid.url.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is geen geldige URL
+default.invalid.creditCard.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is geen geldig credit card nummer
+default.invalid.email.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is geen geldig e-mailadres
+default.invalid.range.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] valt niet in de geldige waardenreeks van [{3}] tot [{4}]
+default.invalid.size.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] valt niet in de geldige grootte van [{3}] tot [{4}]
+default.invalid.max.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] overschrijdt de maximumwaarde [{3}]
+default.invalid.min.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is minder dan de minimumwaarde [{3}]
+default.invalid.max.size.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] overschrijdt de maximumgrootte van [{3}]
+default.invalid.min.size.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is minder dan mainimumgrootte van [{3}]
+default.invalid.validator.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is niet geldig
+default.not.inlist.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] komt niet voor in de lijst [{3}]
+default.blank.message=Attribuut [{0}] van entiteit [{1}] mag niet leeg zijn
+default.not.equal.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] mag niet gelijk zijn aan [{3}]
+default.null.message=Attribuut [{0}] van entiteit [{1}] mag niet leeg zijn
+default.not.unique.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] moet uniek zijn
+
+default.paginate.prev=Vorige
+default.paginate.next=Volgende
+
+# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
+typeMismatch.java.net.URL=Attribuut {0} is geen geldige URL
+typeMismatch.java.net.URI=Attribuut {0} is geen geldige URI
+typeMismatch.java.util.Date=Attribuut {0} is geen geldige datum
+typeMismatch.java.lang.Double=Attribuut {0} is geen geldig nummer
+typeMismatch.java.lang.Integer=Attribuut {0} is geen geldig nummer
+typeMismatch.java.lang.Long=Attribuut {0} is geen geldig nummer
+typeMismatch.java.lang.Short=Attribuut {0} is geen geldig nummer
+typeMismatch.java.math.BigDecimal=Attribuut {0} is geen geldig nummer
+typeMismatch.java.math.BigInteger=Attribuut {0} is geen geldig nummer
Index: /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_pt_BR.properties
===================================================================
--- /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_pt_BR.properties	(revision 55)
+++ /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_pt_BR.properties	(revision 55)
@@ -0,0 +1,34 @@
+#
+# Translated by Lucas Teixeira - lucastex@gmail.com
+#
+
+default.doesnt.match.message=O campo [{0}] da classe [{1}] com o valor [{2}] nÃ£o atende ao padrÃ£o definido [{3}]
+default.invalid.url.message=O campo [{0}] da classe [{1}] com o valor [{2}] nÃ£o Ã© uma URL vÃ¡lida
+default.invalid.creditCard.message=O campo [{0}] da classe [{1}] com o valor [{2}] nÃ£o Ã© um nÃºmero vÃ¡lido de cartÃ£o de crÃ©dito
+default.invalid.email.message=O campo [{0}] da classe [{1}] com o valor [{2}] nÃ£o Ã© um endereÃ§o de email vÃ¡lido.
+default.invalid.range.message=O campo [{0}] da classe [{1}] com o valor [{2}] nÃ£o estÃ¡ entre a faixa de valores vÃ¡lida de [{3}] atÃ© [{4}]
+default.invalid.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] nÃ£o estÃ¡ na faixa de tamanho vÃ¡lida de [{3}] atÃ© [{4}]
+default.invalid.max.message=O campo [{0}] da classe [{1}] com o valor [{2}] ultrapass o valor mÃ¡ximo [{3}]
+default.invalid.min.message=O campo [{0}] da classe [{1}] com o valor [{2}] nÃ£o atinge o valor mÃ­nimo [{3}]
+default.invalid.max.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] ultrapassa o tamanho mÃ¡ximo de [{3}]
+default.invalid.min.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] nÃ£o atinge o tamanho mÃ­nimo de [{3}]
+default.invalid.validator.message=O campo [{0}] da classe [{1}] com o valor [{2}] nÃ£o passou na validaÃ§Ã£o
+default.not.inlist.message=O campo [{0}] da classe [{1}] com o valor [{2}] nÃ£o Ã© um valor dentre os permitidos na lista [{3}]
+default.blank.message=O campo [{0}] da classe [{1}] nÃ£o pode ficar em branco
+default.not.equal.message=O campo [{0}] da classe [{1}] com o valor [{2}] nÃ£o pode ser igual a [{3}]
+default.null.message=O campo [{0}] da classe [{1}] nÃ£o pode ser vazia
+default.not.unique.message=O campo [{0}] da classe [{1}] com o valor [{2}] deve ser Ãºnico
+
+default.paginate.prev=Anterior
+default.paginate.next=PrÃ³ximo
+
+# Mensagens de erro em atribuiÃ§Ã£o de valores. Use "typeMismatch.$className.$propertyName" para customizar (eg typeMismatch.Book.author)
+typeMismatch.java.net.URL=O campo {0} deve ser uma URL vÃ¡lida.
+typeMismatch.java.net.URI=O campo {0} deve ser uma URI vÃ¡lida.
+typeMismatch.java.util.Date=O campo {0} deve ser uma data vÃ¡lida
+typeMismatch.java.lang.Double=O campo {0} deve ser um nÃºmero vÃ¡lido.
+typeMismatch.java.lang.Integer=O campo {0} deve ser um nÃºmero vÃ¡lido.
+typeMismatch.java.lang.Long=O campo {0} deve ser um nÃºmero vÃ¡lido.
+typeMismatch.java.lang.Short=O campo {0} deve ser um nÃºmero vÃ¡lido.
+typeMismatch.java.math.BigDecimal=O campo {0} deve ser um nÃºmero vÃ¡lido.
+typeMismatch.java.math.BigInteger=O campo {0} deve ser um nÃºmero vÃ¡lido.
Index: /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_ru.properties
===================================================================
--- /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_ru.properties	(revision 55)
+++ /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_ru.properties	(revision 55)
@@ -0,0 +1,33 @@
+default.doesnt.match.message=ÐÐœÐ°ÑÐµÐœÐžÐµ [{2}] Ð¿ÐŸÐ»Ñ [{0}] ÐºÐ»Ð°ÑÑÐ° [{1}] ÐœÐµ ÑÐŸÐŸÑÐ²ÐµÑÑÑÐ²ÑÐµÑ ÐŸÐ±ÑÐ°Ð·ÑÑ [{3}]
+default.invalid.url.message=ÐÐœÐ°ÑÐµÐœÐžÐµ [{2}] Ð¿ÐŸÐ»Ñ [{0}] ÐºÐ»Ð°ÑÑÐ° [{1}] ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐŒ URL-Ð°ÐŽÑÐµÑÐŸÐŒ
+default.invalid.creditCard.message=ÐÐœÐ°ÑÐµÐœÐžÐµ [{2}] Ð¿ÐŸÐ»Ñ [{0}] ÐºÐ»Ð°ÑÑÐ° [{1}] ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐŒ ÐœÐŸÐŒÐµÑÐŸÐŒ ÐºÑÐµÐŽÐžÑÐœÐŸÐ¹ ÐºÐ°ÑÑÑ
+default.invalid.email.message=ÐÐœÐ°ÑÐµÐœÐžÐµ [{2}] Ð¿ÐŸÐ»Ñ [{0}] ÐºÐ»Ð°ÑÑÐ° [{1}] ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐŒ e-mail Ð°ÐŽÑÐµÑÐŸÐŒ
+default.invalid.range.message=ÐÐœÐ°ÑÐµÐœÐžÐµ [{2}] Ð¿ÐŸÐ»Ñ [{0}] ÐºÐ»Ð°ÑÑÐ° [{1}] ÐœÐµ Ð¿ÐŸÐ¿Ð°ÐŽÐ°ÐµÑ Ð² ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐ¹ ÐžÐœÑÐµÑÐ²Ð°Ð» ÐŸÑ [{3}] ÐŽÐŸ [{4}]
+default.invalid.size.message=Ð Ð°Ð·ÐŒÐµÑ Ð¿ÐŸÐ»Ñ [{0}] ÐºÐ»Ð°ÑÑÐ° [{1}] (Ð·ÐœÐ°ÑÐµÐœÐžÐµ: [{2}]) ÐœÐµ Ð¿ÐŸÐ¿Ð°ÐŽÐ°ÐµÑ Ð² ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐ¹ ÐžÐœÑÐµÑÐ²Ð°Ð» ÐŸÑ [{3}] ÐŽÐŸ [{4}]
+default.invalid.max.message=ÐÐœÐ°ÑÐµÐœÐžÐµ [{2}] Ð¿ÐŸÐ»Ñ [{0}] ÐºÐ»Ð°ÑÑÐ° [{1}] Ð±ÐŸÐ»ÑÑÐµ ÑÐµÐŒ ÐŒÐ°ÐºÑÐžÐŒÐ°Ð»ÑÐœÐŸ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÐŸÐµ Ð·ÐœÐ°ÑÐµÐœÐžÐµ [{3}]
+default.invalid.min.message=ÐÐœÐ°ÑÐµÐœÐžÐµ [{2}] Ð¿ÐŸÐ»Ñ [{0}] ÐºÐ»Ð°ÑÑÐ° [{1}] ÐŒÐµÐœÑÑÐµ ÑÐµÐŒ ÐŒÐžÐœÐžÐŒÐ°Ð»ÑÐœÐŸ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÐŸÐµ Ð·ÐœÐ°ÑÐµÐœÐžÐµ [{3}]
+default.invalid.max.size.message=Ð Ð°Ð·ÐŒÐµÑ Ð¿ÐŸÐ»Ñ [{0}] ÐºÐ»Ð°ÑÑÐ° [{1}] (Ð·ÐœÐ°ÑÐµÐœÐžÐµ: [{2}]) Ð±ÐŸÐ»ÑÑÐµ ÑÐµÐŒ ÐŒÐ°ÐºÑÐžÐŒÐ°Ð»ÑÐœÐŸ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐ¹ ÑÐ°Ð·ÐŒÐµÑ [{3}]
+default.invalid.min.size.message=Ð Ð°Ð·ÐŒÐµÑ Ð¿ÐŸÐ»Ñ [{0}] ÐºÐ»Ð°ÑÑÐ° [{1}] (Ð·ÐœÐ°ÑÐµÐœÐžÐµ: [{2}]) ÐŒÐµÐœÑÑÐµ ÑÐµÐŒ ÐŒÐžÐœÐžÐŒÐ°Ð»ÑÐœÐŸ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐ¹ ÑÐ°Ð·ÐŒÐµÑ [{3}]
+default.invalid.validator.message=ÐÐœÐ°ÑÐµÐœÐžÐµ [{2}] Ð¿ÐŸÐ»Ñ [{0}] ÐºÐ»Ð°ÑÑÐ° [{1}] ÐœÐµ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÐŸ
+default.not.inlist.message=ÐÐœÐ°ÑÐµÐœÐžÐµ [{2}] Ð¿ÐŸÐ»Ñ [{0}] ÐºÐ»Ð°ÑÑÐ° [{1}] ÐœÐµ Ð¿ÐŸÐ¿Ð°ÐŽÐ°ÐµÑ Ð² ÑÐ¿ÐžÑÐŸÐº ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÑ
+ Ð·ÐœÐ°ÑÐµÐœÐžÐ¹ [{3}]
+default.blank.message=ÐÐŸÐ»Ðµ [{0}] ÐºÐ»Ð°ÑÑÐ° [{1}] ÐœÐµ ÐŒÐŸÐ¶ÐµÑ Ð±ÑÑÑ Ð¿ÑÑÑÑÐŒ
+default.not.equal.message=ÐÐœÐ°ÑÐµÐœÐžÐµ [{2}] Ð¿ÐŸÐ»Ñ [{0}] ÐºÐ»Ð°ÑÑÐ° [{1}] ÐœÐµ ÐŒÐŸÐ¶ÐµÑ Ð±ÑÑÑ ÑÐ°Ð²ÐœÐŸ [{3}]
+default.null.message=ÐÐŸÐ»Ðµ [{0}] ÐºÐ»Ð°ÑÑÐ° [{1}] ÐœÐµ ÐŒÐŸÐ¶ÐµÑ ÐžÐŒÐµÑÑ Ð·ÐœÐ°ÑÐµÐœÐžÐµ null
+default.not.unique.message=ÐÐœÐ°ÑÐµÐœÐžÐµ [{2}] Ð¿ÐŸÐ»Ñ [{0}] ÐºÐ»Ð°ÑÑÐ° [{1}] ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÑÐœÐžÐºÐ°Ð»ÑÐœÑÐŒ
+
+default.paginate.prev=ÐÑÐµÐŽÑÐŽÑÑÐ°Ñ ÑÑÑÐ°ÐœÐžÑÐ°
+default.paginate.next=Ð¡Ð»ÐµÐŽÑÑÑÐ°Ñ ÑÑÑÐ°ÐœÐžÑÐ°
+
+# ÐÑÐžÐ±ÐºÐž Ð¿ÑÐž Ð¿ÑÐžÑÐ²ÐŸÐµÐœÐžÐž ÐŽÐ°ÐœÐœÑÑ
+. ÐÐ»Ñ ÑÐŸÑÐœÐŸÐ¹ ÐœÐ°ÑÑÑÐŸÐ¹ÐºÐž ÐŽÐ»Ñ Ð¿ÐŸÐ»ÐµÐ¹ ÐºÐ»Ð°ÑÑÐŸÐ² ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÐ¹ÑÐµ
+# ÑÐŸÑÐŒÐ°Ñ "typeMismatch.$className.$propertyName" (ÐœÐ°Ð¿ÑÐžÐŒÐµÑ, typeMismatch.Book.author)
+typeMismatch.java.net.URL=ÐÐœÐ°ÑÐµÐœÐžÐµ Ð¿ÐŸÐ»Ñ {0} ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐŒ URL
+typeMismatch.java.net.URI=ÐÐœÐ°ÑÐµÐœÐžÐµ Ð¿ÐŸÐ»Ñ {0} ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐŒ URI
+typeMismatch.java.util.Date=ÐÐœÐ°ÑÐµÐœÐžÐµ Ð¿ÐŸÐ»Ñ {0} ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÐŸÐ¹ ÐŽÐ°ÑÐŸÐ¹
+typeMismatch.java.lang.Double=ÐÐœÐ°ÑÐµÐœÐžÐµ Ð¿ÐŸÐ»Ñ {0} ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐŒ ÑÐžÑÐ»ÐŸÐŒ
+typeMismatch.java.lang.Integer=ÐÐœÐ°ÑÐµÐœÐžÐµ Ð¿ÐŸÐ»Ñ {0} ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐŒ ÑÐžÑÐ»ÐŸÐŒ
+typeMismatch.java.lang.Long=ÐÐœÐ°ÑÐµÐœÐžÐµ Ð¿ÐŸÐ»Ñ {0} ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐŒ ÑÐžÑÐ»ÐŸÐŒ
+typeMismatch.java.lang.Short=ÐÐœÐ°ÑÐµÐœÐžÐµ Ð¿ÐŸÐ»Ñ {0} ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐŒ ÑÐžÑÐ»ÐŸÐŒ
+typeMismatch.java.math.BigDecimal=ÐÐœÐ°ÑÐµÐœÐžÐµ Ð¿ÐŸÐ»Ñ {0} ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐŒ ÑÐžÑÐ»ÐŸÐŒ
+typeMismatch.java.math.BigInteger=ÐÐœÐ°ÑÐµÐœÐžÐµ Ð¿ÐŸÐ»Ñ {0} ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐŒ ÑÐžÑÐ»ÐŸÐŒ
Index: /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_th.properties
===================================================================
--- /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_th.properties	(revision 55)
+++ /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_th.properties	(revision 55)
@@ -0,0 +1,30 @@
+default.doesnt.match.message=àžàžžàžàžªàž¡àžàž±àžàžŽ [{0}] àžàž­àžàžàž¥àž²àžª [{1}] àžàž¶à¹àžàž¡àžµàžà¹àž²à¹àžà¹àž [{2}] à¹àž¡à¹àžàž¹àžàžà¹àž­àžàžàž²àž¡àž£àž¹àžà¹àžàžàžàžµà¹àžàž³àž«àžàžà¹àž§à¹à¹àž [{3}]
+default.invalid.url.message=àžàžžàžàžªàž¡àžàž±àžàžŽ [{0}] àžàž­àžàžàž¥àž²àžª [{1}] àžàž¶à¹àžàž¡àžµàžà¹àž²à¹àžà¹àž [{2}] à¹àž¡à¹àžàž¹àžàžà¹àž­àžàžàž²àž¡àž£àž¹àžà¹àžàž URL
+default.invalid.creditCard.message=àžàžžàžàžªàž¡àžàž±àžàžŽ [{0}] àžàž­àžàžàž¥àž²àžª [{1}] àžàž¶à¹àžàž¡àžµàžà¹àž²à¹àžà¹àž [{2}] à¹àž¡à¹àžàž¹àžàžà¹àž­àžàžàž²àž¡àž£àž¹àžà¹àžàžàž«àž¡àž²àž¢à¹àž¥àžàžàž±àžàž£à¹àžàž£àžàžŽàž
+default.invalid.email.message=àžàžžàžàžªàž¡àžàž±àžàžŽ [{0}] àžàž­àžàžàž¥àž²àžª [{1}] àžàž¶à¹àžàž¡àžµàžà¹àž²à¹àžà¹àž [{2}] à¹àž¡à¹àžàž¹àžàžà¹àž­àžàžàž²àž¡àž£àž¹àžà¹àžàžàž­àžµà¹àž¡àž¥à¹
+default.invalid.range.message=àžàžžàžàžªàž¡àžàž±àžàžŽ [{0}] àžàž­àžàžàž¥àž²àžª [{1}] àžàž¶à¹àžàž¡àžµàžà¹àž²à¹àžà¹àž [{2}] à¹àž¡à¹à¹àžà¹àž¡àžµàžà¹àž²àžàžµà¹àžàž¹àžàžà¹àž­àžà¹àžàžà¹àž§àžàžàž²àž [{3}] àžàž¶àž [{4}]
+default.invalid.size.message=àžàžžàžàžªàž¡àžàž±àžàžŽ [{0}] àžàž­àžàžàž¥àž²àžª [{1}] àžàž¶à¹àžàž¡àžµàžà¹àž²à¹àžà¹àž [{2}] à¹àž¡à¹à¹àžà¹àž¡àžµàžàžàž²àžàžàžµà¹àžàž¹àžàžà¹àž­àžà¹àžàžà¹àž§àžàžàž²àž [{3}] àžàž¶àž [{4}]
+default.invalid.max.message=àžàžžàžàžªàž¡àžàž±àžàžŽ [{0}] àžàž­àžàžàž¥àž²àžª [{1}] àžàž¶à¹àžàž¡àžµàžà¹àž²à¹àžà¹àž [{2}] àž¡àžµàžà¹àž²à¹àžàžŽàžàžàž§à¹àž²àžà¹àž²àž¡àž²àžàžªàžžàž [{3}]
+default.invalid.min.message=àžàžžàžàžªàž¡àžàž±àžàžŽ [{0}] àžàž­àžàžàž¥àž²àžª [{1}] àžàž¶à¹àžàž¡àžµàžà¹àž²à¹àžà¹àž [{2}] àž¡àžµàžà¹àž²àžà¹àž­àž¢àžàž§à¹àž²àžà¹àž²àžà¹àž³àžªàžžàž  [{3}]
+default.invalid.max.size.message=àžàžžàžàžªàž¡àžàž±àžàžŽ [{0}] àžàž­àžàžàž¥àž²àžª [{1}] àžàž¶à¹àžàž¡àžµàžà¹àž²à¹àžà¹àž [{2}] àž¡àžµàžàžàž²àžà¹àžàžŽàžàžàž§à¹àž²àžàžàž²àžàž¡àž²àžàžªàžžàžàžàž­àž [{3}]
+default.invalid.min.size.message=àžàžžàžàžªàž¡àžàž±àžàžŽ [{0}] àžàž­àžàžàž¥àž²àžª [{1}] àžàž¶à¹àžàž¡àžµàžà¹àž²à¹àžà¹àž [{2}] àž¡àžµàžàžàž²àžàžà¹àž³àžàž§à¹àž²àžàžàž²àžàžà¹àž³àžªàžžàžàžàž­àž  [{3}]
+default.invalid.validator.message=àžàžžàžàžªàž¡àžàž±àžàžŽ [{0}] àžàž­àžàžàž¥àž²àžª [{1}] àžàž¶à¹àžàž¡àžµàžà¹àž²à¹àžà¹àž [{2}] à¹àž¡à¹àžà¹àž²àžàžàž²àž£àžàž§àžàžªàž­àžàžà¹àž²àžàžµà¹àžàž±à¹àžàžàž¶à¹àž
+default.not.inlist.message=àžàžžàžàžªàž¡àžàž±àžàžŽ [{0}] àžàž­àžàžàž¥àž²àžª [{1}] àžàž¶à¹àžàž¡àžµàžà¹àž²à¹àžà¹àž [{2}] à¹àž¡à¹à¹àžà¹àž­àž¢àž¹à¹à¹àžàž£àž²àž¢àžàž²àž£àžà¹àž­à¹àžàžàžµà¹  [{3}]
+default.blank.message=àžàžžàžàžªàž¡àžàž±àžàžŽ [{0}] àžàž­àžàžàž¥àž²àžª [{1}] à¹àž¡à¹àžªàž²àž¡àž²àž£àžà¹àžà¹àžàžà¹àž²àž§à¹àž²àžà¹àžà¹
+default.not.equal.message=àžàžžàžàžªàž¡àžàž±àžàžŽ [{0}] àžàž­àžàžàž¥àž²àžª [{1}] àžàž¶à¹àžàž¡àžµàžà¹àž²à¹àžà¹àž [{2}] à¹àž¡à¹àžªàž²àž¡àž²àž£àžà¹àžà¹àž²àžàž±àž [{3}] à¹àžà¹
+default.null.message=àžàžžàžàžªàž¡àžàž±àžàžŽ [{0}] àžàž­àžàžàž¥àž²àžª [{1}] à¹àž¡à¹àžªàž²àž¡àž²àž£àžà¹àžà¹àž null à¹àžà¹
+default.not.unique.message=àžàžžàžàžªàž¡àžàž±àžàžŽ [{0}] àžàž­àžàžàž¥àž²àžª [{1}] àžàž¶à¹àžàž¡àžµàžà¹àž²à¹àžà¹àž [{2}] àžàž°àžà¹àž­àžà¹àž¡à¹àžà¹àž³ (unique)
+
+default.paginate.prev=àžà¹àž­àžàž«àžà¹àž²
+default.paginate.next=àžàž±àžà¹àž
+
+# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
+typeMismatch.java.net.URL=àžàžžàžàžªàž¡àžàž±àžàžŽ '{0}' àžàž°àžà¹àž­àžà¹àžà¹àžàžà¹àž² URL àžàžµà¹àžàž¹àžàžà¹àž­àž
+typeMismatch.java.net.URI=àžàžžàžàžªàž¡àžàž±àžàžŽ '{0}' àžàž°àžà¹àž­àžà¹àžà¹àžàžà¹àž² URI àžàžµà¹àžàž¹àžàžà¹àž­àž
+typeMismatch.java.util.Date=àžàžžàžàžªàž¡àžàž±àžàžŽ '{0}' àžàž°àžà¹àž­àžàž¡àžµàžà¹àž²à¹àžà¹àžàž§àž±àžàžàžµà¹
+typeMismatch.java.lang.Double=àžàžžàžàžªàž¡àžàž±àžàžŽ '{0}' àžàž°àžà¹àž­àžàž¡àžµàžà¹àž²à¹àžà¹àžàžàž³àžàž§àžàžàž£àž°à¹àž àž Double
+typeMismatch.java.lang.Integer=àžàžžàžàžªàž¡àžàž±àžàžŽ '{0}' àžàž°àžà¹àž­àžàž¡àžµàžà¹àž²à¹àžà¹àžàžàž³àžàž§àžàžàž£àž°à¹àž àž Integer
+typeMismatch.java.lang.Long=àžàžžàžàžªàž¡àžàž±àžàžŽ '{0}' àžàž°àžà¹àž­àžàž¡àžµàžà¹àž²à¹àžà¹àžàžàž³àžàž§àžàžàž£àž°à¹àž àž Long
+typeMismatch.java.lang.Short=àžàžžàžàžªàž¡àžàž±àžàžŽ '{0}' àžàž°àžà¹àž­àžàž¡àžµàžà¹àž²à¹àžà¹àžàžàž³àžàž§àžàžàž£àž°à¹àž àž Short
+typeMismatch.java.math.BigDecimal=àžàžžàžàžªàž¡àžàž±àžàžŽ '{0}' àžàž°àžà¹àž­àžàž¡àžµàžà¹àž²à¹àžà¹àžàžàž³àžàž§àžàžàž£àž°à¹àž àž BigDecimal
+typeMismatch.java.math.BigInteger=àžàžžàžàžªàž¡àžàž±àžàžŽ '{0}' àžàž°àžà¹àž­àžàž¡àžµàžà¹àž²à¹àžà¹àžàžàž³àžàž§àžàžàž£àž°à¹àž àž BigInteger
Index: /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_zh_CN.properties
===================================================================
--- /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_zh_CN.properties	(revision 55)
+++ /branches/TaskRewrite/gnuMims/grails-app/i18n/messages_zh_CN.properties	(revision 55)
@@ -0,0 +1,18 @@
+default.blank.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u4E0D\u80FD\u4E3A\u7A7A
+default.doesnt.match.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0E\u5B9A\u4E49\u7684\u6A21\u5F0F [{3}]\u4E0D\u5339\u914D
+default.invalid.creditCard.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u4FE1\u7528\u5361\u53F7
+default.invalid.email.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u662F\u4E00\u4E2A\u5408\u6CD5\u7684\u7535\u5B50\u90AE\u4EF6\u5730\u5740
+default.invalid.max.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u6BD4\u6700\u5927\u503C [{3}]\u8FD8\u5927
+default.invalid.max.size.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u7684\u5927\u5C0F\u6BD4\u6700\u5927\u503C [{3}]\u8FD8\u5927
+default.invalid.min.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u6BD4\u6700\u5C0F\u503C [{3}]\u8FD8\u5C0F
+default.invalid.min.size.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u7684\u5927\u5C0F\u6BD4\u6700\u5C0F\u503C [{3}]\u8FD8\u5C0F
+default.invalid.range.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u5728\u5408\u6CD5\u7684\u8303\u56F4\u5185( [{3}] \uFF5E [{4}] )
+default.invalid.size.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u7684\u5927\u5C0F\u4E0D\u5728\u5408\u6CD5\u7684\u8303\u56F4\u5185( [{3}] \uFF5E [{4}] )
+default.invalid.url.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u662F\u4E00\u4E2A\u5408\u6CD5\u7684URL
+default.invalid.validator.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u672A\u80FD\u901A\u8FC7\u81EA\u5B9A\u4E49\u7684\u9A8C\u8BC1
+default.not.equal.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0E[{3}]\u4E0D\u76F8\u7B49
+default.not.inlist.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u5728\u5217\u8868\u7684\u53D6\u503C\u8303\u56F4\u5185
+default.not.unique.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u5FC5\u987B\u662F\u552F\u4E00\u7684
+default.null.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u4E0D\u80FD\u4E3Anull
+default.paginate.next=\u4E0B\u9875
+default.paginate.prev=\u4E0A\u9875
Index: /branches/TaskRewrite/gnuMims/grails-app/views/error.gsp
===================================================================
--- /branches/TaskRewrite/gnuMims/grails-app/views/error.gsp	(revision 55)
+++ /branches/TaskRewrite/gnuMims/grails-app/views/error.gsp	(revision 55)
@@ -0,0 +1,54 @@
+<html>
+  <head>
+	  <title>Grails Runtime Exception</title>
+	  <style type="text/css">
+	  		.message {
+	  			border: 1px solid black;
+	  			padding: 5px;
+	  			background-color:#E9E9E9;
+	  		}
+	  		.stack {
+	  			border: 1px solid black;
+	  			padding: 5px;
+	  			overflow:auto;
+	  			height: 300px;
+	  		}
+	  		.snippet {
+	  			padding: 5px;
+	  			background-color:white;
+	  			border:1px solid black;
+	  			margin:3px;
+	  			font-family:courier;
+	  		}
+	  </style>
+  </head>
+
+  <body>
+    <h1>Grails Runtime Exception</h1>
+    <h2>Error Details</h2>
+
+  	<div class="message">
+		<strong>Error ${request.'javax.servlet.error.status_code'}:</strong> ${request.'javax.servlet.error.message'.encodeAsHTML()}<br/>
+		<strong>Servlet:</strong> ${request.'javax.servlet.error.servlet_name'}<br/>
+		<strong>URI:</strong> ${request.'javax.servlet.error.request_uri'}<br/>
+		<g:if test="${exception}">
+	  		<strong>Exception Message:</strong> ${exception.message?.encodeAsHTML()} <br />
+	  		<strong>Caused by:</strong> ${exception.cause?.message?.encodeAsHTML()} <br />
+	  		<strong>Class:</strong> ${exception.className} <br />
+	  		<strong>At Line:</strong> [${exception.lineNumber}] <br />
+	  		<strong>Code Snippet:</strong><br />
+	  		<div class="snippet">
+	  			<g:each var="cs" in="${exception.codeSnippet}">
+	  				${cs?.encodeAsHTML()}<br />
+	  			</g:each>
+	  		</div>
+		</g:if>
+  	</div>
+	<g:if test="${exception}">
+	    <h2>Stack Trace</h2>
+	    <div class="stack">
+	      <pre><g:each in="${exception.stackTraceLines}">${it.encodeAsHTML()}<br/></g:each></pre>
+	    </div>
+	</g:if>
+  </body>
+</html>
Index: /branches/TaskRewrite/gnuMims/web-app/WEB-INF/applicationContext.xml
===================================================================
--- /branches/TaskRewrite/gnuMims/web-app/WEB-INF/applicationContext.xml	(revision 55)
+++ /branches/TaskRewrite/gnuMims/web-app/WEB-INF/applicationContext.xml	(revision 55)
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="
+http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
+
+	<bean id="grailsApplication" class="org.codehaus.groovy.grails.commons.GrailsApplicationFactoryBean">
+		<description>Grails application factory bean</description>
+        <property name="grailsDescriptor" value="/WEB-INF/grails.xml" />
+        <property name="grailsResourceLoader" ref="grailsResourceLoader" />
+	</bean>
+
+	<bean id="pluginManager" class="org.codehaus.groovy.grails.plugins.GrailsPluginManagerFactoryBean">
+		<description>A bean that manages Grails plugins</description>
+        <property name="grailsDescriptor" value="/WEB-INF/grails.xml" />
+        <property name="application" ref="grailsApplication" />
+	</bean>
+
+    <bean id="pluginMetaManager" class="org.codehaus.groovy.grails.plugins.DefaultPluginMetaManager">
+        <constructor-arg value="classpath*:**/plugins/*/plugin.xml" />
+    </bean>
+
+    <bean id="grailsConfigurator" class="org.codehaus.groovy.grails.commons.spring.GrailsRuntimeConfigurator">
+        <constructor-arg>
+            <ref bean="grailsApplication" />
+        </constructor-arg>
+        <property name="pluginManager" ref="pluginManager" />
+    </bean>
+
+    <bean id="grailsResourceLoader" class="org.codehaus.groovy.grails.commons.GrailsResourceLoaderFactoryBean">
+        <property name="grailsResourceHolder" ref="grailsResourceHolder" />
+    </bean>
+
+    <bean id="grailsResourceHolder" scope="prototype" class="org.codehaus.groovy.grails.commons.spring.GrailsResourceHolder">
+        <property name="resources">
+              <value>classpath*:**/grails-app/**/*.groovy</value>
+        </property>
+    </bean>    
+    
+   <bean id="characterEncodingFilter"
+      class="org.springframework.web.filter.CharacterEncodingFilter">
+        <property name="encoding">
+          <value>utf-8</value>
+        </property>
+   </bean>    	
+</beans>
Index: /branches/TaskRewrite/gnuMims/web-app/WEB-INF/sitemesh.xml
===================================================================
--- /branches/TaskRewrite/gnuMims/web-app/WEB-INF/sitemesh.xml	(revision 55)
+++ /branches/TaskRewrite/gnuMims/web-app/WEB-INF/sitemesh.xml	(revision 55)
@@ -0,0 +1,14 @@
+<sitemesh>
+    <page-parsers>
+        <parser content-type="text/html"
+            class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
+        <parser content-type="text/html;charset=ISO-8859-1"
+            class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
+        <parser content-type="text/html;charset=UTF-8"
+            class="com.opensymphony.module.sitemesh.parser.FastPageParser" />            
+    </page-parsers>
+
+    <decorator-mappers>
+        <mapper class="org.codehaus.groovy.grails.web.sitemesh.GrailsLayoutDecoratorMapper" />
+    </decorator-mappers>
+</sitemesh>
Index: /branches/TaskRewrite/gnuMims/web-app/css/main.css
===================================================================
--- /branches/TaskRewrite/gnuMims/web-app/css/main.css	(revision 55)
+++ /branches/TaskRewrite/gnuMims/web-app/css/main.css	(revision 55)
@@ -0,0 +1,267 @@
+html * {
+    margin: 0;
+    /*padding: 0; SELECT NOT DISPLAYED CORRECTLY IN FIREFOX */
+}
+
+/* GENERAL */
+
+.spinner {
+    padding: 5px;
+    position: absolute;
+    right: 0;
+}
+
+body {
+    background: #fff;
+    color: #333;
+    font: 11px verdana, arial, helvetica, sans-serif;
+}
+
+a:link, a:visited, a:hover {
+    color: #666;
+    font-weight: bold;
+    text-decoration: none;
+} 
+
+h1 {
+    color: #006dba;
+    font-weight: normal;
+    font-size: 16px;
+    margin: .8em 0 .3em 0;
+}
+
+ul {
+    padding-left: 15px;	
+}
+
+input, select, textarea {
+    background-color: #fcfcfc;
+    border: 1px solid #ccc;
+    font: 11px verdana, arial, helvetica, sans-serif;
+    margin: 2px 0;
+    padding: 2px 4px;
+}
+select {
+   padding: 2px 2px 2px 0;
+}
+textarea {
+	width: 250px;
+	height: 150px;
+	vertical-align: top;
+}
+
+input:focus, select:focus, textarea:focus {
+    border: 1px solid #b2d1ff;
+}
+
+.body {
+    float: left;
+    margin: 0 15px 10px 15px;
+}
+
+/* NAVIGATION MENU */
+
+.nav {
+    background: #fff url(../images/skin/shadow.jpg) bottom repeat-x;
+    border: 1px solid #ccc;
+    border-style: solid none solid none;	
+    margin-top: 5px;
+    padding: 7px 12px;
+}
+
+.menuButton {
+    font-size: 10px;
+    padding: 0 5px;
+}
+.menuButton a {
+    color: #333;
+    padding: 4px 6px;
+}
+.menuButton a.home {
+    background: url(../images/skin/house.png) center left no-repeat;
+    color: #333;
+    padding-left: 25px;
+}
+.menuButton a.list {
+    background: url(../images/skin/database_table.png) center left no-repeat;
+    color: #333;
+    padding-left: 25px;
+}
+.menuButton a.create {
+    background: url(../images/skin/database_add.png) center left no-repeat;
+    color: #333;
+    padding-left: 25px;
+}
+
+/* MESSAGES AND ERRORS */
+
+.message {
+    background: #f3f8fc url(../images/skin/information.png) 8px 50% no-repeat;
+    border: 1px solid #b2d1ff;
+    color: #006dba;
+    margin: 10px 0 5px 0;
+    padding: 5px 5px 5px 30px
+}
+
+div.errors {
+    background: #fff3f3;
+    border: 1px solid red;
+    color: #cc0000;
+    margin: 10px 0 5px 0;
+    padding: 5px 0 5px 0;
+}
+div.errors ul {
+    list-style: none;
+    padding: 0;	
+}
+div.errors li {
+	background: url(../images/skin/exclamation.png) 8px 0% no-repeat;
+    line-height: 16px;
+    padding-left: 30px;
+}
+
+td.errors select {
+    border: 1px solid red;
+}
+td.errors input {
+    border: 1px solid red;
+}
+
+/* TABLES */
+
+table {
+    border: 1px solid #ccc;
+    width: 100%
+}
+tr {
+    border: 0;
+}
+td, th { 
+    font: 11px verdana, arial, helvetica, sans-serif;
+    line-height: 12px;
+    padding: 5px 6px;
+    text-align: left;
+    vertical-align: top;
+}
+th {
+    background: #fff url(../images/skin/shadow.jpg);
+    color: #666;
+    font-size: 11px;
+    font-weight: bold;
+    line-height: 17px;
+    padding: 2px 6px;
+}
+th a:link, th a:visited, th a:hover {
+    color: #333;
+    display: block;
+    font-size: 10px;
+    text-decoration: none;
+    width: 100%;
+}
+th.asc a, th.desc a {
+    background-position: right;
+    background-repeat: no-repeat;
+}
+th.asc a {
+    background-image: url(../images/skin/sorted_asc.gif);
+}
+th.desc a {
+    background-image: url(../images/skin/sorted_desc.gif);
+}
+
+.odd {
+    background: #f7f7f7;
+}
+.even {
+    background: #fff;
+}
+
+/* LIST */
+
+.list table {
+    border-collapse: collapse;
+}
+.list th, .list td {
+    border-left: 1px solid #ddd;
+}
+.list th:hover, .list tr:hover {
+    background: #b2d1ff;
+}
+
+/* PAGINATION */
+
+.paginateButtons {
+    background: #fff url(../images/skin/shadow.jpg) bottom repeat-x;
+    border: 1px solid #ccc;
+    border-top: 0;
+    color: #666;
+    font-size: 10px;
+    overflow: hidden;
+    padding: 10px 3px;
+}
+.paginateButtons a {
+    background: #fff;
+    border: 1px solid #ccc;
+    border-color: #ccc #aaa #aaa #ccc;
+    color: #666;
+    margin: 0 3px;
+    padding: 2px 6px;
+}
+.paginateButtons span {
+    padding: 2px 3px;
+}
+
+/* DIALOG */
+
+.dialog table {
+    padding: 5px 0;
+}
+
+.prop {
+    padding: 5px;
+}
+.prop .name {
+    text-align: left;
+    width: 15%;
+    white-space: nowrap;
+}
+.prop .value {
+    text-align: left;
+    width: 85%;
+}
+
+/* ACTION BUTTONS */
+
+.buttons {
+    background: #fff url(../images/skin/shadow.jpg) bottom repeat-x;
+    border: 1px solid #ccc;
+    color: #666;
+    font-size: 10px;
+    margin-top: 5px;
+    overflow: hidden;
+    padding: 0;
+}
+
+.buttons input {
+    background: #fff;
+    border: 0;
+    color: #333;
+    cursor: pointer;
+    font-size: 10px;
+    font-weight: bold;
+    margin-left: 3px;
+    overflow: visible;
+    padding: 2px 6px;
+}
+.buttons input.delete {
+    background: transparent url(../images/skin/database_delete.png) 5px 50% no-repeat;
+    padding-left: 28px;
+}
+.buttons input.edit {
+    background: transparent url(../images/skin/database_edit.png) 5px 50% no-repeat;
+    padding-left: 28px;
+}
+.buttons input.save {
+    background: transparent url(../images/skin/database_save.png) 5px 50% no-repeat;
+    padding-left: 28px;
+}
Index: /branches/TaskRewrite/gnuMims/web-app/js/application.js
===================================================================
--- /branches/TaskRewrite/gnuMims/web-app/js/application.js	(revision 55)
+++ /branches/TaskRewrite/gnuMims/web-app/js/application.js	(revision 55)
@@ -0,0 +1,13 @@
+var Ajax;
+if (Ajax && (Ajax != null)) {
+	Ajax.Responders.register({
+	  onCreate: function() {
+        if($('spinner') && Ajax.activeRequestCount>0)
+          Effect.Appear('spinner',{duration:0.5,queue:'end'});
+	  },
+	  onComplete: function() {
+        if($('spinner') && Ajax.activeRequestCount==0)
+          Effect.Fade('spinner',{duration:0.5,queue:'end'});
+	  }
+	});
+}
