Yii Framework - Catalan Translation

Hello everyone.

First of all, let me introduce myself. My name is Arnau Aregall. I am a 20 year old web and mobile developer from Torelló, Barcelona, Spain.

I got introduced to Yii at work as first job on the last December. I had no idea of the existence of this awesome and powerful framework. I had to deal with it “because at work they started the project with it”… :blink:

I found it quite difficult at the very start, but at the same time I was studying MVC patterns, so it came to me absolutely in the right moment at the right time. Currently I am working on other 3 projects, and I’ll implement Yii as the main base for my web applications (one is a REST based API).

After all that pretty useless stuff I told you, I’ll come to the point of this topic. ;)

I have seen that there are translations for many languages (which is great!), including Catalan (my native language), but only for basic translations, like time, days, months, countries… (can be found at


/myProject/yii/framework/i18n/data/ca.php

file).

One of the projects I mentioned above, will use Catalan as main language. But surprisingly, no


ca/

folder under


/myProject/yii/framework/messages/

.

What I did is simple: I fully translated all the English key-value arrays on the files


yii.php

and


zii.php

to Catalan. :)

I love my native language, and I did not like the option to get my application showing error messages in English/Spanish (felt really unprofessional). That is why I did it.

Here is the


/myProject/yii/framework/messages/ca/yii.php

file:




<?php

/**

 * Message translations.

 *

 * This file is automatically generated by 'yiic message' command.

 * It contains the localizable messages extracted from source code.

 * You may modify this file by translating the extracted messages.

 *

 * Each array element represents the translation (value) of a message (key).

 * If the value is empty, the message is considered as not translated.

 * Messages that no longer need translation will have their translations

 * enclosed between a pair of '@@' marks.

 *

 * Message string can be used with plural forms format. Check i18n section

 * of the guide for details.

 *

 * NOTE, this file must be saved in UTF-8 encoding.

 */

