diff --git a/bin/extract-translations.sh b/bin/extract-translations.sh
new file mode 100644
index 00000000000..248ffbfff27
--- /dev/null
+++ b/bin/extract-translations.sh
@@ -0,0 +1,21 @@
+#!/usr/bin/env sh
+echo 'Translation extraction';
+cd ../../..;
+# Extract string for default locale
+echo '# Extract Kernel : EzPublishCoreBundle';
+./app/console translation:extract en -v \
+ --dir=./vendor/ezsystems/ezpublish-kernel/eZ \
+ --exclude-dir=Bundle/PlatformBehatBundle \
+ --exclude-dir=Tests \
+ --exclude-dir=Features \
+ --exclude-dir=Publish/Core/REST/Client \
+ --exclude-dir=tests \
+ --output-dir=./vendor/ezsystems/ezpublish-kernel/eZ/Bundle/EzPublishCoreBundle/Resources/translations \
+ --enable-extractor=ez_fieldtypes \
+ --keep
+ "$@"
+
+echo '# Clean file references';
+sed -i "s|/../../../../.././vendor/ezsystems/ezpublish-kernel/|/|g" ./vendor/ezsystems/ezpublish-kernel/eZ/Bundle/EzPublishCoreBundle/Resources/translations/*.xlf
+
+echo 'Translation extraction done';
diff --git a/eZ/Bundle/EzPublishCoreBundle/Resources/translations/fieldtypes.en.xlf b/eZ/Bundle/EzPublishCoreBundle/Resources/translations/fieldtypes.en.xlf
new file mode 100644
index 00000000000..54e9c97f2a1
--- /dev/null
+++ b/eZ/Bundle/EzPublishCoreBundle/Resources/translations/fieldtypes.en.xlf
@@ -0,0 +1,144 @@
+
+
+
+
+
+ The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message.
+
+
+
+
+ Authors
+ key: ezauthor.name
+
+
+
+ File
+ key: ezbinaryfile.name
+
+
+
+ Checkbox
+ key: ezboolean.name
+
+
+
+ Country
+ key: ezcountry.name
+
+
+
+ Date
+ key: ezdate.name
+
+
+
+ Date and time
+ key: ezdatetime.name
+
+
+
+ E-mail address
+ key: ezemail.name
+
+
+
+ Float
+ key: ezfloat.name
+
+
+
+ Map location
+ key: ezgmaplocation.name
+
+
+
+ Image
+ key: ezimage.name
+
+
+
+ Integer
+ key: ezinteger.name
+
+
+
+ ISBN
+ key: ezisbn.name
+
+
+
+ Keywords
+ key: ezkeyword.name
+
+
+
+ Media
+ key: ezmedia.name
+
+
+
+ Content relation (single)
+ key: ezobjectrelation.name
+
+
+
+ Content relations (multiple)
+ key: ezobjectrelationlist.name
+
+
+
+ Layout
+ key: ezpage.name
+
+
+
+ Rich text
+ key: ezrichtext.name
+
+
+
+ Selection
+ key: ezselection.name
+
+
+
+ Rating
+ key: ezsrrating.name
+
+
+
+ Text line
+ key: ezstring.name
+
+
+
+ Text block
+ key: eztext.name
+
+
+
+ Time
+ key: eztime.name
+
+
+
+ URL
+ key: ezurl.name
+
+
+
+ User account
+ key: ezuser.name
+
+
+
+ Price
+
+
+
+ XML block
+
+
+
+
diff --git a/eZ/Bundle/EzPublishCoreBundle/Resources/translations/messages.en.xlf b/eZ/Bundle/EzPublishCoreBundle/Resources/translations/messages.en.xlf
index d19675745be..1fa70f1e4e8 100644
--- a/eZ/Bundle/EzPublishCoreBundle/Resources/translations/messages.en.xlf
+++ b/eZ/Bundle/EzPublishCoreBundle/Resources/translations/messages.en.xlf
@@ -1,6 +1,6 @@
-
+ The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message.
@@ -8,34 +8,34 @@
- Enter login or email
+ Enter login or emailkey: Enter login or email
- /../../../../../eZ/Bundle/EzPublishCoreBundle/Resources/views/Security/login.html.twig
+ /eZ/Bundle/EzPublishCoreBundle/Resources/views/Security/login.html.twig
- Enter password
+ Enter passwordkey: Enter password
- /../../../../../eZ/Bundle/EzPublishCoreBundle/Resources/views/Security/login.html.twig
+ /eZ/Bundle/EzPublishCoreBundle/Resources/views/Security/login.html.twig
- Login
+ Loginkey: Login
- /../../../../../eZ/Bundle/EzPublishCoreBundle/Resources/views/Security/login.html.twig
- /../../../../../eZ/Bundle/EzPublishCoreBundle/Resources/views/Security/login.html.twig
+ /eZ/Bundle/EzPublishCoreBundle/Resources/views/Security/login.html.twig
+ /eZ/Bundle/EzPublishCoreBundle/Resources/views/Security/login.html.twig
- Password:
+ Password:key: Password:
- /../../../../../eZ/Bundle/EzPublishCoreBundle/Resources/views/Security/login.html.twig
+ /eZ/Bundle/EzPublishCoreBundle/Resources/views/Security/login.html.twig
- Username:
+ Username:key: Username:
- /../../../../../eZ/Bundle/EzPublishCoreBundle/Resources/views/Security/login.html.twig
+ /eZ/Bundle/EzPublishCoreBundle/Resources/views/Security/login.html.twig
diff --git a/eZ/Bundle/EzPublishCoreBundle/Resources/translations/repository_exceptions.en.xlf b/eZ/Bundle/EzPublishCoreBundle/Resources/translations/repository_exceptions.en.xlf
index f7894dcf397..ac2acd423e3 100644
--- a/eZ/Bundle/EzPublishCoreBundle/Resources/translations/repository_exceptions.en.xlf
+++ b/eZ/Bundle/EzPublishCoreBundle/Resources/translations/repository_exceptions.en.xlf
@@ -1,6 +1,6 @@
-
+ The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message.
@@ -10,207 +10,228 @@
'%actualValue%' is wrong valuekey: '%actualValue%' is wrong value
- /../../../../../eZ/Publish/Core/Base/Exceptions/InvalidArgumentValue.php
+ /eZ/Publish/Core/Base/Exceptions/InvalidArgumentValue.php'%actualValue%' is wrong value in class '%className%'key: '%actualValue%' is wrong value in class '%className%'
- /../../../../../eZ/Publish/Core/Base/Exceptions/InvalidArgumentValue.php
+ /eZ/Publish/Core/Base/Exceptions/InvalidArgumentValue.phpA value is set for non translatable field definition '%identifier%' with language '%languageCode%'key: A value is set for non translatable field definition '%identifier%' with language '%languageCode%'
- /../../../../../eZ/Publish/Core/Repository/ContentService.php
- /../../../../../eZ/Publish/Core/Repository/ContentService.php
+ /eZ/Publish/Core/Repository/ContentService.php
+ /eZ/Publish/Core/Repository/ContentService.phpArgument '%argumentName%' has a bad state: %whatIsWrong%key: Argument '%argumentName%' has a bad state: %whatIsWrong%
- /../../../../../eZ/Publish/Core/Base/Exceptions/BadStateException.php
+ /eZ/Publish/Core/Base/Exceptions/BadStateException.phpArgument '%argumentName%' is invalid: %whatIsWrong%key: Argument '%argumentName%' is invalid: %whatIsWrong%
- /../../../../../eZ/Publish/Core/Base/Exceptions/InvalidArgumentException.php
+ /eZ/Publish/Core/Base/Exceptions/InvalidArgumentException.php
+
+
+
+ Argument '%argumentName%' is invalid: expected value to be of type '%expectedType%'
+ key: Argument '%argumentName%' is invalid: expected value to be of type '%expectedType%'
+ /eZ/Publish/Core/Base/Exceptions/InvalidArgumentType.php
+
+
+
+ Argument '%argumentName%' is invalid: expected value to be of type '%expectedType%', got '%actualType%'
+ key: Argument '%argumentName%' is invalid: expected value to be of type '%expectedType%', got '%actualType%'
+ /eZ/Publish/Core/Base/Exceptions/InvalidArgumentType.php
+
+
+
+ Argument 'BinaryFile::id' is invalid: '%id%' is wrong value, binary file ids can not begin with a '/'
+ key: Argument 'BinaryFile::id' is invalid: '%id%' is wrong value, binary file ids can not begin with a '/'
+ /eZ/Publish/Core/IO/Exception/InvalidBinaryAbsolutePathException.php
+
+
+
+ Argument 'BinaryFile::id' is invalid: '%id%' is wrong value, it does not contain prefix '%prefix%'. Is 'var_dir' config correct?
+ key: Argument 'BinaryFile::id' is invalid: '%id%' is wrong value, it does not contain prefix '%prefix%'. Is 'var_dir' config correct?
+ /eZ/Publish/Core/IO/Exception/InvalidBinaryPrefixException.phpContent fields did not validatekey: Content fields did not validate
- /../../../../../eZ/Publish/Core/Base/Exceptions/ContentFieldValidationException.php
+ /eZ/Publish/Core/Base/Exceptions/ContentFieldValidationException.phpContent type cannot be unlinked from the only remaining groupkey: Content type cannot be unlinked from the only remaining group
- /../../../../../eZ/Publish/Core/REST/Server/Controller/ContentType.php
+ /eZ/Publish/Core/REST/Server/Controller/ContentType.phpContent type is already linked to provided groupkey: Content type is already linked to provided group
- /../../../../../eZ/Publish/Core/REST/Server/Controller/ContentType.php
+ /eZ/Publish/Core/REST/Server/Controller/ContentType.phpContentType FieldDefinitions did not validatekey: ContentType FieldDefinitions did not validate
- /../../../../../eZ/Publish/Core/Base/Exceptions/ContentTypeFieldDefinitionValidationException.php
+ /eZ/Publish/Core/Base/Exceptions/ContentTypeFieldDefinitionValidationException.phpCould not find %classType% class '%className%'key: Could not find %classType% class '%className%'
- /../../../../../eZ/Publish/Core/Base/Exceptions/MissingClass.php
+ /eZ/Publish/Core/Base/Exceptions/MissingClass.phpCould not find '%what%' with identifier '%identifier%'key: Could not find '%what%' with identifier '%identifier%'
- /../../../../../eZ/Publish/Core/Base/Exceptions/NotFoundException.php
+ /eZ/Publish/Core/Base/Exceptions/NotFoundException.phpCould not find class '%className%'key: Could not find class '%className%'
- /../../../../../eZ/Publish/Core/Base/Exceptions/MissingClass.php
+ /eZ/Publish/Core/Base/Exceptions/MissingClass.phpCurrent version is already in status DRAFTkey: Current version is already in status DRAFT
- /../../../../../eZ/Publish/Core/REST/Server/Controller/Content.php
+ /eZ/Publish/Core/REST/Server/Controller/Content.phpEmpty content type draft cannot be publishedkey: Empty content type draft cannot be published
- /../../../../../eZ/Publish/Core/REST/Server/Controller/ContentType.php
+ /eZ/Publish/Core/REST/Server/Controller/ContentType.phpField definition '%identifier%' does not exist in given ContentTypekey: Field definition '%identifier%' does not exist in given ContentType
- /../../../../../eZ/Publish/Core/Repository/ContentService.php
- /../../../../../eZ/Publish/Core/Repository/ContentService.php
+ /eZ/Publish/Core/Repository/ContentService.php
+ /eZ/Publish/Core/Repository/ContentService.phpFieldType '%fieldType%' not found, needs to be implemented or configured to use FieldType\Null\Type (%ezpublish.fieldType.eznull.class%)key: FieldType '%fieldType%' not found, needs to be implemented or configured to use FieldType\Null\Type (%ezpublish.fieldType.eznull.class%)
- /../../../../../eZ/Publish/Core/Base/Exceptions/NotFound/FieldTypeNotFoundException.php
+ /eZ/Publish/Core/Base/Exceptions/NotFound/FieldTypeNotFoundException.phpFieldType '%identifier%' is singular and can't be repeated in a ContentTypekey: FieldType '%identifier%' is singular and can't be repeated in a ContentType
- /../../../../../eZ/Publish/Core/Base/Exceptions/SingularFieldTypeValidationException.phpLimitation '%limitation%' not found, needs to be implemented or configured to use Limitation\BlockingLimitationType (%ezpublish.api.role.limitation_type.blocking.class%key: Limitation '%limitation%' not found, needs to be implemented or configured to use Limitation\BlockingLimitationType (%ezpublish.api.role.limitation_type.blocking.class%
- /../../../../../eZ/Publish/Core/Base/Exceptions/NotFound/LimitationNotFoundException.php
+ /eZ/Publish/Core/Base/Exceptions/NotFound/LimitationNotFoundException.phpLimitations did not validatekey: Limitations did not validate
- /../../../../../eZ/Publish/Core/Base/Exceptions/LimitationValidationException.php
+ /eZ/Publish/Core/Base/Exceptions/LimitationValidationException.phpOnly empty content type groups can be deletedkey: Only empty content type groups can be deleted
- /../../../../../eZ/Publish/Core/REST/Server/Controller/ContentType.php
+ /eZ/Publish/Core/REST/Server/Controller/ContentType.phpOnly version in status DRAFT can be publishedkey: Only version in status DRAFT can be published
- /../../../../../eZ/Publish/Core/REST/Server/Controller/Content.php
+ /eZ/Publish/Core/REST/Server/Controller/Content.phpOnly version in status DRAFT can be updatedkey: Only version in status DRAFT can be updated
- /../../../../../eZ/Publish/Core/REST/Server/Controller/Content.php
+ /eZ/Publish/Core/REST/Server/Controller/Content.phpPath '%path%' already exists for the given languagekey: Path '%path%' already exists for the given language
- /../../../../../eZ/Publish/Core/Persistence/Legacy/Content/UrlAlias/Handler.php
+ /eZ/Publish/Core/Persistence/Legacy/Content/UrlAlias/Handler.phpPlaceholders are not matching with wildcards.key: Placeholders are not matching with wildcards.
- /../../../../../eZ/Publish/Core/Repository/URLWildcardService.php
+ /eZ/Publish/Core/Repository/URLWildcardService.phpProvided content type does not contain ezuser field typekey: Provided content type does not contain ezuser field type
- /../../../../../eZ/Publish/Core/Base/Exceptions/NoUserFieldContentValidationException.php
+ /eZ/Publish/Core/Repository/UserService.phpRelation is not of type COMMONkey: Relation is not of type COMMON
- /../../../../../eZ/Publish/Core/REST/Server/Controller/Content.php
+ /eZ/Publish/Core/REST/Server/Controller/Content.phpRelation of type COMMON can only be added to draftskey: Relation of type COMMON can only be added to drafts
- /../../../../../eZ/Publish/Core/REST/Server/Controller/Content.php
+ /eZ/Publish/Core/REST/Server/Controller/Content.phpRelation of type COMMON can only be removed from draftskey: Relation of type COMMON can only be removed from drafts
- /../../../../../eZ/Publish/Core/REST/Server/Controller/Content.php
+ /eZ/Publish/Core/REST/Server/Controller/Content.phpRelation of type COMMON to selected destination content ID already existskey: Relation of type COMMON to selected destination content ID already exists
- /../../../../../eZ/Publish/Core/REST/Server/Controller/Content.php
+ /eZ/Publish/Core/REST/Server/Controller/Content.phpUser does not have access to '%function%' '%module%'key: User does not have access to '%function%' '%module%'
- /../../../../../eZ/Publish/Core/Base/Exceptions/UnauthorizedException.php
+ /eZ/Publish/Core/Base/Exceptions/UnauthorizedException.phpUser does not have access to '%function%' '%module%' with: %with%'key: User does not have access to '%function%' '%module%' with: %with%'
- /../../../../../eZ/Publish/Core/Base/Exceptions/UnauthorizedException.php
+ /eZ/Publish/Core/Base/Exceptions/UnauthorizedException.phpVersion in status PUBLISHED cannot be deletedkey: Version in status PUBLISHED cannot be deleted
- /../../../../../eZ/Publish/Core/REST/Server/Controller/Content.php
+ /eZ/Publish/Core/REST/Server/Controller/Content.phpexpected value to be of type '%expectedType%'key: expected value to be of type '%expectedType%'
- /../../../../../eZ/Publish/Core/Base/Exceptions/InvalidArgumentType.phpexpected value to be of type '%expectedType%', got '%actualType%'key: expected value to be of type '%expectedType%', got '%actualType%'
- /../../../../../eZ/Publish/Core/Base/Exceptions/InvalidArgumentType.php