├── .gitignore
├── Dockerfile
├── README.md
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── grails-app
├── conf
├── application.yml
├── logback.groovy
└── spring
│ └── resources.groovy
├── controllers
└── languagetool_nlp
│ ├── ApplicationController.groovy
│ ├── ControllerBase.groovy
│ ├── LemmatizeController.groovy
│ ├── TagController.groovy
│ ├── TokenizeController.groovy
│ └── UrlMappings.groovy
├── i18n
├── messages.properties
├── messages_cs_CZ.properties
├── messages_da.properties
├── messages_de.properties
├── messages_es.properties
├── messages_fr.properties
├── messages_it.properties
├── messages_ja.properties
├── messages_nb.properties
├── messages_nl.properties
├── messages_pl.properties
├── messages_pt_BR.properties
├── messages_pt_PT.properties
├── messages_ru.properties
├── messages_sv.properties
├── messages_th.properties
└── messages_zh_CN.properties
├── init
├── BootStrap.groovy
└── languagetool_nlp
│ ├── ApiDocumentationConfiguration.groovy
│ └── Application.groovy
├── services
└── languagetool_nlp
│ ├── LemmatizeService.groovy
│ ├── TaggingService.groovy
│ └── TokenizeService.groovy
└── views
├── application
└── index.gson
├── error.gson
├── errors
└── _errors.gson
└── notFound.gson
/.gitignore:
--------------------------------------------------------------------------------
1 | Thumbs.db
2 | .DS_Store
3 | .gradle
4 | build/
5 | classes/
6 | .idea
7 | *.iml
8 | *.ipr
9 | *.iws
10 | .project
11 | .settings
12 | .classpath
13 | /bin/
14 | /.launch/
15 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM java:8-jdk
2 |
3 | RUN set -ex \
4 | && apt-get update \
5 | && apt-get install flip
6 |
7 | ADD . /app
8 | RUN set -ex \
9 | && cd /app \
10 | && flip -u ./gradlew \
11 | && ./gradlew build
12 |
13 | EXPOSE 8080
14 | WORKDIR /app
15 | CMD ./gradlew bootRun
16 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Це — веб-служба (REST API) для аналізу українських текстів (NLP) за допомогою LanguageTool. ##
2 |
3 | ## This project provides REST API for analyzing Ukrainian texts with LanguageTool. ##
4 |
5 |
6 | ### Як встановити ###
7 | * Встановити java (JDK 8 або новішу)
8 | * Клонувати проект з github
9 | * Запустити `./gradlew bootRun`
10 | * Документація в JSON: http://localhost:8080/v2/api-docs
11 | * Документація з UI: http://localhost:8080/swagger-ui.html
12 |
13 | ### Як використовувати через Docker ###
14 |
15 | ```
16 | docker build -t api_nlp_uk:latest .
17 | docker run -it -p 8080:8080 api_nlp_uk:latest
18 | curl -X POST -H "Content-Type: application/json" -d "{'text': 'Сьогодні у продажі. 12-те зібрання творів 1969 р. І. П. Котляревського.'}" http://localhost:8080/lemmatize/
19 | ```
20 |
21 | Або можна викоритсовувати Docker image який підтримується в іншому репозиторії.
22 |
23 | ```
24 | docker run -it -p 5000:5000 chaliy/api_nlp_uk:latest
25 | ```
26 |
27 | Вільно розповсюджується за умов ліцензії GPL версії 3.
28 |
29 | Copyright (c) 2016 Andriy Rysin, команда БрУК
30 |
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | repositories {
3 | mavenLocal()
4 | maven { url "https://repo.grails.org/grails/core" }
5 | }
6 | dependencies {
7 | classpath "org.grails:grails-gradle-plugin:$grailsVersion"
8 | // classpath "org.grails.plugins:hibernate5:6.0.0"
9 | classpath "org.grails.plugins:views-gradle:1.1.2"
10 | }
11 | }
12 |
13 | version "1.0"
14 | group "languagetool_nlp"
15 |
16 | apply plugin:"eclipse"
17 | apply plugin:"idea"
18 | apply plugin:"war"
19 | apply plugin:"org.grails.grails-web"
20 | apply plugin:"org.grails.plugins.views-json"
21 |
22 | war.archiveName='languagetool.war'
23 |
24 |
25 | repositories {
26 | mavenLocal()
27 | maven { url "https://repo.grails.org/grails/core" }
28 | }
29 |
30 | dependencyManagement {
31 | imports {
32 | mavenBom "org.grails:grails-bom:$grailsVersion"
33 | }
34 | applyMavenExclusions false
35 | }
36 |
37 | dependencies {
38 | compile "org.languagetool:language-uk:3.7"
39 |
40 | // compile "org.grails.plugins:swaggydoc-grails3:0.28.0"
41 | compile "io.springfox:springfox-swagger2:2.6.1"
42 | compile "io.springfox:springfox-swagger-ui:2.6.1"
43 |
44 | compile "org.grails:grails-dependencies"
45 |
46 | compile "org.springframework.boot:spring-boot-starter-logging"
47 | compile "org.springframework.boot:spring-boot-autoconfigure"
48 | compile "org.grails:grails-core"
49 | compile "org.springframework.boot:spring-boot-starter-actuator"
50 | compile "org.springframework.boot:spring-boot-starter-tomcat"
51 | compile "org.grails:grails-plugin-url-mappings"
52 | compile "org.grails:grails-plugin-rest"
53 | compile "org.grails:grails-plugin-codecs"
54 | compile "org.grails:grails-plugin-interceptors"
55 | compile "org.grails:grails-plugin-services"
56 | // compile "org.grails:grails-plugin-datasource"
57 | // compile "org.grails:grails-plugin-databinding"
58 | compile "org.grails:grails-plugin-async"
59 | compile "org.grails:grails-web-boot"
60 | compile "org.grails:grails-logging"
61 | compile "org.grails.plugins:cache"
62 | // compile "org.grails.plugins:hibernate5"
63 | // compile "org.hibernate:hibernate-core:5.1.1.Final"
64 | // compile "org.hibernate:hibernate-ehcache:5.1.1.Final"
65 | compile "org.grails.plugins:views-json"
66 | compile "org.grails.plugins:views-json-templates"
67 | console "org.grails:grails-console"
68 | profile "org.grails.profiles:rest-api"
69 | // provided "org.codehaus.groovy:groovy-ant"
70 | // runtime "com.h2database:h2"
71 | testCompile "org.grails:grails-plugin-testing"
72 | testCompile "org.grails.plugins:geb"
73 | // testCompile "org.grails:grails-datastore-rest-client"
74 | testRuntime "org.seleniumhq.selenium:selenium-htmlunit-driver:2.47.1"
75 | testRuntime "net.sourceforge.htmlunit:htmlunit:2.18"
76 | }
77 |
78 | bootRun {
79 | jvmArgs = ['-Dspring.output.ansi.enabled=always']
80 | }
81 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | grailsVersion=3.2.0
2 | gradleWrapperVersion=3.0
3 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arysin/api_nlp_uk/47e94cf726104fdbbc8dba89b9fb817d21ce4817/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Nov 27 23:09:32 CET 2015
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-3.0-bin.zip
7 |
--------------------------------------------------------------------------------
/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
10 | DEFAULT_JVM_OPTS=""
11 |
12 | APP_NAME="Gradle"
13 | APP_BASE_NAME=`basename "$0"`
14 |
15 | # Use the maximum available, or set MAX_FD != -1 to use that value.
16 | MAX_FD="maximum"
17 |
18 | warn ( ) {
19 | echo "$*"
20 | }
21 |
22 | die ( ) {
23 | echo
24 | echo "$*"
25 | echo
26 | exit 1
27 | }
28 |
29 | # OS specific support (must be 'true' or 'false').
30 | cygwin=false
31 | msys=false
32 | darwin=false
33 | case "`uname`" in
34 | CYGWIN* )
35 | cygwin=true
36 | ;;
37 | Darwin* )
38 | darwin=true
39 | ;;
40 | MINGW* )
41 | msys=true
42 | ;;
43 | esac
44 |
45 | # Attempt to set APP_HOME
46 | # Resolve links: $0 may be a link
47 | PRG="$0"
48 | # Need this for relative symlinks.
49 | while [ -h "$PRG" ] ; do
50 | ls=`ls -ld "$PRG"`
51 | link=`expr "$ls" : '.*-> \(.*\)$'`
52 | if expr "$link" : '/.*' > /dev/null; then
53 | PRG="$link"
54 | else
55 | PRG=`dirname "$PRG"`"/$link"
56 | fi
57 | done
58 | SAVED="`pwd`"
59 | cd "`dirname \"$PRG\"`/" >/dev/null
60 | APP_HOME="`pwd -P`"
61 | cd "$SAVED" >/dev/null
62 |
63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
64 |
65 | # Determine the Java command to use to start the JVM.
66 | if [ -n "$JAVA_HOME" ] ; then
67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
68 | # IBM's JDK on AIX uses strange locations for the executables
69 | JAVACMD="$JAVA_HOME/jre/sh/java"
70 | else
71 | JAVACMD="$JAVA_HOME/bin/java"
72 | fi
73 | if [ ! -x "$JAVACMD" ] ; then
74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
75 |
76 | Please set the JAVA_HOME variable in your environment to match the
77 | location of your Java installation."
78 | fi
79 | else
80 | JAVACMD="java"
81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
82 |
83 | Please set the JAVA_HOME variable in your environment to match the
84 | location of your Java installation."
85 | fi
86 |
87 | # Increase the maximum file descriptors if we can.
88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
89 | MAX_FD_LIMIT=`ulimit -H -n`
90 | if [ $? -eq 0 ] ; then
91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
92 | MAX_FD="$MAX_FD_LIMIT"
93 | fi
94 | ulimit -n $MAX_FD
95 | if [ $? -ne 0 ] ; then
96 | warn "Could not set maximum file descriptor limit: $MAX_FD"
97 | fi
98 | else
99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
100 | fi
101 | fi
102 |
103 | # For Darwin, add options to specify how the application appears in the dock
104 | if $darwin; then
105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
106 | fi
107 |
108 | # For Cygwin, switch paths to Windows format before running java
109 | if $cygwin ; then
110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
112 | JAVACMD=`cygpath --unix "$JAVACMD"`
113 |
114 | # We build the pattern for arguments to be converted via cygpath
115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
116 | SEP=""
117 | for dir in $ROOTDIRSRAW ; do
118 | ROOTDIRS="$ROOTDIRS$SEP$dir"
119 | SEP="|"
120 | done
121 | OURCYGPATTERN="(^($ROOTDIRS))"
122 | # Add a user-defined pattern to the cygpath arguments
123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
125 | fi
126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
127 | i=0
128 | for arg in "$@" ; do
129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
131 |
132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
134 | else
135 | eval `echo args$i`="\"$arg\""
136 | fi
137 | i=$((i+1))
138 | done
139 | case $i in
140 | (0) set -- ;;
141 | (1) set -- "$args0" ;;
142 | (2) set -- "$args0" "$args1" ;;
143 | (3) set -- "$args0" "$args1" "$args2" ;;
144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
150 | esac
151 | fi
152 |
153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
154 | function splitJvmOpts() {
155 | JVM_OPTS=("$@")
156 | }
157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
159 |
160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
161 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/grails-app/conf/application.yml:
--------------------------------------------------------------------------------
1 | ---
2 | grails:
3 | profile: rest-api
4 | codegen:
5 | defaultPackage: languagetool_nlp
6 | spring:
7 | transactionManagement:
8 | proxies: false
9 | resources:
10 | pattern: '/**'
11 | info:
12 | app:
13 | name: '@info.app.name@'
14 | version: '@info.app.version@'
15 | grailsVersion: '@info.app.grailsVersion@'
16 | spring:
17 | groovy:
18 | template:
19 | check-template-location: false
20 | # Spring Actuator Endpoints are Disabled by Default
21 | endpoints:
22 | enabled: false
23 | jmx:
24 | enabled: true
25 |
26 | ---
27 | grails:
28 | mime:
29 | disable:
30 | accept:
31 | header:
32 | userAgents: []
33 | types:
34 | all: '*/*'
35 | atom: application/atom+xml
36 | css: text/css
37 | csv: text/csv
38 | form: application/x-www-form-urlencoded
39 | html:
40 | - text/html
41 | - application/xhtml+xml
42 | js: text/javascript
43 | json:
44 | - application/json
45 | - text/json
46 | multipartForm: multipart/form-data
47 | rss: application/rss+xml
48 | text: text/plain
49 | hal:
50 | - application/hal+json
51 | - application/hal+xml
52 | xml:
53 | - text/xml
54 | - application/xml
55 | urlmapping:
56 | cache:
57 | maxsize: 1000
58 | controllers:
59 | defaultScope: singleton
60 | converters:
61 | encoding: UTF-8
62 |
--------------------------------------------------------------------------------
/grails-app/conf/logback.groovy:
--------------------------------------------------------------------------------
1 | import grails.util.BuildSettings
2 | import grails.util.Environment
3 |
4 | // See http://logback.qos.ch/manual/groovy.html for details on configuration
5 | appender('STDOUT', ConsoleAppender) {
6 | encoder(PatternLayoutEncoder) {
7 | pattern = "%level %logger - %msg%n"
8 | }
9 | }
10 |
11 | root(ERROR, ['STDOUT'])
12 |
13 | def targetDir = BuildSettings.TARGET_DIR
14 | if (Environment.isDevelopmentMode() && targetDir) {
15 | appender("FULL_STACKTRACE", FileAppender) {
16 | file = "${targetDir}/stacktrace.log"
17 | append = true
18 | encoder(PatternLayoutEncoder) {
19 | pattern = "%level %logger - %msg%n"
20 | }
21 | }
22 | logger("StackTrace", ERROR, ['FULL_STACKTRACE'], false)
23 | }
24 |
--------------------------------------------------------------------------------
/grails-app/conf/spring/resources.groovy:
--------------------------------------------------------------------------------
1 | // Place your Spring DSL code here
2 | import languagetool_nlp.ApiDocumentationConfiguration
3 |
4 | // Place your Spring DSL code here
5 | beans = {
6 | apiDocumentationConfiguration(ApiDocumentationConfiguration) {
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/grails-app/controllers/languagetool_nlp/ApplicationController.groovy:
--------------------------------------------------------------------------------
1 | package languagetool_nlp
2 |
3 | import grails.core.GrailsApplication
4 | import grails.util.Environment
5 | import grails.plugins.*
6 |
7 | class ApplicationController implements PluginManagerAware {
8 |
9 | GrailsApplication grailsApplication
10 | GrailsPluginManager pluginManager
11 |
12 | def index() {
13 | [grailsApplication: grailsApplication, pluginManager: pluginManager]
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/grails-app/controllers/languagetool_nlp/ControllerBase.groovy:
--------------------------------------------------------------------------------
1 | package languagetool_nlp
2 |
3 |
4 | import grails.rest.*
5 | import grails.converters.*
6 |
7 | //import io.swagger.annotations.*
8 | import com.wordnik.swagger.annotations.*
9 |
10 |
11 | abstract class ControllerBase {
12 | static responseFormats = ['json']
13 | static allowedMethods = [save: "POST"]
14 | static defaultAction = "save"
15 | static TEXT_LIMIT = 50*1024
16 |
17 |
18 | def validateRequest(request) {
19 | if( ! request.JSON?.text ) {
20 | render(status: 400, text: "\"text\" field not specified in the request")
21 | return false
22 | }
23 |
24 | if( request.JSON.text.size() > TEXT_LIMIT ) {
25 | render(status: 400, text: String.format("text length cannot exceed %d characters", TEXT_LIMIT))
26 | return false
27 | }
28 |
29 | return true
30 | }
31 |
32 | def updateNotes(response) {
33 | if( testLatCyrMix(request.JSON.text) ) {
34 | response.notes = "Text contains mix of Cyrillic and Lating which may produce suboptimal results"
35 | }
36 | }
37 |
38 | def testLatCyrMix(text) {
39 | return text =~ /[а-яіїєґА-ЯІЇЄҐ]['’ʼ-]?[a-zA-Z]|[a-zA-Z]['’ʼ-]?[а-яіїєґА-ЯІЇЄҐ]/
40 | }
41 |
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/grails-app/controllers/languagetool_nlp/LemmatizeController.groovy:
--------------------------------------------------------------------------------
1 | package languagetool_nlp
2 |
3 |
4 | import org.springframework.stereotype.Controller;
5 | import org.springframework.web.bind.annotation.RequestMapping
6 |
7 | import grails.rest.*
8 | import grails.converters.*
9 | import io.swagger.annotations.*
10 | //import com.wordnik.swagger.annotations.*
11 |
12 |
13 | @Api(value = "Lemmatization services",
14 | description = "Lemmatization services for Ukrainian language",
15 | produces = 'application/json',
16 | consumes = 'application/json',
17 | tags = ["lemmatize"]
18 | )
19 | @Controller()
20 | @RequestMapping(value="/lemmatize")
21 | class LemmatizeController extends ControllerBase {
22 |
23 | def lemmatizeService
24 |
25 |
26 | @ApiOperation(value = "Lemmatizes the text",
27 | httpMethod = "POST",
28 | response = LemmatizeResponse.class,
29 | extensions = [
30 | @Extension(properties = [
31 | @ExtensionProperty(name = "x-taskClass", value = "lemmatize"),
32 | @ExtensionProperty(name = "x-taskAlgo", value = "nlp_uk"),
33 | @ExtensionProperty(name = "x-taskModel", value = "dict_uk")
34 | ])
35 | ]
36 | )
37 | @ApiResponses([
38 | @ApiResponse(code = 400, message = "Invalid body provided")
39 | ])
40 | @ApiImplicitParams([
41 | @ApiImplicitParam(name = 'body', paramType = 'body', required = true, dataType='InputBody',
42 | value='Body text; e.g
{"text": "Сьогодні у продажі. 12-те зібрання творів 1969 р. І. П. Котляревського."}')
43 | ])
44 | @RequestMapping(value="/")
45 | def save() {
46 | if( ! validateRequest(request) )
47 | return
48 |
49 | try {
50 | def tokens = lemmatizeService.lemmatize(request.JSON, params)
51 |
52 | def response = new LemmatizeResponse(lemmatizedSentences: tokens)
53 |
54 | updateNotes(response)
55 |
56 | render response as JSON
57 | }
58 | catch(Exception e) {
59 | e.printStackTrace()
60 | render(status: 500, text: "Internal error: " + e.getMessage())
61 | return
62 | }
63 |
64 | }
65 |
66 |
67 | static class LemmatizeResponse {
68 | List lemmatizedSentences
69 | String notes
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/grails-app/controllers/languagetool_nlp/TagController.groovy:
--------------------------------------------------------------------------------
1 | package languagetool_nlp
2 |
3 |
4 | import grails.converters.*
5 | import grails.rest.*
6 | import io.swagger.annotations.*
7 |
8 | import org.springframework.stereotype.Controller
9 | import org.springframework.web.bind.annotation.RequestMapping
10 | //import com.wordnik.swagger.annotations.*
11 |
12 |
13 | @Api(value = "Tagging services",
14 | description = "Tagging services for Ukrainian language",
15 | produces = 'application/json',
16 | consumes = 'application/json',
17 | tags = ["tag"]
18 | )
19 | @Controller()
20 | @RequestMapping(value="/tag")
21 | class TagController extends ControllerBase {
22 |
23 | def taggingService
24 |
25 |
26 | @ApiOperation(value = "Tags the text",
27 | httpMethod = "POST",
28 | response = TagResponse.class,
29 | extensions = [
30 | @Extension(properties = [
31 | @ExtensionProperty(name = "x-taskClass", value = "tagging"),
32 | @ExtensionProperty(name = "x-taskAlgo", value = "nlp_uk"),
33 | @ExtensionProperty(name = "x-taskModel", value = "dict_uk")
34 | ])
35 | ]
36 | )
37 | @ApiResponses([
38 | @ApiResponse(code = 400, message = "Invalid body provided"),
39 | @ApiResponse(code = 400, message = "Text limit exceeded")
40 | ])
41 | @ApiImplicitParams([
42 | @ApiImplicitParam(name = 'body', paramType = 'body', required = true, dataType='InputBody',
43 | value='Body text; e.g
{"text": "Сьогодні у продажі. 12-те зібрання творів 1969 р. І. П. Котляревського."}')
44 | ])
45 | @RequestMapping(value="/")
46 | def save() {
47 | if( ! validateRequest(request) )
48 | return
49 |
50 | try {
51 | def tokens = taggingService.tag(request.JSON, params)
52 |
53 | def response = new TagResponse(taggedText: tokens)
54 |
55 | updateNotes(response)
56 |
57 | render response as JSON
58 | }
59 | catch(Exception e) {
60 | e.printStackTrace()
61 | render(status: 500, text: "Internal error: " + e.getMessage())
62 | return
63 | }
64 |
65 | }
66 |
67 |
68 | static class TagResponse {
69 | List taggedText
70 | String notes
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/grails-app/controllers/languagetool_nlp/TokenizeController.groovy:
--------------------------------------------------------------------------------
1 | package languagetool_nlp
2 |
3 |
4 | import grails.converters.*
5 | import grails.rest.*
6 |
7 | import org.springframework.stereotype.Controller
8 | import org.springframework.web.bind.annotation.RequestMapping;
9 | import org.springframework.web.bind.annotation.RequestMethod;
10 |
11 | import io.swagger.annotations.*
12 | //import com.wordnik.swagger.annotations.*
13 |
14 | @Api(value = "Tokenization services",
15 | description = "Tokenization services for Ukrainian language",
16 | produces = 'application/json',
17 | consumes = 'application/json',
18 | tags=["tokenize"]
19 | )
20 | @Controller(value="/tokenize")
21 | class TokenizeController extends ControllerBase {
22 |
23 | def tokenizeService
24 |
25 |
26 | @ApiOperation(value = "Tokenizes the text into sentences and then into words",
27 | httpMethod = "POST",
28 | response = TokenizeResponse.class,
29 | extensions = [
30 | @Extension(properties = [
31 | @ExtensionProperty(name = "x-taskClass", value = "tokenization"),
32 | @ExtensionProperty(name = "x-taskAlgo", value = "nlp_uk")//,
33 | // @ExtensionProperty(name = "x-taskModel", value = "dict_uk")
34 | ])
35 | ]
36 | )
37 | @ApiResponses([
38 | @ApiResponse(code = 400, message = "Invalid body provided"),
39 | @ApiResponse(code = 400, message = "Text limit exceeded")
40 | ])
41 | @ApiImplicitParams([
42 | @ApiImplicitParam(name = 'body', paramType = 'body', required = true, dataType='InputBody',
43 | value='Body text; e.g
{"text": "Сьогодні у продажі. 12-те зібрання творів 1969 р. І. П. Котляревського."}')
44 | ])
45 | @RequestMapping(value="/")
46 | def save() {
47 |
48 | if( ! validateRequest(request) )
49 | return
50 |
51 | try {
52 | def tokens = tokenizeService.tokenize(request.JSON, params)
53 |
54 | def response = new TokenizeResponse(tokens: tokens)
55 |
56 | updateNotes(response)
57 |
58 | render response as JSON
59 | }
60 | catch(Exception e) {
61 | e.printStackTrace()
62 | render(status: 500, text: "Internal error: " + e.getMessage())
63 | return
64 | }
65 |
66 | }
67 |
68 | static class TokenizeResponse {
69 | List> tokens
70 | String notes
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/grails-app/controllers/languagetool_nlp/UrlMappings.groovy:
--------------------------------------------------------------------------------
1 | package languagetool_nlp
2 |
3 | class UrlMappings {
4 |
5 | static mappings = {
6 | "/$controller/$action?/$id?(.$format)?"(parseRequest: true){
7 | constraints {
8 | // apply constraints here
9 | }
10 | }
11 |
12 | "/"(controller: 'application', action:'index')
13 |
14 | "/tokenize"(controller: 'tokenize', action:'save')
15 | "/lemmatize"(controller: 'lemmatize', action:'save')
16 | "/tag"(controller: 'tag', action:'save')
17 |
18 | "500"(view: '/error')
19 | "404"(view: '/notFound')
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/grails-app/i18n/messages.properties:
--------------------------------------------------------------------------------
1 | default.doesnt.match.message=Property [{0}] of class [{1}] with value [{2}] does not match the required pattern [{3}]
2 | default.invalid.url.message=Property [{0}] of class [{1}] with value [{2}] is not a valid URL
3 | default.invalid.creditCard.message=Property [{0}] of class [{1}] with value [{2}] is not a valid credit card number
4 | default.invalid.email.message=Property [{0}] of class [{1}] with value [{2}] is not a valid e-mail address
5 | default.invalid.range.message=Property [{0}] of class [{1}] with value [{2}] does not fall within the valid range from [{3}] to [{4}]
6 | default.invalid.size.message=Property [{0}] of class [{1}] with value [{2}] does not fall within the valid size range from [{3}] to [{4}]
7 | default.invalid.max.message=Property [{0}] of class [{1}] with value [{2}] exceeds maximum value [{3}]
8 | default.invalid.min.message=Property [{0}] of class [{1}] with value [{2}] is less than minimum value [{3}]
9 | default.invalid.max.size.message=Property [{0}] of class [{1}] with value [{2}] exceeds the maximum size of [{3}]
10 | default.invalid.min.size.message=Property [{0}] of class [{1}] with value [{2}] is less than the minimum size of [{3}]
11 | default.invalid.validator.message=Property [{0}] of class [{1}] with value [{2}] does not pass custom validation
12 | default.not.inlist.message=Property [{0}] of class [{1}] with value [{2}] is not contained within the list [{3}]
13 | default.blank.message=Property [{0}] of class [{1}] cannot be blank
14 | default.not.equal.message=Property [{0}] of class [{1}] with value [{2}] cannot equal [{3}]
15 | default.null.message=Property [{0}] of class [{1}] cannot be null
16 | default.not.unique.message=Property [{0}] of class [{1}] with value [{2}] must be unique
17 |
18 | default.paginate.prev=Previous
19 | default.paginate.next=Next
20 | default.boolean.true=True
21 | default.boolean.false=False
22 | default.date.format=yyyy-MM-dd HH:mm:ss z
23 | default.number.format=0
24 |
25 | default.created.message={0} {1} created
26 | default.updated.message={0} {1} updated
27 | default.deleted.message={0} {1} deleted
28 | default.not.deleted.message={0} {1} could not be deleted
29 | default.not.found.message={0} not found with id {1}
30 | default.optimistic.locking.failure=Another user has updated this {0} while you were editing
31 |
32 | default.home.label=Home
33 | default.list.label={0} List
34 | default.add.label=Add {0}
35 | default.new.label=New {0}
36 | default.create.label=Create {0}
37 | default.show.label=Show {0}
38 | default.edit.label=Edit {0}
39 |
40 | default.button.create.label=Create
41 | default.button.edit.label=Edit
42 | default.button.update.label=Update
43 | default.button.delete.label=Delete
44 | default.button.delete.confirm.message=Are you sure?
45 |
46 | # Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
47 | typeMismatch.java.net.URL=Property {0} must be a valid URL
48 | typeMismatch.java.net.URI=Property {0} must be a valid URI
49 | typeMismatch.java.util.Date=Property {0} must be a valid Date
50 | typeMismatch.java.lang.Double=Property {0} must be a valid number
51 | typeMismatch.java.lang.Integer=Property {0} must be a valid number
52 | typeMismatch.java.lang.Long=Property {0} must be a valid number
53 | typeMismatch.java.lang.Short=Property {0} must be a valid number
54 | typeMismatch.java.math.BigDecimal=Property {0} must be a valid number
55 | typeMismatch.java.math.BigInteger=Property {0} must be a valid number
56 | typeMismatch=Property {0} is type-mismatched
57 |
--------------------------------------------------------------------------------
/grails-app/i18n/messages_cs_CZ.properties:
--------------------------------------------------------------------------------
1 | default.doesnt.match.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] neodpovídá požadovanému vzoru [{3}]
2 | default.invalid.url.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] není validní URL
3 | default.invalid.creditCard.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] není validní číslo kreditní karty
4 | default.invalid.email.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] není validní emailová adresa
5 | default.invalid.range.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] není v povoleném rozmezí od [{3}] do [{4}]
6 | default.invalid.size.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] není v povoleném rozmezí od [{3}] do [{4}]
7 | default.invalid.max.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] překračuje maximální povolenou hodnotu [{3}]
8 | default.invalid.min.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] je menší než minimální povolená hodnota [{3}]
9 | default.invalid.max.size.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] překračuje maximální velikost [{3}]
10 | default.invalid.min.size.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] je menší než minimální velikost [{3}]
11 | default.invalid.validator.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] neprošla validací
12 | default.not.inlist.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] není obsažena v seznamu [{3}]
13 | default.blank.message=Položka [{0}] třídy [{1}] nemůže být prázdná
14 | default.not.equal.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] nemůže být stejná jako [{3}]
15 | default.null.message=Položka [{0}] třídy [{1}] nemůže být prázdná
16 | default.not.unique.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] musí být unikátní
17 |
18 | default.paginate.prev=Předcházející
19 | default.paginate.next=Následující
20 | default.boolean.true=Pravda
21 | default.boolean.false=Nepravda
22 | default.date.format=dd. MM. yyyy HH:mm:ss z
23 | default.number.format=0
24 |
25 | default.created.message={0} {1} vytvořeno
26 | default.updated.message={0} {1} aktualizováno
27 | default.deleted.message={0} {1} smazáno
28 | default.not.deleted.message={0} {1} nelze smazat
29 | default.not.found.message={0} nenalezen s id {1}
30 | default.optimistic.locking.failure=Jiný uživatel aktualizoval záznam {0}, právě když byl vámi editován
31 |
32 | default.home.label=Domů
33 | default.list.label={0} Seznam
34 | default.add.label=Přidat {0}
35 | default.new.label=Nový {0}
36 | default.create.label=Vytvořit {0}
37 | default.show.label=Ukázat {0}
38 | default.edit.label=Editovat {0}
39 |
40 | default.button.create.label=Vytvoř
41 | default.button.edit.label=Edituj
42 | default.button.update.label=Aktualizuj
43 | default.button.delete.label=Smaž
44 | default.button.delete.confirm.message=Jste si jistý?
45 |
46 | # Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
47 | typeMismatch.java.net.URL=Položka {0} musí být validní URL
48 | typeMismatch.java.net.URI=Položka {0} musí být validní URI
49 | typeMismatch.java.util.Date=Položka {0} musí být validní datum
50 | typeMismatch.java.lang.Double=Položka {0} musí být validní desetinné číslo
51 | typeMismatch.java.lang.Integer=Položka {0} musí být validní číslo
52 | typeMismatch.java.lang.Long=Položka {0} musí být validní číslo
53 | typeMismatch.java.lang.Short=Položka {0} musí být validní číslo
54 | typeMismatch.java.math.BigDecimal=Položka {0} musí být validní číslo
55 | typeMismatch.java.math.BigInteger=Položka {0} musí být validní číslo
56 |
--------------------------------------------------------------------------------
/grails-app/i18n/messages_da.properties:
--------------------------------------------------------------------------------
1 | default.doesnt.match.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] overholder ikke mønsteret [{3}]
2 | default.invalid.url.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] er ikke en gyldig URL
3 | default.invalid.creditCard.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] er ikke et gyldigt kreditkortnummer
4 | default.invalid.email.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] er ikke en gyldig e-mail adresse
5 | default.invalid.range.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] ligger ikke inden for intervallet fra [{3}] til [{4}]
6 | default.invalid.size.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] ligger ikke inden for størrelsen fra [{3}] til [{4}]
7 | default.invalid.max.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] overstiger den maksimale værdi [{3}]
8 | default.invalid.min.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] er under den minimale værdi [{3}]
9 | default.invalid.max.size.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] overstiger den maksimale størrelse på [{3}]
10 | default.invalid.min.size.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] er under den minimale størrelse på [{3}]
11 | default.invalid.validator.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] overholder ikke den brugerdefinerede validering
12 | default.not.inlist.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] findes ikke i listen [{3}]
13 | default.blank.message=Feltet [{0}] i klassen [{1}] kan ikke være tom
14 | default.not.equal.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] må ikke være [{3}]
15 | default.null.message=Feltet [{0}] i klassen [{1}] kan ikke være null
16 | default.not.unique.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] skal være unik
17 |
18 | default.paginate.prev=Forrige
19 | default.paginate.next=Næste
20 | default.boolean.true=Sand
21 | default.boolean.false=Falsk
22 | default.date.format=yyyy-MM-dd HH:mm:ss z
23 | default.number.format=0
24 |
25 | default.created.message={0} {1} oprettet
26 | default.updated.message={0} {1} opdateret
27 | default.deleted.message={0} {1} slettet
28 | default.not.deleted.message={0} {1} kunne ikke slettes
29 | default.not.found.message={0} med id {1} er ikke fundet
30 | default.optimistic.locking.failure=En anden bruger har opdateret denne {0} imens du har lavet rettelser
31 |
32 | default.home.label=Hjem
33 | default.list.label={0} Liste
34 | default.add.label=Tilføj {0}
35 | default.new.label=Ny {0}
36 | default.create.label=Opret {0}
37 | default.show.label=Vis {0}
38 | default.edit.label=Ret {0}
39 |
40 | default.button.create.label=Opret
41 | default.button.edit.label=Ret
42 | default.button.update.label=Opdater
43 | default.button.delete.label=Slet
44 | default.button.delete.confirm.message=Er du sikker?
45 |
46 | # Databindingsfejl. Brug "typeMismatch.$className.$propertyName for at passe til en given klasse (f.eks typeMismatch.Book.author)
47 | typeMismatch.java.net.URL=Feltet {0} skal være en valid URL
48 | typeMismatch.java.net.URI=Feltet {0} skal være en valid URI
49 | typeMismatch.java.util.Date=Feltet {0} skal være en valid Dato
50 | typeMismatch.java.lang.Double=Feltet {0} skal være et valid tal
51 | typeMismatch.java.lang.Integer=Feltet {0} skal være et valid tal
52 | typeMismatch.java.lang.Long=Feltet {0} skal være et valid tal
53 | typeMismatch.java.lang.Short=Feltet {0} skal være et valid tal
54 | typeMismatch.java.math.BigDecimal=Feltet {0} skal være et valid tal
55 | typeMismatch.java.math.BigInteger=Feltet {0} skal være et valid tal
56 |
57 |
--------------------------------------------------------------------------------
/grails-app/i18n/messages_de.properties:
--------------------------------------------------------------------------------
1 | default.doesnt.match.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] entspricht nicht dem vorgegebenen Muster [{3}]
2 | default.invalid.url.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist keine gültige URL
3 | default.invalid.creditCard.message=Das Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist keine gültige Kreditkartennummer
4 | default.invalid.email.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist keine gültige E-Mail Adresse
5 | default.invalid.range.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist nicht im Wertebereich von [{3}] bis [{4}]
6 | default.invalid.size.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist nicht im Wertebereich von [{3}] bis [{4}]
7 | default.invalid.max.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist größer als der Höchstwert von [{3}]
8 | default.invalid.min.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist kleiner als der Mindestwert von [{3}]
9 | default.invalid.max.size.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] übersteigt den Höchstwert von [{3}]
10 | default.invalid.min.size.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] unterschreitet den Mindestwert von [{3}]
11 | default.invalid.validator.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist ungültig
12 | default.not.inlist.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist nicht in der Liste [{3}] enthalten.
13 | default.blank.message=Die Eigenschaft [{0}] des Typs [{1}] darf nicht leer sein
14 | default.not.equal.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] darf nicht gleich [{3}] sein
15 | default.null.message=Die Eigenschaft [{0}] des Typs [{1}] darf nicht null sein
16 | default.not.unique.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] darf nur einmal vorkommen
17 |
18 | default.paginate.prev=Vorherige
19 | default.paginate.next=Nächste
20 | default.boolean.true=Wahr
21 | default.boolean.false=Falsch
22 | default.date.format=dd.MM.yyyy HH:mm:ss z
23 | default.number.format=0
24 |
25 | default.created.message={0} {1} wurde angelegt
26 | default.updated.message={0} {1} wurde geändert
27 | default.deleted.message={0} {1} wurde gelöscht
28 | default.not.deleted.message={0} {1} konnte nicht gelöscht werden
29 | default.not.found.message={0} mit der id {1} wurde nicht gefunden
30 | default.optimistic.locking.failure=Ein anderer Benutzer hat das {0} Object geändert während Sie es bearbeitet haben
31 |
32 | default.home.label=Home
33 | default.list.label={0} Liste
34 | default.add.label={0} hinzufügen
35 | default.new.label={0} anlegen
36 | default.create.label={0} anlegen
37 | default.show.label={0} anzeigen
38 | default.edit.label={0} bearbeiten
39 |
40 | default.button.create.label=Anlegen
41 | default.button.edit.label=Bearbeiten
42 | default.button.update.label=Aktualisieren
43 | default.button.delete.label=Löschen
44 | default.button.delete.confirm.message=Sind Sie sicher?
45 |
46 | # Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
47 | typeMismatch.java.net.URL=Die Eigenschaft {0} muss eine gültige URL sein
48 | typeMismatch.java.net.URI=Die Eigenschaft {0} muss eine gültige URI sein
49 | typeMismatch.java.util.Date=Die Eigenschaft {0} muss ein gültiges Datum sein
50 | typeMismatch.java.lang.Double=Die Eigenschaft {0} muss eine gültige Zahl sein
51 | typeMismatch.java.lang.Integer=Die Eigenschaft {0} muss eine gültige Zahl sein
52 | typeMismatch.java.lang.Long=Die Eigenschaft {0} muss eine gültige Zahl sein
53 | typeMismatch.java.lang.Short=Die Eigenschaft {0} muss eine gültige Zahl sein
54 | typeMismatch.java.math.BigDecimal=Die Eigenschaft {0} muss eine gültige Zahl sein
55 | typeMismatch.java.math.BigInteger=Die Eigenschaft {0} muss eine gültige Zahl sein
56 |
--------------------------------------------------------------------------------
/grails-app/i18n/messages_es.properties:
--------------------------------------------------------------------------------
1 | default.doesnt.match.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no corresponde al patrón [{3}]
2 | default.invalid.url.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no es una URL válida
3 | 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
4 | 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
5 | 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}]
6 | 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}]
7 | default.invalid.max.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] excede el valor máximo [{3}]
8 | default.invalid.min.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] es menos que el valor mínimo [{3}]
9 | default.invalid.max.size.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] excede el tamaño máximo de [{3}]
10 | 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}]
11 | default.invalid.validator.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no es válido
12 | default.not.inlist.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no esta contenido dentro de la lista [{3}]
13 | default.blank.message=La propiedad [{0}] de la clase [{1}] no puede ser vacía
14 | default.not.equal.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no puede igualar a [{3}]
15 | default.null.message=La propiedad [{0}] de la clase [{1}] no puede ser nulo
16 | default.not.unique.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] debe ser única
17 |
18 | default.paginate.prev=Anterior
19 | default.paginate.next=Siguiente
20 | default.boolean.true=Verdadero
21 | default.boolean.false=Falso
22 | default.date.format=yyyy-MM-dd HH:mm:ss z
23 | default.number.format=0
24 |
25 | default.created.message={0} {1} creado
26 | default.updated.message={0} {1} actualizado
27 | default.deleted.message={0} {1} eliminado
28 | default.not.deleted.message={0} {1} no puede eliminarse
29 | default.not.found.message=No se encuentra {0} con id {1}
30 | default.optimistic.locking.failure=Mientras usted editaba, otro usuario ha actualizado su {0}
31 |
32 | default.home.label=Principal
33 | default.list.label={0} Lista
34 | default.add.label=Agregar {0}
35 | default.new.label=Nuevo {0}
36 | default.create.label=Crear {0}
37 | default.show.label=Mostrar {0}
38 | default.edit.label=Editar {0}
39 |
40 | default.button.create.label=Crear
41 | default.button.edit.label=Editar
42 | default.button.update.label=Actualizar
43 | default.button.delete.label=Eliminar
44 | default.button.delete.confirm.message=¿Está usted seguro?
45 |
46 | # Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
47 | typeMismatch.java.net.URL=La propiedad {0} debe ser una URL válida
48 | typeMismatch.java.net.URI=La propiedad {0} debe ser una URI válida
49 | typeMismatch.java.util.Date=La propiedad {0} debe ser una fecha válida
50 | typeMismatch.java.lang.Double=La propiedad {0} debe ser un número válido
51 | typeMismatch.java.lang.Integer=La propiedad {0} debe ser un número válido
52 | typeMismatch.java.lang.Long=La propiedad {0} debe ser un número válido
53 | typeMismatch.java.lang.Short=La propiedad {0} debe ser un número válido
54 | typeMismatch.java.math.BigDecimal=La propiedad {0} debe ser un número válido
55 | typeMismatch.java.math.BigInteger=La propiedad {0} debe ser un número válido
--------------------------------------------------------------------------------
/grails-app/i18n/messages_fr.properties:
--------------------------------------------------------------------------------
1 | default.doesnt.match.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] ne correspond pas au pattern [{3}]
2 | default.invalid.url.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas une URL valide
3 | 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
4 | default.invalid.email.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas une adresse e-mail valide
5 | 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}]
6 | 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}]
7 | default.invalid.max.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] est supérieure à la valeur maximum [{3}]
8 | default.invalid.min.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] est inférieure à la valeur minimum [{3}]
9 | default.invalid.max.size.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] est supérieure à la valeur maximum [{3}]
10 | default.invalid.min.size.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] est inférieure à la valeur minimum [{3}]
11 | default.invalid.validator.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas valide
12 | default.not.inlist.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] ne fait pas partie de la liste [{3}]
13 | default.blank.message=La propriété [{0}] de la classe [{1}] ne peut pas être vide
14 | default.not.equal.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] ne peut pas être égale à [{3}]
15 | default.null.message=La propriété [{0}] de la classe [{1}] ne peut pas être nulle
16 | default.not.unique.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] doit être unique
17 |
18 | default.paginate.prev=Précédent
19 | default.paginate.next=Suivant
20 |
--------------------------------------------------------------------------------
/grails-app/i18n/messages_it.properties:
--------------------------------------------------------------------------------
1 | default.doesnt.match.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non corrisponde al pattern [{3}]
2 | default.invalid.url.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non è un URL valido
3 | default.invalid.creditCard.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non è un numero di carta di credito valido
4 | default.invalid.email.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non è un indirizzo email valido
5 | default.invalid.range.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non rientra nell'intervallo valido da [{3}] a [{4}]
6 | default.invalid.size.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non rientra nell'intervallo di dimensioni valide da [{3}] a [{4}]
7 | default.invalid.max.message=La proprietà [{0}] della classe [{1}] con valore [{2}] è maggiore di [{3}]
8 | default.invalid.min.message=La proprietà [{0}] della classe [{1}] con valore [{2}] è minore di [{3}]
9 | default.invalid.max.size.message=La proprietà [{0}] della classe [{1}] con valore [{2}] è maggiore di [{3}]
10 | default.invalid.min.size.message=La proprietà [{0}] della classe [{1}] con valore [{2}] è minore di [{3}]
11 | default.invalid.validator.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non è valida
12 | default.not.inlist.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non è contenuta nella lista [{3}]
13 | default.blank.message=La proprietà [{0}] della classe [{1}] non può essere vuota
14 | default.not.equal.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non può essere uguale a [{3}]
15 | default.null.message=La proprietà [{0}] della classe [{1}] non può essere null
16 | default.not.unique.message=La proprietà [{0}] della classe [{1}] con valore [{2}] deve essere unica
17 |
18 | default.paginate.prev=Precedente
19 | default.paginate.next=Successivo
20 | default.boolean.true=Vero
21 | default.boolean.false=Falso
22 | default.date.format=dd/MM/yyyy HH:mm:ss z
23 | default.number.format=0
24 |
25 | default.created.message={0} {1} creato
26 | default.updated.message={0} {1} aggiornato
27 | default.deleted.message={0} {1} eliminato
28 | default.not.deleted.message={0} {1} non può essere eliminato
29 | default.not.found.message={0} non trovato con id {1}
30 | default.optimistic.locking.failure=Un altro utente ha aggiornato questo {0} mentre si era in modifica
31 |
32 | default.home.label=Home
33 | default.list.label={0} Elenco
34 | default.add.label=Aggiungi {0}
35 | default.new.label=Nuovo {0}
36 | default.create.label=Crea {0}
37 | default.show.label=Mostra {0}
38 | default.edit.label=Modifica {0}
39 |
40 | default.button.create.label=Crea
41 | default.button.edit.label=Modifica
42 | default.button.update.label=Aggiorna
43 | default.button.delete.label=Elimina
44 | default.button.delete.confirm.message=Si è sicuri?
45 |
46 | # Data binding errors. Usa "typeMismatch.$className.$propertyName per la personalizzazione (es typeMismatch.Book.author)
47 | typeMismatch.java.net.URL=La proprietà {0} deve essere un URL valido
48 | typeMismatch.java.net.URI=La proprietà {0} deve essere un URI valido
49 | typeMismatch.java.util.Date=La proprietà {0} deve essere una data valida
50 | typeMismatch.java.lang.Double=La proprietà {0} deve essere un numero valido
51 | typeMismatch.java.lang.Integer=La proprietà {0} deve essere un numero valido
52 | typeMismatch.java.lang.Long=La proprietà {0} deve essere un numero valido
53 | typeMismatch.java.lang.Short=La proprietà {0} deve essere un numero valido
54 | typeMismatch.java.math.BigDecimal=La proprietà {0} deve essere un numero valido
55 | typeMismatch.java.math.BigInteger=La proprietà {0} deve essere un numero valido
56 |
--------------------------------------------------------------------------------
/grails-app/i18n/messages_ja.properties:
--------------------------------------------------------------------------------
1 | default.doesnt.match.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、[{3}]パターンと一致していません。
2 | default.invalid.url.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、有効なURLではありません。
3 | default.invalid.creditCard.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、有効なクレジットカード番号ではありません。
4 | default.invalid.email.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、有効なメールアドレスではありません。
5 | default.invalid.range.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、[{3}]から[{4}]範囲内を指定してください。
6 | default.invalid.size.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、[{3}]から[{4}]以内を指定してください。
7 | default.invalid.max.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、最大値[{3}]より大きいです。
8 | default.invalid.min.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、最小値[{3}]より小さいです。
9 | default.invalid.max.size.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、最大値[{3}]より大きいです。
10 | default.invalid.min.size.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、最小値[{3}]より小さいです。
11 | default.invalid.validator.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、カスタムバリデーションを通過できません。
12 | default.not.inlist.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、[{3}]リスト内に存在しません。
13 | default.blank.message=[{1}]クラスのプロパティ[{0}]の空白は許可されません。
14 | default.not.equal.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、[{3}]と同等ではありません。
15 | default.null.message=[{1}]クラスのプロパティ[{0}]にnullは許可されません。
16 | default.not.unique.message=クラス[{1}]プロパティ[{0}]の値[{2}]は既に使用されています。
17 |
18 | default.paginate.prev=戻る
19 | default.paginate.next=次へ
20 | default.boolean.true=はい
21 | default.boolean.false=いいえ
22 | default.date.format=yyyy/MM/dd HH:mm:ss z
23 | default.number.format=0
24 |
25 | default.created.message={0}(id:{1})を作成しました。
26 | default.updated.message={0}(id:{1})を更新しました。
27 | default.deleted.message={0}(id:{1})を削除しました。
28 | default.not.deleted.message={0}(id:{1})は削除できませんでした。
29 | default.not.found.message={0}(id:{1})は見つかりませんでした。
30 | default.optimistic.locking.failure=この{0}は編集中に他のユーザによって先に更新されています。
31 |
32 | default.home.label=ホーム
33 | default.list.label={0}リスト
34 | default.add.label={0}を追加
35 | default.new.label={0}を新規作成
36 | default.create.label={0}を作成
37 | default.show.label={0}詳細
38 | default.edit.label={0}を編集
39 |
40 | default.button.create.label=作成
41 | default.button.edit.label=編集
42 | default.button.update.label=更新
43 | default.button.delete.label=削除
44 | default.button.delete.confirm.message=本当に削除してよろしいですか?
45 |
46 | # Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
47 | typeMismatch.java.net.URL={0}は有効なURLでなければなりません。
48 | typeMismatch.java.net.URI={0}は有効なURIでなければなりません。
49 | typeMismatch.java.util.Date={0}は有効な日付でなければなりません。
50 | typeMismatch.java.lang.Double={0}は有効な数値でなければなりません。
51 | typeMismatch.java.lang.Integer={0}は有効な数値でなければなりません。
52 | typeMismatch.java.lang.Long={0}は有効な数値でなければなりません。
53 | typeMismatch.java.lang.Short={0}は有効な数値でなければなりません。
54 | typeMismatch.java.math.BigDecimal={0}は有効な数値でなければなりません。
55 | typeMismatch.java.math.BigInteger={0}は有効な数値でなければなりません。
56 |
--------------------------------------------------------------------------------
/grails-app/i18n/messages_nb.properties:
--------------------------------------------------------------------------------
1 | default.doesnt.match.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] overholder ikke mønsteret [{3}]
2 | default.invalid.url.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er ikke en gyldig URL
3 | default.invalid.creditCard.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er ikke et gyldig kredittkortnummer
4 | default.invalid.email.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er ikke en gyldig epostadresse
5 | default.invalid.range.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er ikke innenfor intervallet [{3}] til [{4}]
6 | default.invalid.size.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er ikke innenfor intervallet [{3}] til [{4}]
7 | default.invalid.max.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] overstiger maksimumsverdien på [{3}]
8 | default.invalid.min.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er under minimumsverdien på [{3}]
9 | default.invalid.max.size.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] overstiger maksimumslengden på [{3}]
10 | default.invalid.min.size.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er kortere enn minimumslengden på [{3}]
11 | default.invalid.validator.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] overholder ikke den brukerdefinerte valideringen
12 | default.not.inlist.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] finnes ikke i listen [{3}]
13 | default.blank.message=Feltet [{0}] i klassen [{1}] kan ikke være tom
14 | default.not.equal.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] kan ikke være [{3}]
15 | default.null.message=Feltet [{0}] i klassen [{1}] kan ikke være null
16 | default.not.unique.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] må være unik
17 |
18 | default.paginate.prev=Forrige
19 | default.paginate.next=Neste
20 | default.boolean.true=Ja
21 | default.boolean.false=Nei
22 | default.date.format=dd.MM.yyyy HH:mm:ss z
23 | default.number.format=0
24 |
25 | default.created.message={0} {1} opprettet
26 | default.updated.message={0} {1} oppdatert
27 | default.deleted.message={0} {1} slettet
28 | default.not.deleted.message={0} {1} kunne ikke slettes
29 | default.not.found.message={0} med id {1} ble ikke funnet
30 | default.optimistic.locking.failure=En annen bruker har oppdatert denne {0} mens du redigerte
31 |
32 | default.home.label=Hjem
33 | default.list.label={0}liste
34 | default.add.label=Legg til {0}
35 | default.new.label=Ny {0}
36 | default.create.label=Opprett {0}
37 | default.show.label=Vis {0}
38 | default.edit.label=Endre {0}
39 |
40 | default.button.create.label=Opprett
41 | default.button.edit.label=Endre
42 | default.button.update.label=Oppdater
43 | default.button.delete.label=Slett
44 | default.button.delete.confirm.message=Er du sikker?
45 |
46 | # Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
47 | typeMismatch.java.net.URL=Feltet {0} må være en gyldig URL
48 | typeMismatch.java.net.URI=Feltet {0} må være en gyldig URI
49 | typeMismatch.java.util.Date=Feltet {0} må være en gyldig dato
50 | typeMismatch.java.lang.Double=Feltet {0} må være et gyldig tall
51 | typeMismatch.java.lang.Integer=Feltet {0} må være et gyldig heltall
52 | typeMismatch.java.lang.Long=Feltet {0} må være et gyldig heltall
53 | typeMismatch.java.lang.Short=Feltet {0} må være et gyldig heltall
54 | typeMismatch.java.math.BigDecimal=Feltet {0} må være et gyldig tall
55 | typeMismatch.java.math.BigInteger=Feltet {0} må være et gyldig heltall
56 |
57 |
--------------------------------------------------------------------------------
/grails-app/i18n/messages_nl.properties:
--------------------------------------------------------------------------------
1 | default.doesnt.match.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] komt niet overeen met het vereiste patroon [{3}]
2 | default.invalid.url.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is geen geldige URL
3 | default.invalid.creditCard.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is geen geldig credit card nummer
4 | default.invalid.email.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is geen geldig e-mailadres
5 | default.invalid.range.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] valt niet in de geldige waardenreeks van [{3}] tot [{4}]
6 | default.invalid.size.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] valt niet in de geldige grootte van [{3}] tot [{4}]
7 | default.invalid.max.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] overschrijdt de maximumwaarde [{3}]
8 | default.invalid.min.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is minder dan de minimumwaarde [{3}]
9 | default.invalid.max.size.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] overschrijdt de maximumgrootte van [{3}]
10 | default.invalid.min.size.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is minder dan minimumgrootte van [{3}]
11 | default.invalid.validator.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is niet geldig
12 | default.not.inlist.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] komt niet voor in de lijst [{3}]
13 | default.blank.message=Attribuut [{0}] van entiteit [{1}] mag niet leeg zijn
14 | default.not.equal.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] mag niet gelijk zijn aan [{3}]
15 | default.null.message=Attribuut [{0}] van entiteit [{1}] mag niet leeg zijn
16 | default.not.unique.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] moet uniek zijn
17 |
18 | default.paginate.prev=Vorige
19 | default.paginate.next=Volgende
20 | default.boolean.true=Ja
21 | default.boolean.false=Nee
22 | default.date.format=dd-MM-yyyy HH:mm:ss z
23 | default.number.format=0
24 |
25 | default.created.message={0} {1} ingevoerd
26 | default.updated.message={0} {1} gewijzigd
27 | default.deleted.message={0} {1} verwijderd
28 | default.not.deleted.message={0} {1} kon niet worden verwijderd
29 | default.not.found.message={0} met id {1} kon niet worden gevonden
30 | default.optimistic.locking.failure=Een andere gebruiker heeft deze {0} al gewijzigd
31 |
32 | default.home.label=Home
33 | default.list.label={0} Overzicht
34 | default.add.label=Toevoegen {0}
35 | default.new.label=Invoeren {0}
36 | default.create.label=Invoeren {0}
37 | default.show.label=Details {0}
38 | default.edit.label=Wijzigen {0}
39 |
40 | default.button.create.label=Invoeren
41 | default.button.edit.label=Wijzigen
42 | default.button.update.label=Opslaan
43 | default.button.delete.label=Verwijderen
44 | default.button.delete.confirm.message=Weet je het zeker?
45 |
46 | # Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
47 | typeMismatch.java.net.URL=Attribuut {0} is geen geldige URL
48 | typeMismatch.java.net.URI=Attribuut {0} is geen geldige URI
49 | typeMismatch.java.util.Date=Attribuut {0} is geen geldige datum
50 | typeMismatch.java.lang.Double=Attribuut {0} is geen geldig nummer
51 | typeMismatch.java.lang.Integer=Attribuut {0} is geen geldig nummer
52 | typeMismatch.java.lang.Long=Attribuut {0} is geen geldig nummer
53 | typeMismatch.java.lang.Short=Attribuut {0} is geen geldig nummer
54 | typeMismatch.java.math.BigDecimal=Attribuut {0} is geen geldig nummer
55 | typeMismatch.java.math.BigInteger=Attribuut {0} is geen geldig nummer
56 |
--------------------------------------------------------------------------------
/grails-app/i18n/messages_pl.properties:
--------------------------------------------------------------------------------
1 | #
2 | # Translated by Matthias Hryniszak - padcom@gmail.com
3 | #
4 |
5 | default.doesnt.match.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie pasuje do wymaganego wzorca [{3}]
6 | default.invalid.url.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] jest niepoprawnym adresem URL
7 | default.invalid.creditCard.message=Właściwość [{0}] klasy [{1}] with value [{2}] nie jest poprawnym numerem karty kredytowej
8 | default.invalid.email.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie jest poprawnym adresem e-mail
9 | default.invalid.range.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie zawiera się zakładanym zakresie od [{3}] do [{4}]
10 | default.invalid.size.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie zawiera się w zakładanym zakresie rozmiarów od [{3}] do [{4}]
11 | default.invalid.max.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] przekracza maksymalną wartość [{3}]
12 | default.invalid.min.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] jest mniejsza niż minimalna wartość [{3}]
13 | default.invalid.max.size.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] przekracza maksymalny rozmiar [{3}]
14 | default.invalid.min.size.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] jest mniejsza niż minimalny rozmiar [{3}]
15 | default.invalid.validator.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie spełnia założonych niestandardowych warunków
16 | default.not.inlist.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie zawiera się w liście [{3}]
17 | default.blank.message=Właściwość [{0}] klasy [{1}] nie może być pusta
18 | default.not.equal.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie może równać się [{3}]
19 | default.null.message=Właściwość [{0}] klasy [{1}] nie może być null
20 | default.not.unique.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] musi być unikalna
21 |
22 | default.paginate.prev=Poprzedni
23 | default.paginate.next=Następny
24 | default.boolean.true=Prawda
25 | default.boolean.false=Fałsz
26 | default.date.format=yyyy-MM-dd HH:mm:ss z
27 | default.number.format=0
28 |
29 | default.created.message=Utworzono {0} {1}
30 | default.updated.message=Zaktualizowano {0} {1}
31 | default.deleted.message=Usunięto {0} {1}
32 | default.not.deleted.message={0} {1} nie mógł zostać usunięty
33 | default.not.found.message=Nie znaleziono {0} o id {1}
34 | default.optimistic.locking.failure=Inny użytkownik zaktualizował ten obiekt {0} w trakcie twoich zmian
35 |
36 | default.home.label=Strona domowa
37 | default.list.label=Lista {0}
38 | default.add.label=Dodaj {0}
39 | default.new.label=Utwórz {0}
40 | default.create.label=Utwórz {0}
41 | default.show.label=Pokaż {0}
42 | default.edit.label=Edytuj {0}
43 |
44 | default.button.create.label=Utwórz
45 | default.button.edit.label=Edytuj
46 | default.button.update.label=Zaktualizuj
47 | default.button.delete.label=Usuń
48 | default.button.delete.confirm.message=Czy jesteś pewien?
49 |
50 | # Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
51 | typeMismatch.java.net.URL=Właściwość {0} musi być poprawnym adresem URL
52 | typeMismatch.java.net.URI=Właściwość {0} musi być poprawnym adresem URI
53 | typeMismatch.java.util.Date=Właściwość {0} musi być poprawną datą
54 | typeMismatch.java.lang.Double=Właściwość {0} musi być poprawnyą liczbą
55 | typeMismatch.java.lang.Integer=Właściwość {0} musi być poprawnyą liczbą
56 | typeMismatch.java.lang.Long=Właściwość {0} musi być poprawnyą liczbą
57 | typeMismatch.java.lang.Short=Właściwość {0} musi być poprawnyą liczbą
58 | typeMismatch.java.math.BigDecimal=Właściwość {0} musi być poprawnyą liczbą
59 | typeMismatch.java.math.BigInteger=Właściwość {0} musi być poprawnyą liczbą
60 |
--------------------------------------------------------------------------------
/grails-app/i18n/messages_pt_BR.properties:
--------------------------------------------------------------------------------
1 | #
2 | # Translated by Lucas Teixeira - lucastex@gmail.com
3 | #
4 |
5 | default.doesnt.match.message=O campo [{0}] da classe [{1}] com o valor [{2}] não atende ao padrão definido [{3}]
6 | default.invalid.url.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é uma URL válida
7 | 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
8 | default.invalid.email.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é um endereço de email válido.
9 | 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}]
10 | 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}]
11 | default.invalid.max.message=O campo [{0}] da classe [{1}] com o valor [{2}] ultrapassa o valor máximo [{3}]
12 | default.invalid.min.message=O campo [{0}] da classe [{1}] com o valor [{2}] não atinge o valor mínimo [{3}]
13 | default.invalid.max.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] ultrapassa o tamanho máximo de [{3}]
14 | default.invalid.min.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] não atinge o tamanho mínimo de [{3}]
15 | default.invalid.validator.message=O campo [{0}] da classe [{1}] com o valor [{2}] não passou na validação
16 | default.not.inlist.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é um valor dentre os permitidos na lista [{3}]
17 | default.blank.message=O campo [{0}] da classe [{1}] não pode ficar em branco
18 | default.not.equal.message=O campo [{0}] da classe [{1}] com o valor [{2}] não pode ser igual a [{3}]
19 | default.null.message=O campo [{0}] da classe [{1}] não pode ser vazio
20 | default.not.unique.message=O campo [{0}] da classe [{1}] com o valor [{2}] deve ser único
21 |
22 | default.paginate.prev=Anterior
23 | default.paginate.next=Próximo
24 | default.boolean.true=Sim
25 | default.boolean.false=Não
26 | default.date.format=dd/MM/yyyy HH:mm:ss z
27 | default.number.format=0
28 |
29 | default.created.message={0} {1} criado
30 | default.updated.message={0} {1} atualizado
31 | default.deleted.message={0} {1} removido
32 | default.not.deleted.message={0} {1} não pode ser removido
33 | default.not.found.message={0} não foi encontrado com o id {1}
34 | default.optimistic.locking.failure=Outro usuário atualizou este [{0}] enquanto você tentou salvá-lo
35 |
36 | default.home.label=Principal
37 | default.list.label={0} Listagem
38 | default.add.label=Adicionar {0}
39 | default.new.label=Novo {0}
40 | default.create.label=Criar {0}
41 | default.show.label=Ver {0}
42 | default.edit.label=Editar {0}
43 |
44 | default.button.create.label=Criar
45 | default.button.edit.label=Editar
46 | default.button.update.label=Alterar
47 | default.button.delete.label=Remover
48 | default.button.delete.confirm.message=Tem certeza?
49 |
50 | # Mensagens de erro em atribuição de valores. Use "typeMismatch.$className.$propertyName" para customizar (eg typeMismatch.Book.author)
51 | typeMismatch.java.net.URL=O campo {0} deve ser uma URL válida.
52 | typeMismatch.java.net.URI=O campo {0} deve ser uma URI válida.
53 | typeMismatch.java.util.Date=O campo {0} deve ser uma data válida
54 | typeMismatch.java.lang.Double=O campo {0} deve ser um número válido.
55 | typeMismatch.java.lang.Integer=O campo {0} deve ser um número válido.
56 | typeMismatch.java.lang.Long=O campo {0} deve ser um número válido.
57 | typeMismatch.java.lang.Short=O campo {0} deve ser um número válido.
58 | typeMismatch.java.math.BigDecimal=O campo {0} deve ser um número válido.
59 | typeMismatch.java.math.BigInteger=O campo {0} deve ser um número válido.
60 |
--------------------------------------------------------------------------------
/grails-app/i18n/messages_pt_PT.properties:
--------------------------------------------------------------------------------
1 | #
2 | # translation by miguel.ping@gmail.com, based on pt_BR translation by Lucas Teixeira - lucastex@gmail.com
3 | #
4 |
5 | default.doesnt.match.message=O campo [{0}] da classe [{1}] com o valor [{2}] não corresponde ao padrão definido [{3}]
6 | default.invalid.url.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é um URL válido
7 | 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
8 | default.invalid.email.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é um endereço de email válido.
9 | default.invalid.range.message=O campo [{0}] da classe [{1}] com o valor [{2}] não está dentro dos limites de valores válidos de [{3}] a [{4}]
10 | default.invalid.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] está fora dos limites de tamanho válido de [{3}] a [{4}]
11 | default.invalid.max.message=O campo [{0}] da classe [{1}] com o valor [{2}] ultrapassa o valor máximo [{3}]
12 | default.invalid.min.message=O campo [{0}] da classe [{1}] com o valor [{2}] não atinge o valor mínimo [{3}]
13 | default.invalid.max.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] ultrapassa o tamanho máximo de [{3}]
14 | default.invalid.min.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] não atinge o tamanho mínimo de [{3}]
15 | default.invalid.validator.message=O campo [{0}] da classe [{1}] com o valor [{2}] não passou na validação
16 | default.not.inlist.message=O campo [{0}] da classe [{1}] com o valor [{2}] não se encontra nos valores permitidos da lista [{3}]
17 | default.blank.message=O campo [{0}] da classe [{1}] não pode ser vazio
18 | default.not.equal.message=O campo [{0}] da classe [{1}] com o valor [{2}] não pode ser igual a [{3}]
19 | default.null.message=O campo [{0}] da classe [{1}] não pode ser vazio
20 | default.not.unique.message=O campo [{0}] da classe [{1}] com o valor [{2}] deve ser único
21 |
22 | default.paginate.prev=Anterior
23 | default.paginate.next=Próximo
24 |
25 | # Mensagens de erro em atribuição de valores. Use "typeMismatch.$className.$propertyName" para personalizar(eg typeMismatch.Book.author)
26 | typeMismatch.java.net.URL=O campo {0} deve ser um URL válido.
27 | typeMismatch.java.net.URI=O campo {0} deve ser um URI válido.
28 | typeMismatch.java.util.Date=O campo {0} deve ser uma data válida
29 | typeMismatch.java.lang.Double=O campo {0} deve ser um número válido.
30 | typeMismatch.java.lang.Integer=O campo {0} deve ser um número válido.
31 | typeMismatch.java.lang.Long=O campo {0} deve ser um número valido.
32 | typeMismatch.java.lang.Short=O campo {0} deve ser um número válido.
33 | typeMismatch.java.math.BigDecimal=O campo {0} deve ser um número válido.
34 | typeMismatch.java.math.BigInteger=O campo {0} deve ser um número válido.
35 |
--------------------------------------------------------------------------------
/grails-app/i18n/messages_ru.properties:
--------------------------------------------------------------------------------
1 | default.doesnt.match.message=Значение [{2}] поля [{0}] класса [{1}] не соответствует образцу [{3}]
2 | default.invalid.url.message=Значение [{2}] поля [{0}] класса [{1}] не является допустимым URL-адресом
3 | default.invalid.creditCard.message=Значение [{2}] поля [{0}] класса [{1}] не является допустимым номером кредитной карты
4 | default.invalid.email.message=Значение [{2}] поля [{0}] класса [{1}] не является допустимым e-mail адресом
5 | default.invalid.range.message=Значение [{2}] поля [{0}] класса [{1}] не попадает в допустимый интервал от [{3}] до [{4}]
6 | default.invalid.size.message=Размер поля [{0}] класса [{1}] (значение: [{2}]) не попадает в допустимый интервал от [{3}] до [{4}]
7 | default.invalid.max.message=Значение [{2}] поля [{0}] класса [{1}] больше чем максимально допустимое значение [{3}]
8 | default.invalid.min.message=Значение [{2}] поля [{0}] класса [{1}] меньше чем минимально допустимое значение [{3}]
9 | default.invalid.max.size.message=Размер поля [{0}] класса [{1}] (значение: [{2}]) больше чем максимально допустимый размер [{3}]
10 | default.invalid.min.size.message=Размер поля [{0}] класса [{1}] (значение: [{2}]) меньше чем минимально допустимый размер [{3}]
11 | default.invalid.validator.message=Значение [{2}] поля [{0}] класса [{1}] не допустимо
12 | default.not.inlist.message=Значение [{2}] поля [{0}] класса [{1}] не попадает в список допустимых значений [{3}]
13 | default.blank.message=Поле [{0}] класса [{1}] не может быть пустым
14 | default.not.equal.message=Значение [{2}] поля [{0}] класса [{1}] не может быть равно [{3}]
15 | default.null.message=Поле [{0}] класса [{1}] не может иметь значение null
16 | default.not.unique.message=Значение [{2}] поля [{0}] класса [{1}] должно быть уникальным
17 |
18 | default.paginate.prev=Предыдушая страница
19 | default.paginate.next=Следующая страница
20 |
21 | # Ошибки при присвоении данных. Для точной настройки для полей классов используйте
22 | # формат "typeMismatch.$className.$propertyName" (например, typeMismatch.Book.author)
23 | typeMismatch.java.net.URL=Значение поля {0} не является допустимым URL
24 | typeMismatch.java.net.URI=Значение поля {0} не является допустимым URI
25 | typeMismatch.java.util.Date=Значение поля {0} не является допустимой датой
26 | typeMismatch.java.lang.Double=Значение поля {0} не является допустимым числом
27 | typeMismatch.java.lang.Integer=Значение поля {0} не является допустимым числом
28 | typeMismatch.java.lang.Long=Значение поля {0} не является допустимым числом
29 | typeMismatch.java.lang.Short=Значение поля {0} не является допустимым числом
30 | typeMismatch.java.math.BigDecimal=Значение поля {0} не является допустимым числом
31 | typeMismatch.java.math.BigInteger=Значение поля {0} не является допустимым числом
32 |
--------------------------------------------------------------------------------
/grails-app/i18n/messages_sv.properties:
--------------------------------------------------------------------------------
1 | default.doesnt.match.message=Attributet [{0}] för klassen [{1}] med värde [{2}] matchar inte mot uttrycket [{3}]
2 | default.invalid.url.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är inte en giltig URL
3 | default.invalid.creditCard.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är inte ett giltigt kreditkortsnummer
4 | default.invalid.email.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är inte en giltig e-postadress
5 | default.invalid.range.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är inte inom intervallet [{3}] till [{4}]
6 | default.invalid.size.message=Attributet [{0}] för klassen [{1}] med värde [{2}] har en storlek som inte är inom [{3}] till [{4}]
7 | default.invalid.max.message=Attributet [{0}] för klassen [{1}] med värde [{2}] överskrider maxvärdet [{3}]
8 | default.invalid.min.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är mindre än minimivärdet [{3}]
9 | default.invalid.max.size.message=Attributet [{0}] för klassen [{1}] med värde [{2}] överskrider maxstorleken [{3}]
10 | default.invalid.min.size.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är mindre än minimistorleken [{3}]
11 | default.invalid.validator.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är inte giltigt enligt anpassad regel
12 | default.not.inlist.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är inte giltigt, måste vara ett av [{3}]
13 | default.blank.message=Attributet [{0}] för klassen [{1}] får inte vara tomt
14 | default.not.equal.message=Attributet [{0}] för klassen [{1}] med värde [{2}] får inte vara lika med [{3}]
15 | default.null.message=Attributet [{0}] för klassen [{1}] får inte vara tomt
16 | default.not.unique.message=Attributet [{0}] för klassen [{1}] med värde [{2}] måste vara unikt
17 |
18 | default.paginate.prev=Föregående
19 | default.paginate.next=Nästa
20 | default.boolean.true=Sant
21 | default.boolean.false=Falskt
22 | default.date.format=yyyy-MM-dd HH:mm:ss z
23 | default.number.format=0
24 |
25 | default.created.message={0} {1} skapades
26 | default.updated.message={0} {1} uppdaterades
27 | default.deleted.message={0} {1} borttagen
28 | default.not.deleted.message={0} {1} kunde inte tas bort
29 | default.not.found.message={0} med id {1} kunde inte hittas
30 | default.optimistic.locking.failure=En annan användare har uppdaterat det här {0} objektet medan du redigerade det
31 |
32 | default.home.label=Hem
33 | default.list.label= {0} - Lista
34 | default.add.label=Lägg till {0}
35 | default.new.label=Skapa {0}
36 | default.create.label=Skapa {0}
37 | default.show.label=Visa {0}
38 | default.edit.label=Ändra {0}
39 |
40 | default.button.create.label=Skapa
41 | default.button.edit.label=Ändra
42 | default.button.update.label=Uppdatera
43 | default.button.delete.label=Ta bort
44 | default.button.delete.confirm.message=Är du säker?
45 |
46 | # Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
47 | typeMismatch.java.net.URL=Värdet för {0} måste vara en giltig URL
48 | typeMismatch.java.net.URI=Värdet för {0} måste vara en giltig URI
49 | typeMismatch.java.util.Date=Värdet {0} måste vara ett giltigt datum
50 | typeMismatch.java.lang.Double=Värdet {0} måste vara ett giltigt nummer
51 | typeMismatch.java.lang.Integer=Värdet {0} måste vara ett giltigt heltal
52 | typeMismatch.java.lang.Long=Värdet {0} måste vara ett giltigt heltal
53 | typeMismatch.java.lang.Short=Värdet {0} måste vara ett giltigt heltal
54 | typeMismatch.java.math.BigDecimal=Värdet {0} måste vara ett giltigt nummer
55 | typeMismatch.java.math.BigInteger=Värdet {0} måste vara ett giltigt heltal
--------------------------------------------------------------------------------
/grails-app/i18n/messages_th.properties:
--------------------------------------------------------------------------------
1 | default.doesnt.match.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ถูกต้องตามรูปแบบที่กำหนดไว้ใน [{3}]
2 | default.invalid.url.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ถูกต้องตามรูปแบบ URL
3 | default.invalid.creditCard.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ถูกต้องตามรูปแบบหมายเลขบัตรเครดิต
4 | default.invalid.email.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ถูกต้องตามรูปแบบอีเมล์
5 | default.invalid.range.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ได้มีค่าที่ถูกต้องในช่วงจาก [{3}] ถึง [{4}]
6 | default.invalid.size.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ได้มีขนาดที่ถูกต้องในช่วงจาก [{3}] ถึง [{4}]
7 | default.invalid.max.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] มีค่าเกิดกว่าค่ามากสุด [{3}]
8 | default.invalid.min.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] มีค่าน้อยกว่าค่าต่ำสุด [{3}]
9 | default.invalid.max.size.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] มีขนาดเกินกว่าขนาดมากสุดของ [{3}]
10 | default.invalid.min.size.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] มีขนาดต่ำกว่าขนาดต่ำสุดของ [{3}]
11 | default.invalid.validator.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ผ่านการทวนสอบค่าที่ตั้งขึ้น
12 | default.not.inlist.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ได้อยู่ในรายการต่อไปนี้ [{3}]
13 | default.blank.message=คุณสมบัติ [{0}] ของคลาส [{1}] ไม่สามารถเป็นค่าว่างได้
14 | default.not.equal.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่สามารถเท่ากับ [{3}] ได้
15 | default.null.message=คุณสมบัติ [{0}] ของคลาส [{1}] ไม่สามารถเป็น null ได้
16 | default.not.unique.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] จะต้องไม่ซ้ำ (unique)
17 |
18 | default.paginate.prev=ก่อนหน้า
19 | default.paginate.next=ถัดไป
20 | default.boolean.true=จริง
21 | default.boolean.false=เท็จ
22 | default.date.format=dd-MM-yyyy HH:mm:ss z
23 | default.number.format=0
24 |
25 | default.created.message=สร้าง {0} {1} เรียบร้อยแล้ว
26 | default.updated.message=ปรับปรุง {0} {1} เรียบร้อยแล้ว
27 | default.deleted.message=ลบ {0} {1} เรียบร้อยแล้ว
28 | default.not.deleted.message=ไม่สามารถลบ {0} {1}
29 | default.not.found.message=ไม่พบ {0} ด้วย id {1} นี้
30 | default.optimistic.locking.failure=มีผู้ใช้ท่านอื่นปรับปรุง {0} ขณะที่คุณกำลังแก้ไขข้อมูลอยู่
31 |
32 | default.home.label=หน้าแรก
33 | default.list.label=รายการ {0}
34 | default.add.label=เพิ่ม {0}
35 | default.new.label=สร้าง {0} ใหม่
36 | default.create.label=สร้าง {0}
37 | default.show.label=แสดง {0}
38 | default.edit.label=แก้ไข {0}
39 |
40 | default.button.create.label=สร้าง
41 | default.button.edit.label=แก้ไข
42 | default.button.update.label=ปรับปรุง
43 | default.button.delete.label=ลบ
44 | default.button.delete.confirm.message=คุณแน่ใจหรือไม่ ?
45 |
46 | # Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
47 | typeMismatch.java.net.URL=คุณสมบัติ '{0}' จะต้องเป็นค่า URL ที่ถูกต้อง
48 | typeMismatch.java.net.URI=คุณสมบัติ '{0}' จะต้องเป็นค่า URI ที่ถูกต้อง
49 | typeMismatch.java.util.Date=คุณสมบัติ '{0}' จะต้องมีค่าเป็นวันที่
50 | typeMismatch.java.lang.Double=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท Double
51 | typeMismatch.java.lang.Integer=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท Integer
52 | typeMismatch.java.lang.Long=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท Long
53 | typeMismatch.java.lang.Short=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท Short
54 | typeMismatch.java.math.BigDecimal=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท BigDecimal
55 | typeMismatch.java.math.BigInteger=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท BigInteger
56 |
--------------------------------------------------------------------------------
/grails-app/i18n/messages_zh_CN.properties:
--------------------------------------------------------------------------------
1 | default.blank.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u4E0D\u80FD\u4E3A\u7A7A
2 | default.doesnt.match.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0E\u5B9A\u4E49\u7684\u6A21\u5F0F [{3}]\u4E0D\u5339\u914D
3 | default.invalid.creditCard.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u4FE1\u7528\u5361\u53F7
4 | 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
5 | default.invalid.max.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u6BD4\u6700\u5927\u503C [{3}]\u8FD8\u5927
6 | default.invalid.max.size.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u7684\u5927\u5C0F\u6BD4\u6700\u5927\u503C [{3}]\u8FD8\u5927
7 | default.invalid.min.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u6BD4\u6700\u5C0F\u503C [{3}]\u8FD8\u5C0F
8 | default.invalid.min.size.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u7684\u5927\u5C0F\u6BD4\u6700\u5C0F\u503C [{3}]\u8FD8\u5C0F
9 | default.invalid.range.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u5728\u5408\u6CD5\u7684\u8303\u56F4\u5185( [{3}] \uFF5E [{4}] )
10 | 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}] )
11 | default.invalid.url.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u662F\u4E00\u4E2A\u5408\u6CD5\u7684URL
12 | default.invalid.validator.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u672A\u80FD\u901A\u8FC7\u81EA\u5B9A\u4E49\u7684\u9A8C\u8BC1
13 | default.not.equal.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0E[{3}]\u4E0D\u76F8\u7B49
14 | default.not.inlist.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u5728\u5217\u8868\u7684\u53D6\u503C\u8303\u56F4\u5185
15 | default.not.unique.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u5FC5\u987B\u662F\u552F\u4E00\u7684
16 | default.null.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u4E0D\u80FD\u4E3Anull
17 | default.paginate.next=\u4E0B\u9875
18 | default.paginate.prev=\u4E0A\u9875
19 |
--------------------------------------------------------------------------------
/grails-app/init/BootStrap.groovy:
--------------------------------------------------------------------------------
1 | class BootStrap {
2 |
3 | def init = { servletContext ->
4 | }
5 | def destroy = {
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/grails-app/init/languagetool_nlp/ApiDocumentationConfiguration.groovy:
--------------------------------------------------------------------------------
1 | package languagetool_nlp;
2 |
3 | import org.springframework.context.annotation.Bean
4 | import org.springframework.context.annotation.Configuration
5 |
6 | import springfox.documentation.builders.ApiInfoBuilder
7 | import springfox.documentation.builders.PathSelectors
8 | import springfox.documentation.builders.RequestHandlerSelectors
9 | import springfox.documentation.service.ApiInfo
10 | import springfox.documentation.service.Contact
11 | import springfox.documentation.spi.DocumentationType
12 | import springfox.documentation.spring.web.plugins.Docket
13 | import springfox.documentation.swagger.web.UiConfiguration
14 | import springfox.documentation.swagger2.annotations.EnableSwagger2
15 | //import springfox.documentation.builders.PathSelectors;
16 | //import springfox.documentation.builders.RequestHandlerSelectors;
17 | //import springfox.documentation.service.ApiInfo;
18 | //import springfox.documentation.service.Contact
19 | //import springfox.documentation.spi.DocumentationType;
20 | //import springfox.documentation.spring.web.plugins.Docket;
21 | //import springfox.documentation.swagger.web.UiConfiguration;
22 | //import springfox.documentation.swagger2.annotations.EnableSwagger2;
23 | //import static springfox.documentation.builders.PathSelectors.regex;
24 |
25 |
26 | @Configuration
27 | @EnableSwagger2
28 | public class ApiDocumentationConfiguration {
29 | @Bean
30 | public Docket documentation() {
31 | return new Docket(DocumentationType.SWAGGER_2)
32 | .select()
33 | .apis(RequestHandlerSelectors.any())
34 | .paths(PathSelectors.regex("/(?!(error|shutdown)).*"))
35 | .build().pathMapping("/")
36 | .apiInfo(metadata());
37 | }
38 |
39 | @Bean
40 | public UiConfiguration uiConfig() {
41 | return UiConfiguration.DEFAULT;
42 | }
43 |
44 | private ApiInfo metadata() {
45 | return new ApiInfoBuilder()
46 | .title("Simple NLP services for Ukrainian")
47 | .description("This is a project to provide NLP services for Ukrainian language based on LanguageTool")
48 | .version("1.0")
49 | .contact(new Contact("Andriy Rysin", "https://github.com/brown-uk/nlp_uk", "arysin@gmail.com"))
50 | .build();
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/grails-app/init/languagetool_nlp/Application.groovy:
--------------------------------------------------------------------------------
1 | package languagetool_nlp
2 |
3 | import grails.boot.GrailsApp
4 | import grails.boot.config.GrailsAutoConfiguration
5 |
6 | class Application extends GrailsAutoConfiguration {
7 | static void main(String[] args) {
8 | GrailsApp.run(Application, args)
9 | }
10 | }
--------------------------------------------------------------------------------
/grails-app/services/languagetool_nlp/LemmatizeService.groovy:
--------------------------------------------------------------------------------
1 | package languagetool_nlp
2 |
3 | import org.languagetool.*
4 | import org.languagetool.tokenizers.*
5 | import org.languagetool.language.*
6 | import org.languagetool.uk.*
7 | import org.languagetool.tokenizers.uk.*
8 |
9 |
10 | class LemmatizeService {
11 | static transactional = false
12 |
13 | def WORD_PATTERN = ~/[а-яіїєґА-ЯІЇЄҐa-zA-Z0-9]/
14 |
15 | JLanguageTool langTool = new MultiThreadedJLanguageTool(new Ukrainian());
16 |
17 |
18 | def lemmatize(def body, def params) {
19 | def text = body.text
20 | params.firstLemma = true
21 |
22 | List analyzedSentences = langTool.analyzeText(text);
23 |
24 |
25 | analyzedSentences.collect { AnalyzedSentence analyzedSentence ->
26 | analyzedSentence.getTokens().collect { AnalyzedTokenReadings readings ->
27 | if( readings.isWhitespace() || readings.getAnalyzedToken(0).lemma == null ) {
28 | readings.token
29 | }
30 | else {
31 | params.firstLemma ? readings[0].getLemma() : readings*.lemma.unique().join("|")
32 | }
33 | }.join("")
34 | }
35 |
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/grails-app/services/languagetool_nlp/TaggingService.groovy:
--------------------------------------------------------------------------------
1 | package languagetool_nlp
2 |
3 | import org.languagetool.*
4 | import org.languagetool.tokenizers.*
5 | import org.languagetool.language.*
6 | import org.languagetool.uk.*
7 | import org.languagetool.tokenizers.uk.*
8 |
9 |
10 | class TaggingService {
11 | static transactional = false
12 |
13 | // def WORD_PATTERN = ~/[а-яіїєґА-ЯІЇЄҐa-zA-Z0-9]/
14 |
15 | JLanguageTool langTool = new MultiThreadedJLanguageTool(new Ukrainian());
16 |
17 |
18 | def tag(def body, def params) {
19 | def text = body.text
20 |
21 | List analyzedSentences = langTool.analyzeText(text);
22 |
23 | analyzedSentences.collect { sent ->
24 | sent.tokens
25 | .findAll { it.readings[0].POSTag != "SENT_START" }
26 | .findAll { ! (it.token ==~ /[ \u00A0]/) }
27 | .collect { token ->
28 |
29 | def lemmas = token.readings[0].lemma == null
30 | ? null
31 | : token.readings.collect { reading ->
32 | [lemma: reading.lemma,
33 | tag: reading.POSTag]
34 | }
35 |
36 |
37 | def response = [ "token": token.token ]
38 | if( lemmas != null ) {
39 | response["lemmas"] = lemmas
40 | }
41 |
42 | return response
43 | }
44 | }
45 |
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/grails-app/services/languagetool_nlp/TokenizeService.groovy:
--------------------------------------------------------------------------------
1 | package languagetool_nlp
2 |
3 | import org.languagetool.*
4 | import org.languagetool.tokenizers.*
5 | import org.languagetool.language.*
6 | import org.languagetool.uk.*
7 | import org.languagetool.tokenizers.uk.*
8 |
9 |
10 | class TokenizeService {
11 | static transactional = false
12 |
13 | def WORD_PATTERN = ~/[а-яіїєґА-ЯІЇЄҐa-zA-Z0-9]/
14 |
15 | SRXSentenceTokenizer sentTokenizer = new SRXSentenceTokenizer(new Ukrainian())
16 | UkrainianWordTokenizer wordTokenizer = new UkrainianWordTokenizer()
17 | def onlyWords = true
18 |
19 |
20 | List> tokenize(def body, def params) {
21 | def text = body.text
22 |
23 | List sentences = sentTokenizer.tokenize(text);
24 |
25 | // ParallelEnhancer.enhanceInstance(sentences)
26 |
27 | return sentences.collect { sent ->
28 | def words = wordTokenizer.tokenize(sent)
29 |
30 | if( onlyWords ) {
31 | // System.err.println( words.findAll { it.trim() && ! WORD_PATTERN.matcher(it) }.join('\n') )
32 | words.findAll { WORD_PATTERN.matcher(it) }
33 | }
34 | else {
35 | // words.each { word ->
36 | // sb.append(word.replace("\n", "\\n").replace("\t", "\\t")).append('|')
37 | // }
38 | }
39 | }
40 |
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/grails-app/views/application/index.gson:
--------------------------------------------------------------------------------
1 | import grails.core.*
2 | import grails.util.*
3 | import grails.plugins.*
4 | import org.grails.core.artefact.*
5 |
6 | model {
7 | GrailsApplication grailsApplication
8 | GrailsPluginManager pluginManager
9 | }
10 |
11 | json {
12 | message "Welcome to Grails!"
13 | environment Environment.current.name
14 | appversion grailsApplication.metadata.getApplicationVersion()
15 | grailsversion GrailsUtil.grailsVersion
16 | appprofile grailsApplication.config.getProperty('grails.profile')
17 | groovyversion GroovySystem.getVersion()
18 | jvmversion System.getProperty('java.version')
19 | reloadingagentenabled Environment.reloadingAgentEnabled
20 | artefacts (
21 | controllers: grailsApplication.getArtefactInfo(ControllerArtefactHandler.TYPE).classesByName.size(),
22 | domains: grailsApplication.getArtefactInfo(DomainClassArtefactHandler.TYPE).classesByName.size(),
23 | services: grailsApplication.getArtefactInfo(ServiceArtefactHandler.TYPE).classesByName.size()
24 | )
25 | controllers grailsApplication.getArtefacts(ControllerArtefactHandler.TYPE), { GrailsClass c ->
26 | name c.fullName
27 | logicalPropertyName c.logicalPropertyName
28 | }
29 | plugins pluginManager.allPlugins, { GrailsPlugin plugin ->
30 | name plugin.name
31 | version plugin.version
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/grails-app/views/error.gson:
--------------------------------------------------------------------------------
1 | response.status 500
2 |
3 | json {
4 | message "Internal server error"
5 | error 500
6 | }
--------------------------------------------------------------------------------
/grails-app/views/errors/_errors.gson:
--------------------------------------------------------------------------------
1 | import org.springframework.validation.*
2 |
3 | /**
4 | * Renders validation errors according to vnd.error: https://github.com/blongden/vnd.error
5 | */
6 | model {
7 | Errors errors
8 | }
9 |
10 | response.status UNPROCESSABLE_ENTITY
11 |
12 | json {
13 | Errors errorsObject = (Errors)this.errors
14 | def allErrors = errorsObject.allErrors
15 | int errorCount = allErrors.size()
16 | def resourcePath = g.link(resource:request.uri, absolute:false)
17 | def resourceLink = g.link(resource:request.uri, absolute:true)
18 | if(errorCount == 1) {
19 | def error = allErrors.iterator().next()
20 | message messageSource.getMessage(error, locale)
21 | path resourcePath
22 | _links {
23 | self {
24 | href resourceLink
25 | }
26 | }
27 | }
28 | else {
29 | total errorCount
30 | _embedded {
31 | errors(allErrors) { ObjectError error ->
32 | message messageSource.getMessage(error, locale)
33 | path resourcePath
34 | _links {
35 | self {
36 | href resourceLink
37 | }
38 | }
39 | }
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/grails-app/views/notFound.gson:
--------------------------------------------------------------------------------
1 | response.status 404
2 |
3 | json {
4 | message "Not Found"
5 | error 404
6 | }
--------------------------------------------------------------------------------