return array (

  'Action class {class} must implement the "run" method.' => 'La clase d\'acció {class} ha d\'implementar el mètode "run".',

  'Adding a foreign key constraint to an existing table is not supported by SQLite.' => 'Afegir una restricció de clau forània no és suportat per SQLite.',

  'Adding a primary key after table has been created is not supported by SQLite.' => 'Afegir una clau primària després de que la taula hagi set creada no és suportat per SQLite.',

  'Alias "{alias}" is invalid. Make sure it points to an existing PHP file and the file is readable.' => 'L\' àlias "{alias}" no és vàlid. Asseguris de que apunta a un arxiu PHP i l\'arxiu té permisos de lectura.',

  'Alias "{alias}" is invalid. Make sure it points to an existing directory.' => 'L\' alias {alias} no és vàlid. Asseguris de que apunta a un directori existent.',

  'Altering a DB column is not supported by SQLite.' => 'Alterar una columna de la BDD no és suportat per SQLite.',

  'Application Log' => 'Registre d\'Aplicació',

  'CDbCacheDependency.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbCacheDependency.connectionID "{id}"  no és vàlid. Si us plau, asseguris de que fa referència a l\'ID d\'un component d\'aplicació CDbConnection.',

  'CDbCommand::execute() failed: {error}. The SQL statement executed was: {sql}.' => 'CDbCommand::execute() ha fallat: {error}. La sentència SQL executada ha set: {sql}.',

  'CDbCommand::{method}() failed: {error}. The SQL statement executed was: {sql}.' => 'CDbCommand::{method}() ha fallat: {error}. La sentència SQL executada ha set: {sql}.',

  'CDbTestFixture.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbTestFixture.connectionID "{id}" es invàlid. Si us plau, asseguris de que fa referència a l\'ID d\'un component d\'aplicació CDbConnection.',

  'CHttpCacheFilter.lastModified contained a value that could not be understood by strtotime()' => 'CHttpCacheFilter.lastModified ha tingut un valor que no ha pogut ser entès per strtotime()',

  'CHttpSession.gcProbability "{value}" is invalid. It must be a float between 0 and 100.' => 'CHttpSession.gcProbability "{value}" no és vàlid. Ha de ser un decimal entre 0 i 100.',

  'CMemCache requires PHP {extension} extension to be loaded.' => 'CMemCache necessita que l\'extensió de PHP {extension} estigui carregada.',

  'CTypedMap<{type}> can only hold objects of {type} class.' => 'CTypedMap<{type}> només pot tenir objectes de la clase {type}.',

  'CWinCache requires PHP wincache extension to be loaded.' => 'CWinCache necessita que l\'extensió de PHP estigui carregada.',

  'CWinCache user cache is disabled. Please set wincache.ucenabled to On in your php.ini.' => 'La caché d\'usuari CWinCache esta desactivada. Si us plau, canvï wincache.ucenabled a ON al seu php.ini.',

  'Class name "{class}" does not match class file "{file}".' => 'El nom de la clase "{class}" no correspon amb la clase de l\'arxiu "{file}".',

  'Dropping DB column is not supported by SQLite.' => 'Eliminar una columna de la BDD no és suportat per SQLite.',

  'Dropping a foreign key constraint is not supported by SQLite.' => 'Eliminar una restricció de clau forània no és suportat per SQLite.',

  'Extension path "{path}" does not exist.' => 'La ruta "{path}" de l\'extensió no existeix.',

  'Failed to initialize the mcrypt module.' => 'Error al inicialitzar el mòdul mcrypt.',

  'Failed to set unsafe attribute "{attribute}" of "{class}".' => 'Error al definir unsafe l\'atribut "{attribute}" de "{class}".',

  'Failed to start session.' => 'Error al iniciar sessió.',

  'Filter "{filter}" is invalid. Controller "{class}" does not have the filter method "filter{filter}".' => 'El filtre "{filter}" no és vàlid. El controlador "{class}" no conté el mètodo de filtre "filter{filter}".',

  'GD with FreeType or ImageMagick PHP extensions are required.' => 'Les extensions de PHP GD amb FreeType o ImageMagick són necessàries.',

  'In order to use MIME-type validation provided by CFileValidator fileinfo PECL extension should be installed.' => 'Amb el fi d\'utilitzar la validació de tipus MIME prevista per CFileValidator, l\'extensió de PECL fileinfo ha d\'estar instalada.',

  'Invalid expression for CHttpCacheFilter.lastModifiedExpression: The evaluation result "{value}" could not be understood by strtotime()' => 'Expressió no vàlida per CHttpCacheFilter.lastModifiedExpression: El resultat de l\'evaluació "{value}" no ha pogut ser entès per strototime()',

  'Invalid operator "{operator}".' => 'Operador no vàlid "{operator}".',

  'Powered by {yii}.' => 'Potenciat per {yii}.',

  'Property CMaskedTextField.mask cannot be empty.' => 'La propietat CMaskedTextField.mask no pot ser buida.',

  'Removing a primary key after table has been created is not supported by SQLite.' => 'Eliminar una clau primària després de que una taula hagi set creada, no és suportat per SQLite.',

  'Renaming a DB column is not supported by SQLite.' => 'Re-anomenar una columna de la BDD no és suportat per SQLite.',

  'The "db" application component must be configured to be a CDbConnection object.' => 'El component de l\'aplicació "db" ha d\'estar configurat per a ésser un objecte CDbConnection.',

  'The "range" property must be specified with a list of values.' => 'La propietat "range" ha de ser especificada amb una llista de valors.',

  'The DB query must contain the "from" portion.' => 'La consulta a la BDD ha de contenir la clàusula "from".',

  'The file "{file}" cannot be uploaded. Only files of these MIME-types are allowed: {mimeTypes}.' => 'L\'arxiu "{file}" no pot ser pujat. Només els arxius d\'aquests tipus MIME estan permesos: {mimeTypes}.',

  'The format of {attribute} is invalid.' => 'El format de {attribute} no és vàlid.',

  'The pattern for day of the week must be "E", "EE", "EEE", "EEEE", "EEEEE", "e", "ee", "eee", "eeee", "eeeee", "c", "cccc" or "ccccc".' => 'El patró pel dia de la setmana ha de ser "E", "EE", "EEE", "EEEE", "EEEEE", "e", "ee", "eee", "eeee", "eeeee", "c", "cccc" o "ccccc".',

  'The pattern for month must be "M", "MM", "MMM", "MMMM", "L", "LL", "LLL" or "LLLL".' => 'El patró pel mes ha de ser "M", "MM", "MMM", "MMMM", "L", "LL", "LLL" o "LLLL".',

  'The requested view "{name}" was not found.' => 'No s\'ha trobat la vista sol·licitada "{name}" ',

  'Unable to find "{column}" in table "{table}".' => 'No s\'ha trobat la columna "{column}" a la taula "{table}".',

  'Unknown operator "{operator}".' => 'Operador desconegut "{operator}".',

  'Unknown type "{type}".' => 'Tipus desconegut "{type}".',

  'Your request is invalid.' => 'La sol·licitud no és vàlida.',

  '{attribute} cannot accept more than {limit} files.' => '{attribute} no pot acceptar més de {limit} arxius.',

  '{attribute} is in the list.' => '{attribute} esta a la llista.',

  '{attribute} must be {value}.' => '{attribute} ha de ser {value}.',

  '{attribute} must not be equal to "{compareValue}".' => '{attribute} no hauría de ser igual a "{compareValue}".',

  '{className} does not support flushValues() functionality.' => '{className} no suporta la funcionalitat flushValues().',

  '{class} and its behaviors do not have a method or closure named "{name}".' => '{class} i els seus comportaments no ténen un mètoda o clàusula anomenat "{name}".',

  '{n} B' => '{n} B',

  '{n} GB' => '{n} GB',

  '{n} KB' => '{n} KB',

  '{n} MB' => '{n} MB',

  '{n} TB' => '{n} TB',

  '{n} byte|{n} bytes' => '{n} byte|{n} bytes',

  '{n} gigabyte|{n} gigabytes' => '{n} gigabyte|{n} gigabytes',

  '{n} kilobyte|{n} kilobytes' => '{n} kilobyte|{n} kilobytes',

  '{n} megabyte|{n} megabytes' => '{n} megabyte|{n} megabytes',

  '{n} terabyte|{n} terabytes' => '{n} terabyte|{n} terabytes',

  '"{path}" is not a valid directory.' => '"{path}" no és un directori vàlid.',

  '< Previous' => '< Anterior',

  '<< First' => '<< Primer',

  'Active Record requires a "db" CDbConnection application component.' => 'Active Record requiereix un component d\'aplicació "db" de tipus CDbConnection.',

  'Active record "{class}" has an invalid configuration for relation "{relation}". It must specify the relation type, the related active record class and the foreign key.' => 'Active record "{class}" conté una configuració de relació invàlida "{relation}". La mateixa ha d\'especificar el tipus de relació, la clase active record relacionada i la clau forània.',

  'Active record "{class}" is trying to select an invalid column "{column}". Note, the column must exist in the table or be an expression with alias.' => 'Active Record "{class}" esta intentant seleccionar una columna que no és vàlida {"column"}. Nota: la columna pot existir a la BDD o ser una expressió amb àlies.',

  'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => 'Alias "{alias}" es inválido. Verifique que el mismo apunta a un directorio o archivo exisitente.',

  'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => 'L\'àlies "{alias}" no és vàlid. Verifiqui que el mateix apunta a un directori o arxiu exisitent.',

  'Application base path "{path}" is not a valid directory.' => 'Ruta base de l\'aplicació "{path}" no és un directori vàlid.',

  'Application runtime path "{path}" is not valid. Please make sure it is a directory writable by the Web server process.' => 'Ruta de runtime d\'aplicació "{path}" no és vàlida. Asseguri\'s de que sigui un directori amb permisos d\'escriptura pel procés que corre el servidor Web.',

  'Authorization item "{item}" has already been assigned to user "{user}".' => 'L\'element d\'autorització "{item}" ha set assignat a l\'usuari "{user}".',

  'Base path "{path}" is not a valid directory.' => 'La ruta base "{path}" no és un directori vàlid.',

  'CApcCache requires PHP apc extension to be loaded.' => 'CApcCache nexessita que l\'extensió apc de PHP estigui carregada.',

  'CAssetManager.basePath "{path}" is invalid. Please make sure the directory exists and is writable by the Web server process.' => 'CAssetManager.basePath "{path}" no és vàlid. Asseguri\'s de que sigui un directori amb permisos d\'escriptura pel procés que corre el servidor Web.',

  'CCacheHttpSession.cacheID is invalid. Please make sure "{id}" refers to a valid cache application component.' => 'CCacheHttpSession.cacheID no és vàlid. Asseguri\'s de que "{id}" fa referència a un component d\'aplicació de caché vàlid.',

  'CCaptchaValidator.action "{id}" is invalid. Unable to find such an action in the current controller.' => 'CCaptchaValidator.action "{id}" no és vàlid. No s\'ha trobat aquesta acció en el controlador actual.',

  'CDbAuthManager.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbAuthManager.connectionID "{id}" no és vàlid. Asseguri\'s de que fa referència a un ID d\'un component d\'aplicació CDbConnection.',

  'CDbCache.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbCache.connectionID "{id}" no és vàlid. Asseguri\'s que es refereix a un ID d\'un component d\'aplicació CDbConnection.',

  'CDbCacheDependency.sql cannot be empty.' => 'CDbCacheDependency.sql no pot ser buit.',

  'CDbCommand failed to execute the SQL statement: {error}' => 'CDbCommand ha fallat al executar la sentència SQL: {error}',

  'CDbCommand failed to prepare the SQL statement: {error}' => 'CDbCommand ha fallat al preparar la sentència SQL: {error}',

  'CDbConnection does not support reading schema for {driver} database.' => 'CDbConnection no suporta la lectura de l\'esquema de la base de dades {driver}.',

  'CDbDataReader cannot rewind. It is a forward-only reader.' => 'CDbDataReader no pot tornar enrere ja que és un lector cap endavant únicament.',

  'CDbHttpSession.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbHttpSession.connectionID "{id}" no és vàlid. Aseguri\'s de que fa referència a un ID d\'un component d\'aplicació CDbConnection.',

  'CDbLogRoute.connectionID "{id}" does not point to a valid CDbConnection application component.' => 'CDbLogRoute.connectionID "{id}" no refiere a un componente de aplicación CDbConnection válido.',

  'CDbMessageSource.connectionID is invalid. Please make sure "{id}" refers to a valid database application component.' => 'CDbMessageSource.connectionID no és vàlid. Aseguri\'s de que "{id}" fa referència a un component d\'aplicació de base de dades vàlid.',

  'CDbTransaction is inactive and cannot perform commit or roll back operations.' => 'CDbTransaction es troba inactiva i no es poden realitzar les operacions commit i roll back.',

  'CDirectoryCacheDependency.directory cannot be empty.' => 'CDirectoryCacheDependency.directory no pot ser buit.',

  'CEAcceleratorCache requires PHP eAccelerator extension to be loaded, enabled or compiled with the "--with-eaccelerator-shared-memory" option.' => 'CEAcceleratorCache necessita l\'extensió eAccelerator de PHP per ser carregada, activada o carregada amb la opció "--with-eaccelerator-shared-memory".',

  'CFileCacheDependency.fileName cannot be empty.' => 'CFileCacheDependency.fileName no puede ser vacío.',

  'CFileLogRoute.logPath "{path}" does not point to a valid directory. Make sure the directory exists and is writable by the Web server process.' => 'CFileLogRoute.logPath "{path}" no apunta a un directori vàlid. Verifiqui que el directori existeix i que tingui permisos d\'escriptura pel procés que corre el servidor Web.',

  'CFilterChain can only take objects implementing the IFilter interface.' => 'CFilterChain tan sols pot obtindre objectes que implementin la interfície IFilter.',

  'CFlexWidget.baseUrl cannot be empty.' => 'CFlexWidget.baseUrl no pot ser buit.',

  'CFlexWidget.name cannot be empty.' => 'CFlexWidget.name no pot ser buit.',

  'CGlobalStateCacheDependency.stateName cannot be empty.' => 'CGlobalStateCacheDependency.stateName no pot ser buit.',

  'CHttpCookieCollection can only hold CHttpCookie objects.' => 'CHttpCookieCollection només pot contenir objectes CHttpCookie.',

  'CHttpRequest is unable to determine the entry script URL.' => 'CHttpRequest no pot determinar la URL del vostre script d\'entrada.',

  'CHttpRequest is unable to determine the path info of the request.' => 'CHttpRequest no pot determinar la informació de la ruta de sol·licitud.',

  'CHttpRequest is unable to determine the request URI.' => 'CHttpRequest no pot determinar la URL determinada.',

  'CHttpSession.cookieMode can only be "none", "allow" or "only".' => 'CHttpSession.cookieMode només pot ser "none", "allow" o "only".',

  'CHttpSession.savePath "{path}" is not a valid directory.' => 'CHttpSession.savePath "{path}" no és un directori vàlid.',

  'CMemCache server configuration must be an array.' => 'La configuració del servidor CMemCache ha de ser un vector (array).',

  'CMemCache server configuration must have "host" value.' => 'La configuració del servidor CMemCache ha de contenir un client "host".',

  'CProfileLogRoute found a mismatching code block "{token}". Make sure the calls to Yii::beginProfile() and Yii::endProfile() be properly nested.' => 'CProfileLogRoute ha trobat un bloc de codi "{token}" desalineat. Asseguri\'s de que las crides a Yii::beginProfile() i a Yii::endProfile() estan correctament anidades.',

  'CProfileLogRoute.report "{report}" is invalid. Valid values include "summary" and "callstack".' => 'CProfileLogRoute.report "{report}" no és vàlid. El valors vàlid són "summary" i "callstack".',

  'CSecurityManager requires PHP mcrypt extension to be loaded in order to use data encryption feature.' => 'CSecurityManager necessita que l\'extensió mcrypt de PHP sigui carregada per utilitzar la opció d\'encriptació de dades.',

  'CSecurityManager.encryptionKey cannot be empty.' => 'CSecurityManager.encryptionKey no pot ser buit.',

  'CSecurityManager.validationKey cannot be empty.' => 'CSecurityManager.validationKey no pot ser buit.',

  'CTypedList<{type}> can only hold objects of {type} class.' => 'CTypedList<{type}> només pot contenir objectes de la clase {type}.',

  'CUrlManager.UrlFormat must be either "path" or "get".' => 'CUrlManager.UrlFormat ha de ser "path" o "get".',

  'CXCache requires PHP XCache extension to be loaded.' => 'CXCache necessita l\'extensió XCache de PHP per ser carregat.',

  'CZendDataCache requires PHP Zend Data Cache extension to be loaded.' => 'CZendDataCache necessita l\'extensió PHP Zend Data Cache per poder ser carregada.',

  'Cannot add "{child}" as a child of "{name}". A loop has been detected.' => 'No es pot afegir "{child}" com a fill de "{name}". S\'ha detectat un cicle infinit.',

  'Cannot add "{child}" as a child of "{parent}". A loop has been detected.' => 'No es pot afegir "{child}" com a fill de "{parent}". S\'ha detectat un cicle infinit.',

  'Cannot add "{name}" as a child of itself.' => 'No es pot afegir "{name}" com a element fill d\'ell mateix.',

  'Cannot add an item of type "{child}" to an item of type "{parent}".' => 'No es pot afegir un element de tipus "{child}" a un altr de tipus "{parent}".',

  'Column name must be either a string or an array.' => 'El nom de la columna ha de ser una cadena o un vector (array).',

  'Either "{parent}" or "{child}" does not exist.' => '"{parent}" o "{child}" no existeix.',

  'Error: Table "{table}" does not have a primary key.' => 'Error: La taula "{table}" no té clau primària.',

  'Error: Table "{table}" has a composite primary key which is not supported by crud command.' => 'Error: La taula "{table}" té una clau primària composta que no és suportada per la comanda crud.',

  'Event "{class}.{event}" is attached with an invalid handler "{handler}".' => 'L\'event "{class}"."{event}" té associat un maniuplador "{handler}" invàlid.',

  'Event "{class}.{event}" is not defined.' => 'L\'event "{class}"."{event}" no es troba definit.',

  'Failed to write the uploaded file "{file}" to disk.' => 'Error en escriure l\'arxiu pujat "{file}" al disc.',

  'File upload was stopped by extension.' => 'La pujada de l\'arxiu ha hagut de ser interrumpuda degut a la seva extensió.',

  'Get a new code' => 'Obtingui un nou codi',

  'Go to page: ' => 'Anar a la pàgina: ',

  'Invalid MO file revision: {revision}.' => 'Revisió d\'arxiu MO invàlida: {revision}.',

  'Invalid MO file: {file} (magic: {magic}).' => 'L\'arxiu MO no és vàlid: {file} (magic: {magic}).',

  'Invalid enumerable value "{value}". Please make sure it is among ({enum}).' => 'Valor d\'enumerador invàlid "{value}". Asseguri\'s que esta entre ({enum}).',

  'Last >>' => 'Últim >>',

  'List data must be an array or an object implementing Traversable.' => 'Les dades de la llista han de ser un vector (array) o bé un objecte que implementi la interfície Traversable.',

  'List index "{index}" is out of bound.' => 'L\' índex "{index}" de la llista es troba fora del límit.',

  'Login Required' => 'Inici de sessió necessàri.',

  'Map data must be an array or an object implementing Traversable.' => 'Les dades del mapa han de ser un vector (array) o un objecte que implementi la interfície Traversable',

  'Missing the temporary folder to store the uploaded file "{file}".' => 'No s\'ha trobat la carpeta temporal per guardar l\'arxiu pujat "{file}".',

  'Next >' => 'Següent >',

  'No columns are being updated for table "{table}".' => 'No s\'ha actualitzat cap columna per la taula "{table}".',

  'No counter columns are being updated for table "{table}".' => 'Cap comptador de columnes ha set actualitzat per la taula "{table}".',

  'Object configuration must be an array containing a "class" element.' => 'La configuració de l\'objecte ha de ser un vector (array) que contingui un element "class".',

  'Please fix the following input errors:' => 'Si us plau, corretgeixi els següents errors d\'ingrés:',

  'Property "{class}.{property}" is not defined.' => 'La propietat "{class}"."{property}" no es troba definida.',

  'Property "{class}.{property}" is read only.' => 'La propietat "{class}"."{property}" només és de lectura.',

  'Queue data must be an array or an object implementing Traversable.' => 'Les dades de la cua han de ser un vector (array) o un objecte que implementi la interfície Traversable.',

  'Relation "{name}" is not defined in active record class "{class}".' => 'La relació "{name}" no es troba definida no se encuentra definida en la clase active record "{class}".',

  'Stack data must be an array or an object implementing Traversable.' => 'Les dades de la pila han de ser un vector (array) o un objecte que implementi la interfície Traversable',

  'Table "{table}" does not exist.' => 'La taula "{table}" no existeix.',

  'Table "{table}" does not have a column named "{column}".' => 'La taula "{table}" no conté la columna "{column}".',

  'The "filter" property must be specified with a valid callback.' => 'La propietat "filter" ha de ser especificada amb un callback vàlid.',

  'The "pattern" property must be specified with a valid regular expression.' => 'La propietat "pattern" ha de ser especificada amb una expressió regular vàlida.',

  'The CSRF token could not be verified.' => 'El vostre token CSRF no pot ser verificat.',

  'The STAT relation "{name}" cannot have child relations.' => 'La relació STAT "{name}" no pot tenir relaciones filles.',

  'The URL pattern "{pattern}" for route "{route}" is not a valid regular expression.' => 'El patró d\'URL "{pattern}" no és una expressió regular vàlida.',

  'The active record cannot be deleted because it is new.' => 'L\' active record no pot ser eliminat perquè és nou.',

  'The active record cannot be inserted to database because it is not new.' => 'L\'active record no pot ser inserit a la base de dades perquè no és nou.',

  'The active record cannot be updated because it is new.' => 'L\' active record no pot ser actualitzat perquè és nou.',

  'The asset "{asset}" to be published does not exist.' => 'L\' asset "{asset} a que ha de ser publicat no existeix.',

  'The command path "{path}" is not a valid directory.' => 'La ruta de comanda "{path}" no és un directori vàlid.',

  'The controller path "{path}" is not a valid directory.' => 'La ruta del controlador "{path}" no és un directori vàlid.',

  'The file "{file}" cannot be uploaded. Only files with these extensions are allowed: {extensions}.' => 'L\'arxiu "{file}" no pot ser pujat. Només els arxius amb les següents extensions són permesos: {extensions}.',

  'The file "{file}" is too large. Its size cannot exceed {limit} bytes.' => 'L\'arxuy "{file}" és massa gran. La seva mida màxima no pot excedir de {limit} bytes.',

  'The file "{file}" is too small. Its size cannot be smaller than {limit} bytes.' => 'L\'arxiu "{file}" és massa petit. La seva mida mínima no pot ser menor de {limit} bytes.',

  'The file "{file}" was only partially uploaded.' => 'L\'arxiu "{file}" s\'ha pujat parcialment.',

  'The first element in a filter configuration must be the filter class.' => 'El primer element de la configuració d\'un filtre ha de ser la clase del filtre.',

  'The item "{name}" does not exist.' => 'L\'element "{name}" és inexistent.',

  'The item "{parent}" already has a child "{child}".' => 'L\'element "{parent}" ja conté un element fill "{child}".',

  'The layout path "{path}" is not a valid directory.' => 'La ruta d\'esquema "{path}" no és un directori vàlid.',

  'The list is read only.' => 'La llista només és de lectura.',

  'The map is read only.' => 'El mapa només és de lectura.',

  'The module path "{path}" is not a valid directory.' => 'La ruta del mòdul "{path}" no és un directori vàlid.',

  'The pattern for 12 hour format must be "h" or "hh".' => 'El patró per les hores en format de 12 hores ha de ser "h" o "hh".',

  'The pattern for 24 hour format must be "H" or "HH".' => 'El patró per les hores en format de 24 hores ha de ser "H" o "HH".',

  'The pattern for AM/PM marker must be "a".' => 'El patró pel marcador AM/PM ha de ser "a".',

  'The pattern for day in month must be "F".' => 'El patró pel dia del mes ha de ser "F".',

  'The pattern for day in year must be "D", "DD" or "DDD".' => 'El patró pel dia de l\'any ha de ser "D", "DD", "DDD".',

  'The pattern for day of the month must be "d" or "dd".' => 'El patró pel dia ha de ser "d" o "dd".',

  'The pattern for era must be "G", "GG", "GGG", "GGGG" or "GGGGG".' => 'El patró per les eres ha de ser "G", "GG", "GGG", "GGGG" o "GGGGG".',

  'The pattern for hour in AM/PM must be "K" or "KK".' => 'El patró per les hores en AM/PM ha de ser "K" o "KK".',

  'The pattern for hour in day must be "k" or "kk".' => 'El patró per les hores del dia ha de ser "k" o "kk".',

  'The pattern for minutes must be "m" or "mm".' => 'El patró pels minuts ha de ser "m" o "mm".',

  'The pattern for seconds must be "s" or "ss".' => 'El patró pels segons ha de ser "s" o "ss".',

  'The pattern for time zone must be "z" or "v".' => 'El patró per la zona horària ha de ser "z" o "v".',

  'The pattern for week in month must be "W".' => 'El patró per la setmana del mes ha de ser "W".',

  'The pattern for week in year must be "w".' => 'El patró per la setmana de l\'any ha de ser "w".',

  'The queue is empty.' => 'La cua esta buida',

  'The relation "{relation}" in active record class "{class}" is not specified correctly. The join table "{joinTable}" given in the foreign key cannot be found in the database.' => 'La relació "{relation}" de la clase de registre actiu (Active Record) "{class}" s\'ha especificat correctament. La taula d\' unió o de junta (UNION o JOIN) "{joinTable}" donada a la clau forània no es troba a la base de dades.',

  'The relation "{relation}" in active record class "{class}" is not specified correctly: the join table "{joinTable}" given in the foreign key cannot be found in the database.' => 'La relació "{relation}" de la clase de regsitre actiu (Active Record) "{class}" no s\'ha especificat correctament. La taula de junta (JOIN) "{joinTable}" donada no s\'ha trobat a la base de dades.',

  'The relation "{relation}" in active record class "{class}" is specified with a foreign key "{key}" that does not point to the parent table "{table}".' => 'La relación "{relation}" de la clase de registre actiu (Active Record) "{class}" és especificada amb una clau forània "{key}" que no apunta a la taula pare "{table}".',

  'The relation "{relation}" in active record class "{class}" is specified with an incomplete foreign key. The foreign key must consist of columns referencing both joining tables.' => 'La relació "{relation}" de la clase de regsitre actiu (Active Record) "{class}" s\'ha especificat amb una clau forània de manera incompleta. La clau forània ha de consistir de les columnes que referencien la unió de les taules.',

  'The relation "{relation}" in active record class "{class}" is specified with an invalid foreign key "{key}". There is no such column in the table "{table}".' => 'La relació "{relation}" de la clase de regsitre actiu (Active Record) "{class}" és especificada amb una clau forània que no és vàlida "{key}". No existeix dita columna a la taula "{table}".',

  'The relation "{relation}" in active record class "{class}" is specified with an invalid foreign key. The columns in the key must match the primary keys of the table "{table}".' => 'La relació "{relation}" de la clase de regsitre actiu (Active Record) "{class}" és especificada amb una clau forània que no és vàlida. Les columnes de la clau forània han de coincidir amb les claus primàries de les taula "{table}".',

  'The relation "{relation}" in active record class "{class}" is specified with an invalid foreign key. The format of the foreign key must be "joinTable(fk1,fk2,...)".' => 'La relació "{relation}" de la clase de regsitre actiu (Active Record) "{class}" es troba especificada amb una clau forània invàlida. El format de la clau forània ha de ser "joinTable(fk1,fk2,...)".',

  'The stack is empty.' => 'La pila esta buida.',

  'The system is unable to find the requested action "{action}".' => 'El sistema no ha pogut trobar l\'acció "{action}" sol·licitada.',

  'The system view path "{path}" is not a valid directory.' => 'La ruta de vistes de sistema "{path}" no és un directori vàlid.',

  'The table "{table}" for active record class "{class}" cannot be found in the database.' => 'La taula "{table}" definida a la clase de regsitre actiu (Active Record) "{class}" no s\'ha pogut trobar a la base de dades.',

  'The value for the column "{column}" is not supplied when querying the table "{table}".' => 'El valor per la columna "{column}" no és suministrat quan es consulta la taula "{table}".',

  'The verification code is incorrect.' => 'El codi de verificació és incorrecte.',

  'The view path "{path}" is not a valid directory.' => 'La ruta de la vista "{path}" no és un directori vàlid.',

  'Theme directory "{directory}" does not exist.' => 'El directori de tema "{directory}" no existeix.',

  'This content requires the <a href="http://www.adobe.com/go/getflash/">Adobe Flash Player</a>.' => 'Aquest contingut requereix <a href="http://www.adobe.com/go/getflash/">Adobe Flash Player</a>.',

  'Unable to add an item whose name is the same as an existing item.' => 'No s\'ha pogut afegir un element el qual el nom és el mateix que el d\'un altre element existent.',

  'Unable to change the item name. The name "{name}" is already used by another item.' => 'No es pot modificar el nom de l\'element. El nom "{name}" ja l\'utilitza un altre element.',

  'Unable to create application state file "{file}". Make sure the directory containing the file exists and is writable by the Web server process.' => 'No s\'ha pogut crear l\'arxiu d\'estat d\'aplicació "{file}". Asseguris que el directori que conté el fitxer existeix i que sigui un directori amb permisos d\'escriptura pel procés que corre el servidor Web.',

  'Unable to lock file "{file}" for reading.' => 'No s\'ha pogut bloquejar l\'arxiu "{file}" per la lectura.',

  'Unable to lock file "{file}" for writing.' => 'No s\'ha pogut bloquejar l\'arxiu "{file}" per l\'escriptura.',

  'Unable to read file "{file}".' => 'No s\'ha pogut llegir el fitxer "{file}".',

  'Unable to replay the action "{object}.{method}". The method does not exist.' => 'Impossible replicar l\'acció "{object}.{method}". El mètode no existeix.',

  'Unable to resolve the request "{route}".' => 'No és possible resoldre la sol·licitud "{route}"',

  'Unable to write file "{file}".' => 'No s\'ha pogut escriure el fitxer "{file}".',

  'Unknown authorization item "{name}".' => 'Element d\'autorizació "{name}" desconegut.',

  'Unrecognized locale "{locale}".' => 'Localització no reconeguda: "{locale}".',

  'View file "{file}" does not exist.' => 'L\'arxiu de vista "{view}" no existeix.',

  'Yii application can only be created once.' => 'Només es pot crear una aplicació Yii.',

  'You are not authorized to perform this action.' => 'Vostè no es troba autoritzat a realitzar aquesta operació.',

  '{attribute} "{value}" has already been taken.' => '{attribute} "{value}" ja ha sigut especificat.',

  '{attribute} "{value}" is invalid.' => '{attribute} "{value}" no és vàlid.',

  '{attribute} cannot be blank.' => '{attribute} no pot ser nul.',

  '{attribute} is invalid.' => '{attribute} no és vàlid.',

  '{attribute} is not a valid URL.' => '{attribute} no és una URL vàlida.',

  '{attribute} is not a valid email address.' => '{attribute} no és un correu electrònic vàlid.',

  '{attribute} is not in the list.' => '{attribute} no es troba a la llista.',

  '{attribute} is of the wrong length (should be {length} characters).' => '{attribute} té una llargada incorrecta (ha de ser de {length} caràcters).',

  '{attribute} is too big (maximum is {max}).' => '{attribute} és massa gran (el màxim és {max}).',

  '{attribute} is too long (maximum is {max} characters).' => '{attribute} és massa llarg (el màxim és de {max} caràcters).',

  '{attribute} is too short (minimum is {min} characters).' => '{attribute} és massa curt (el mínim és de {min} caràcters).',

  '{attribute} is too small (minimum is {min}).' => '{attribute} és massa petit (el mínim és {min}).',

  '{attribute} must be a number.' => '{attribute} ha de ser un nombre.',

  '{attribute} must be an integer.' => '{attribute} ha de ser un nombre enter.',

  '{attribute} must be either {true} or {false}.' => '{attribute} ha de ser {true} o {false}.',

  '{attribute} must be greater than "{compareValue}".' => '{attribute} ha de ser major que "{compareValue}".',

  '{attribute} must be greater than or equal to "{compareValue}".' => '{attribute} ha de ser major o igual que "{compareValue}".',

  '{attribute} must be less than "{compareValue}".' => '{attribute} ha de ser menor que "{compareValue}".',

  '{attribute} must be less than or equal to "{compareValue}".' => '{attribute} ha de ser menor o igual que "{compareValue}".',

  '{attribute} must be repeated exactly.' => '{attribute} ha de ser repetit exactament.',

  '{attribute} must be {type}.' => '{attribute} ha de ser {type}.',

  '{className} does not support add() functionality.' => '{className} no suporta la funcionalitat add().',

  '{className} does not support delete() functionality.' => '{className} no suporta la funcionalitat delete().',

  '{className} does not support get() functionality.' => '{className} no suporta la funcionalitat get().',

  '{className} does not support set() functionality.' => '{className} no suporta la funcionalitat set().',

  '{class} does not have relation "{name}".' => '{class} no té la relació "{name}".',

  '{class} does not support fetching all table names.' => '{class} no suporta portar tots els noms de les taules.',

  '{class} has an invalid validation rule. The rule must specify attributes to be validated and the validator name.' => '{class} té una regla de validació que no és vàlida. La regla ha d\'especificar els atributs que han de ser validats i un nom pel validador.',

  '{class} must specify "model" and "attribute" or "name" property values.' => '{class} ha d\'especificar els valors de la propietat "model" i "attribute" o "name".',

  '{class}.allowAutoLogin must be set true in order to use cookie-based authentication.' => '{class}.allowAutoLogin ha de ser assignat com a {true} per poder utilitzar l\'autenticació basada en cookies.',

  '{class}::authenticate() must be implemented.' => '{class}::authenticate() ha de ser implementat.',

  '{controller} cannot find the requested view "{view}".' => '{controller} no ha pogut trobar la vista "{view}" sol·licitada.',

  '{controller} contains improperly nested widget tags in its view "{view}". A {widget} widget does not have an endWidget() call.' => '{controller} conté etiquetes de widget a la vista "{view}" tancades incorrectament. {widget} widget no conté la crida a endWidget().',

  '{controller} has an extra endWidget({id}) call in its view.' => '{controller} té una crida extra a endWidget({id}) a la seva vista.',

  '{widget} cannot find the view "{view}".' => '{widget} no ha pogut trobar la vista "{view}".',

);



And here is the


/myProject/yii/framework/messages/ca/zii.php

file:


<?php

/**

 * Message translations.

 *

 * This file is automatically generated by 'yiic message' command.

 * It contains the localizable messages extracted from source code.

 * You may modify this file by translating the extracted messages.

 *

 * Each array element represents the translation (value) of a message (key).

 * If the value is empty, the message is considered as not translated.

 * Messages that no longer need translation will have their translations

 * enclosed between a pair of '@@' marks.

 *

 * Message string can be used with plural forms format. Check i18n section

 * of the guide for details.

 *

 * NOTE, this file must be saved in UTF-8 encoding.

 */

return array (

  'Home' => 'Home',

  'The button type "{type}" is not supported.' => 'El tipus de botó "{type}" no és suportat.',

  'The property filterSelector should be defined.' => 'La propietat filterSelector hauría d\'estar definida.',

  'The property updateSelector should be defined.' => 'La propietat updateSelector hauría d\'estar definida.',

  'Are you sure you want to delete this item?' => 'De debò que vol eliminar aquest element?',

  'Delete' => 'Eliminar',

  'Displaying {start}-{end} of 1 result.|Displaying {start}-{end} of {count} results.' => 'Desplegant {start}-{end} de 1 resultat.|Desplegant {start}-{end} de {count} resultats.',

  'Either "name" or "value" must be specified for CDataColumn.' => '"name" o "value" s\'han d\'especificar per a CDataColumn.',

  'No results found.' => 'No s\'han trobat resultats.',

  'Not set' => 'No assignat.',

  'Please specify the "attributes" property.' => 'Si us plau, especifiqui la propietat d\'atributs "attributes".',

  'Please specify the "data" property.' => 'Si us plau, especifiqui la propietat "data".',

  'Sort by: ' => 'Ordenat per: ',

  'The "dataProvider" property cannot be empty.' => 'La propietat "dataProvider" no pot ser buida.',

  'The attribute must be specified in the format of "Name:Type:Label", where "Type" and "Label" are optional.' => 'L\'atribut ha d\'especificar-se en el format "Nom:Tipus:Etiqueta", en què "Tipus" i "Etiqueta" són opcionals.',

  'The column must be specified in the format of "Name:Type:Label", where "Type" and "Label" are optional.' => 'La columna ha d\'especificar-se en el format "Nom:Tipus:Etiqueta", en què "Tipus" i "Etiqueta" són opcionals.',

  'The property "itemView" cannot be empty.' => 'La propietat "itemView" no pot ser buida.',

  'Total 1 result.|Total {count} results.' => 'Total de 1 resultat.|Total de {count} resultats.',

  'Update' => 'Actualitzar',

  'View' => 'Mostrar',

  '{class} must specify "model" and "attribute" or "name" property values.' => '{class} ha d\'especificar valor/s per a "model" i "atributte" o per a "name".',

);



In order to use Catalan as the main language for your Yii application, should add to your


/myProject/protected/config/main.php

and


/myProject/protected/config/test.php

files this lines:




return array(

...

	'language' => 'ca',

	'sourceLanguage' => 'ca',

...

);



I hope this helps some other people who wonders about having their Yii application translated into Catalan. :lol:

By the way, I would also appreciate feedback or corrections.

I would love that those translations one day become official and included in the official Yii Framework download. ::)

Thank you for your attention.

Arnau Aregall.

PD: Sorry for my English mistakes, not a native speaker as you figured out ::)

Translations already added on the main post, as well as configuration tip for setting Catalan as main language.

Really awesome! :)

Welcome aboard.

Much appreciated! :) Thank you!

I finally could post the translations after this post.

It would be great if you’ll contribute your translations via github pull request. Check these guidelines:

For sure! For the moment just made a Pull Request of the properly translated files. Here is the link:

Merged. Thanks.

moltes gràcies