diff --git a/core/control/ContentController.php b/core/control/ContentController.php
index 723d42004..85e6f4c9a 100644
--- a/core/control/ContentController.php
+++ b/core/control/ContentController.php
@@ -318,7 +318,7 @@ HTML;
* Returns the xml:lang and lang attributes
*/
function LangAttributes() {
- $lang = Translatable::current_lang();
+ $lang = Translatable::current_locale();
return "xml:lang=\"$lang\" lang=\"$lang\"";
}
diff --git a/core/control/ModelAsController.php b/core/control/ModelAsController.php
index 23b637d29..1f601f913 100644
--- a/core/control/ModelAsController.php
+++ b/core/control/ModelAsController.php
@@ -63,7 +63,7 @@ class ModelAsController extends Controller implements NestedController {
if(isset($_REQUEST['debug'])) Debug::message("Using record #$child->ID of type $child->class with URL {$this->urlParams['URLSegment']}");
// set language
- if($child->Lang) Translatable::set_reading_lang($child->Lang);
+ if($child->Locale) Translatable::set_reading_locale($child->Locale);
$controllerClass = "{$child->class}_Controller";
diff --git a/core/control/RootURLController.php b/core/control/RootURLController.php
index 7000f9f42..ce9a581bc 100755
--- a/core/control/RootURLController.php
+++ b/core/control/RootURLController.php
@@ -68,7 +68,7 @@ class RootURLController extends Controller {
if($homePageOBJ) {
$urlSegment = $homePageOBJ->URLSegment;
} elseif(Translatable::is_enabled()) {
- $urlSegment = Translatable::get_homepage_urlsegment_by_language(Translatable::current_lang());
+ $urlSegment = Translatable::get_homepage_urlsegment_by_language(Translatable::current_locale());
}
return ($urlSegment) ? $urlSegment : self::get_default_homepage_urlsegment();
diff --git a/core/model/ErrorPage.php b/core/model/ErrorPage.php
index 9db4f9128..8002c8b25 100755
--- a/core/model/ErrorPage.php
+++ b/core/model/ErrorPage.php
@@ -110,7 +110,7 @@ class ErrorPage extends Page {
// if the page is published in a language other than default language,
// write a specific language version of the HTML page
- $filePath = self::get_filepath_for_errorcode($this->ErrorCode, $this->Lang);
+ $filePath = self::get_filepath_for_errorcode($this->ErrorCode, $this->Locale);
if($fh = fopen($filePath, "w")) {
fwrite($fh, $errorContent);
fclose($fh);
@@ -149,7 +149,7 @@ class ErrorPage extends Page {
* @return String
*/
static function get_filepath_for_errorcode($statusCode, $lang = null) {
- if(Translatable::is_enabled() && $lang && $lang != Translatable::default_lang()) {
+ if(Translatable::is_enabled() && $lang && $lang != Translatable::default_locale()) {
return self::$static_filepath . "/error-{$statusCode}-{$lang}.html";
} else {
return self::$static_filepath . "/error-{$statusCode}.html";
diff --git a/core/model/SiteTree.php b/core/model/SiteTree.php
index 6f02242fe..f204c7c6e 100644
--- a/core/model/SiteTree.php
+++ b/core/model/SiteTree.php
@@ -885,8 +885,8 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
}
// get the "long" lang name suitable for the HTTP content-language flag (with hyphens instead of underscores)
- $currentLang = (Translatable::is_enabled()) ? Translatable::current_lang() : i18n::convert_rfc1766(i18n::get_locale());
- $tags .= "\n";
+ $currentLang = (Translatable::is_enabled()) ? Translatable::current_locale() : i18n::get_locale();
+ $tags .= "\n";
// DEPRECATED 2.3: Use MetaTags
$this->extend('updateMetaTags', $tags);
@@ -1747,7 +1747,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
//TODO: Add integration
/*
- if(Translatable::is_enabled() && $controller->Lang != Translatable::default_lang() && !$this->isTranslation())
+ if(Translatable::is_enabled() && $controller->Locale != Translatable::default_locale() && !$this->isTranslation())
$classes .= " untranslated ";
*/
$classes .= $this->markingClasses();
diff --git a/core/model/Translatable.php b/core/model/Translatable.php
index 2c1a83d7a..f0f428f73 100755
--- a/core/model/Translatable.php
+++ b/core/model/Translatable.php
@@ -3,7 +3,7 @@
* The Translatable decorator allows your DataObjects to have versions in different languages,
* defining which fields are can be translated.
*
- * Common language names (e.g. 'en') are used in Translatable for
+ * Common language names (e.g. 'en_US') are used in Translatable for
* database-entities. On the other hand, the file-based i18n-translations
* always have a "locale" (e.g. 'en_US').
*
@@ -23,26 +23,26 @@
*
* Getting a translation for an existing instance:
*
- * $translatedObj = DataObject::get_one_by_lang('MyObject', 'de');
+ * $translatedObj = DataObject::get_one_by_locale('MyObject', 'de_DE');
*
*
* Getting a translation for an existing instance:
*
* $obj = DataObject::get_by_id('MyObject', 99); // original language
- * $translatedObj = $obj->getTranslation('de');
+ * $translatedObj = $obj->getTranslation('de_DE');
*
*
- * Getting translations through {@link Translatable::set_reading_lang()}.
+ * Getting translations through {@link Translatable::set_reading_locale()}.
* This is *not* a recommended approach, but sometimes inavoidable (e.g. for {@link Versioned} methods).
*
* $obj = DataObject::get_by_id('MyObject', 99); // original language
- * $translatedObj = $obj->getTranslation('de');
+ * $translatedObj = $obj->getTranslation('de_DE');
*
*
* Creating a translation:
*
* $obj = new MyObject();
- * $translatedObj = $obj->createTranslation('de');
+ * $translatedObj = $obj->createTranslation('de_DE');
*
*
*
Usage for SiteTree
@@ -55,7 +55,7 @@
* languages by auto-appending the language code at the end.
* You'll need to ensure that the appropriate "reading language" is set
* before showing links to other pages on a website: Either
- * through setting $_COOKIE['lang'], $_SESSION['lang'] or $_GET['lang'].
+ * through setting $_COOKIE['locale'], $_SESSION['locale'] or $_GET['locale'].
* Pages in different languages can have different publication states
* through the {@link Versioned} extension.
*
@@ -93,14 +93,14 @@
* Important: If the "default language" of your site is not english (en_US),
* please ensure to set the appropriate default language for
* your content before building the database with Translatable enabled:
- * Translatable::set_default_language();
+ * Translatable::set_default_locale();
*
* Uninstalling/Disabling
*
* Disabling Translatable after creating translations will lead to all
* pages being shown in the default sitetree regardless of their language.
* It is advised to start with a new database after uninstalling Translatable,
- * or manually filter out translated objects through their "Lang" property
+ * or manually filter out translated objects through their "Locale" property
* in the database.
*
* @author Michael Gall
@@ -123,7 +123,7 @@ class Translatable extends DataObjectDecorator {
* The 'default' language.
* @var string
*/
- protected static $default_lang = 'en';
+ protected static $default_locale = 'en_US';
/**
* The language in which we are reading dataobjects.
@@ -132,7 +132,7 @@ class Translatable extends DataObjectDecorator {
* @see Director::get_site_mode()
* @var string
*/
- protected static $reading_lang = null;
+ protected static $reading_locale = null;
/**
* Indicates if the start language has been determined using choose_site_lang
@@ -141,7 +141,7 @@ class Translatable extends DataObjectDecorator {
protected static $language_decided = false;
/**
- * Indicates whether the 'Lang' transformation when modifying queries should be bypassed
+ * Indicates whether the 'Locale' transformation when modifying queries should be bypassed
* If it's true
*
* @var boolean
@@ -175,7 +175,7 @@ class Translatable extends DataObjectDecorator {
protected $original_values = null;
/**
- * @var boolean Temporarily override the "auto-filter" for {@link current_lang()}
+ * @var boolean Temporarily override the "auto-filter" for {@link current_locale()}
* in {@link augmentSQL()}. IMPORTANT: You must set this value back to TRUE
* after the temporary usage.
*/
@@ -183,7 +183,7 @@ class Translatable extends DataObjectDecorator {
/**
* Choose the language the site is currently on.
- * If $_GET['lang'] or $_COOKIE['lang'] is set, then it will use that language, and store it in the session.
+ * If $_GET['locale'] or $_COOKIE['locale'] is set, then it will use that language, and store it in the session.
* Otherwise it checks the session for a possible stored language, either from namespace to the site_mode
* ('site' or 'cms'), or for a 'global' language setting.
* The final option is the member preference.
@@ -192,25 +192,25 @@ class Translatable extends DataObjectDecorator {
*
* @uses Director::get_site_mode()
* @param $langsAvailable array A numerical array of languages which are valid choices (optional)
- * @return string Selected language (also saved in $reading_lang).
+ * @return string Selected language (also saved in $reading_locale).
*/
static function choose_site_lang($langsAvailable = array()) {
$siteMode = Director::get_site_mode(); // either 'cms' or 'site'
- if(self::$reading_lang) {
+ if(self::$reading_locale) {
self::$language_decided = true;
- return self::$reading_lang;
+ return self::$reading_locale;
}
- if((isset($_GET['lang']) && !$langsAvailable) || (isset($_GET['lang']) && in_array($_GET['lang'], $langsAvailable))) {
+ if((isset($_GET['locale']) && !$langsAvailable) || (isset($_GET['locale']) && in_array($_GET['locale'], $langsAvailable))) {
// get from GET parameter
- self::set_reading_lang($_GET['lang']);
+ self::set_reading_locale($_GET['locale']);
} else {
- self::set_reading_lang(self::default_lang());
+ self::set_reading_locale(self::default_locale());
}
self::$language_decided = true;
- return self::$reading_lang;
+ return self::$reading_locale;
}
/**
@@ -220,34 +220,34 @@ class Translatable extends DataObjectDecorator {
*
* @return string
*/
- static function default_lang() {
- return self::$default_lang;
+ static function default_locale() {
+ return self::$default_locale;
}
/**
* Set default language.
*
- * @param $lang String
+ * @param $locale String
*/
- static function set_default_lang($lang) {
- self::$default_lang = $lang;
+ static function set_default_locale($locale) {
+ self::$default_locale = $locale;
}
/**
* Check whether the default and current reading language are the same.
* @return boolean Return true if both default and reading language are the same.
*/
- static function is_default_lang() {
- return (!self::current_lang() || self::$default_lang == self::current_lang());
+ static function is_default_locale() {
+ return (!self::current_locale() || self::$default_locale == self::current_locale());
}
/**
* Get the current reading language.
* @return string
*/
- static function current_lang() {
+ static function current_locale() {
if (!self::$language_decided) self::choose_site_lang();
- return self::$reading_lang;
+ return self::$reading_locale;
}
/**
@@ -258,25 +258,25 @@ class Translatable extends DataObjectDecorator {
*
* @param string $lang New reading language.
*/
- static function set_reading_lang($lang) {
- self::$reading_lang = $lang;
+ static function set_reading_locale($locale) {
+ self::$reading_locale = $locale;
self::$language_decided = true;
}
/**
* Get a singleton instance of a class in the given language.
* @param string $class The name of the class.
- * @param string $lang The name of the language.
+ * @param string $locale The name of the language.
* @param string $filter A filter to be inserted into the WHERE clause.
* @param boolean $cache Use caching (default: false)
* @param string $orderby A sort expression to be inserted into the ORDER BY clause.
* @return DataObject
*/
- static function get_one_by_lang($class, $lang, $filter = '', $cache = false, $orderby = "") {
- $orig = Translatable::current_lang();
- Translatable::set_reading_lang($lang);
+ static function get_one_by_locale($class, $locale, $filter = '', $cache = false, $orderby = "") {
+ $orig = Translatable::current_locale();
+ Translatable::set_reading_locale($locale);
$do = DataObject::get_one($class, $filter, $cache, $orderby);
- Translatable::set_reading_lang($orig);
+ Translatable::set_reading_locale($orig);
return $do;
}
@@ -284,7 +284,7 @@ class Translatable extends DataObjectDecorator {
* Get all the instances of the given class translated to the given language
*
* @param string $class The name of the class
- * @param string $lang The name of the language
+ * @param string $locale The name of the language
* @param string $filter A filter to be inserted into the WHERE clause.
* @param string $sort A sort expression to be inserted into the ORDER BY clause.
* @param string $join A single join clause. This can be used for filtering, only 1 instance of each DataObject will be returned.
@@ -293,26 +293,14 @@ class Translatable extends DataObjectDecorator {
* @param string $having A filter to be inserted into the HAVING clause.
* @return mixed The objects matching the conditions.
*/
- static function get_by_lang($class, $lang, $filter = '', $sort = '', $join = "", $limit = "", $containerClass = "DataObjectSet", $having = "") {
- $oldLang = self::current_lang();
- self::set_reading_lang($lang);
+ static function get_by_locale($class, $locale, $filter = '', $sort = '', $join = "", $limit = "", $containerClass = "DataObjectSet", $having = "") {
+ $oldLang = self::current_locale();
+ self::set_reading_locale($locale);
$result = DataObject::get($class, $filter, $sort, $join, $limit, $containerClass, $having);
- self::set_reading_lang($oldLang);
+ self::set_reading_locale($oldLang);
return $result;
}
- /**
- * Get a record in his original language version.
- * @param string $class The name of the class.
- * @param string $originalLangID The original record id.
- * @return DataObject
- */
- static function get_original($class, $originalLangID) {
- $baseClass = $class;
- while( ($p = get_parent_class($baseClass)) != "DataObject") $baseClass = $p;
- return self::get_one_by_lang($class,self::default_lang(),"\"$baseClass\".\"ID\" = $originalLangID");
- }
-
/**
* Gets all translations for this specific page.
* Doesn't include the language of the current record.
@@ -331,7 +319,7 @@ class Translatable extends DataObjectDecorator {
$translationGroupID = $this->owner->getTranslationGroup();
if(is_numeric($translationGroupID)) {
$query = new SQLQuery(
- 'DISTINCT Lang',
+ 'DISTINCT Locale',
sprintf(
'"%s" LEFT JOIN "%s" ON "%s"."OriginalID" = "%s"."ID"',
$baseDataClass,
@@ -340,11 +328,11 @@ class Translatable extends DataObjectDecorator {
$baseDataClass
), // from
sprintf(
- '"%s"."TranslationGroupID" = %d AND "%s"."Lang" != \'%s\'',
+ '"%s"."TranslationGroupID" = %d AND "%s"."Locale" != \'%s\'',
$translationGroupClass,
$translationGroupID,
$baseDataClass,
- $this->owner->Lang
+ $this->owner->Locale
) // where
);
$langs = $query->execute()->column();
@@ -445,11 +433,11 @@ class Translatable extends DataObjectDecorator {
if(get_class($this->owner) == ClassInfo::baseDataClass(get_class($this->owner))) {
return array(
"db" => array(
- "Lang" => "Varchar(12)",
+ "Locale" => "Varchar(12)",
"TranslationMasterID" => "Int" // optional relation to a "translation master"
),
"defaults" => array(
- "Lang" => Translatable::default_lang() // as an overloaded getter as well: getLang()
+ "Locale" => Translatable::default_locale() // as an overloaded getter as well: getLang()
)
);
} else {
@@ -459,8 +447,8 @@ class Translatable extends DataObjectDecorator {
/**
* Changes any SELECT query thats not filtering on an ID
- * to limit by the current language defined in {@link current_lang()}.
- * It falls back to "Lang='' OR Lang IS NULL" and assumes that
+ * to limit by the current language defined in {@link current_locale()}.
+ * It falls back to "Locale='' OR Lang IS NULL" and assumes that
* this implies querying for the default language.
*
* Use {@link $enable_lang_filter} to temporarily disable this "auto-filtering".
@@ -468,7 +456,7 @@ class Translatable extends DataObjectDecorator {
function augmentSQL(SQLQuery &$query) {
if(!Translatable::is_enabled()) return;
- $lang = Translatable::current_lang();
+ $lang = Translatable::current_locale();
$baseTable = ClassInfo::baseDataClass($this->owner->class);
$where = $query->where;
if(
@@ -484,10 +472,10 @@ class Translatable extends DataObjectDecorator {
&& !preg_match('/("|\')Lang("|\')/', $query->getFilter())
//&& !$query->filtersOnFK()
) {
- $qry = "\"Lang\" = '$lang'";
- if(Translatable::is_default_lang()) {
- $qry .= " OR \"Lang\" = '' ";
- $qry .= " OR \"Lang\" IS NULL ";
+ $qry = "\"Locale\" = '$lang'";
+ if(Translatable::is_default_locale()) {
+ $qry .= " OR \"Locale\" = '' ";
+ $qry .= " OR \"Locale\" IS NULL ";
}
$query->where[] = $qry;
}
@@ -592,7 +580,7 @@ class Translatable extends DataObjectDecorator {
function contentcontrollerInit($controller) {
if(!Translatable::is_enabled()) return;
Translatable::choose_site_lang();
- $controller->Lang = Translatable::current_lang();
+ $controller->Locale = Translatable::current_locale();
}
function modelascontrollerInit($controller) {
@@ -617,12 +605,12 @@ class Translatable extends DataObjectDecorator {
function onBeforeWrite() {
if(!Translatable::is_enabled()) return;
- // If language is not set explicitly, set it to current_lang.
+ // If language is not set explicitly, set it to current_locale.
// This might be a bit overzealous in assuming the language
// of the content, as a "single language" website might be expanded
// later on.
- if(!$this->owner->ID && !$this->owner->Lang) {
- $this->owner->Lang = Translatable::current_lang();
+ if(!$this->owner->ID && !$this->owner->Locale) {
+ $this->owner->Locale = Translatable::current_locale();
}
// Specific logic for SiteTree subclasses.
@@ -633,9 +621,9 @@ class Translatable extends DataObjectDecorator {
if(
!$this->owner->ID
&& $this->owner->ParentID
- && !$this->owner->Parent()->hasTranslation($this->owner->Lang)
+ && !$this->owner->Parent()->hasTranslation($this->owner->Locale)
) {
- $parentTranslation = $this->owner->Parent()->createTranslation($this->owner->Lang);
+ $parentTranslation = $this->owner->Parent()->createTranslation($this->owner->Locale);
$this->owner->ParentID = $parentTranslation->ID;
}
}
@@ -645,10 +633,10 @@ class Translatable extends DataObjectDecorator {
// will save as "myfrenchpage-fr" (only if we're not in the "default language").
// Its bad SEO to have multiple resources with different content (=language) under the same URL.
if($this->owner->hasField('URLSegment')) {
- if(!$this->owner->ID && $this->owner->Lang != Translatable::default_lang()) {
+ if(!$this->owner->ID && $this->owner->Locale != Translatable::default_locale()) {
$SQL_URLSegment = Convert::raw2sql($this->owner->URLSegment);
- $existingOriginalPage = Translatable::get_one_by_lang('SiteTree', Translatable::default_lang(), "\"URLSegment\" = '{$SQL_URLSegment}'");
- if($existingOriginalPage) $this->owner->URLSegment .= "-{$this->owner->Lang}";
+ $existingOriginalPage = Translatable::get_one_by_lang('SiteTree', Translatable::default_locale(), "\"URLSegment\" = '{$SQL_URLSegment}'");
+ if($existingOriginalPage) $this->owner->URLSegment .= "-{$this->owner->Locale}";
}
}
@@ -733,7 +721,7 @@ class Translatable extends DataObjectDecorator {
if(!($this->owner instanceof SiteTree)) return;
// used in CMSMain->init() to set language state when reading/writing record
- $fields->push(new HiddenField("Lang", "Lang", $this->owner->Lang) );
+ $fields->push(new HiddenField("Locale", "Locale", $this->owner->Locale) );
// if a language other than default language is used, we're in "translation mode",
// hence have to modify the original fields
@@ -743,14 +731,14 @@ class Translatable extends DataObjectDecorator {
while( ($p = get_parent_class($baseClass)) != "DataObject") $baseClass = $p;
// try to get the record in "default language"
- $originalRecord = $this->owner->getTranslation(Translatable::default_lang());
+ $originalRecord = $this->owner->getTranslation(Translatable::default_locale());
// if no translation in "default language", fall back to first translation
if(!$originalRecord) {
$translations = $this->owner->getTranslations();
$originalRecord = ($translations) ? $translations->First() : null;
}
- $isTranslationMode = $this->owner->Lang != Translatable::default_lang();
+ $isTranslationMode = $this->owner->Locale != Translatable::default_locale();
if($originalRecord && $isTranslationMode) {
$originalLangID = Session::get($this->owner->ID . '_originalLangID');
@@ -794,11 +782,11 @@ class Translatable extends DataObjectDecorator {
// We'd still want to show the default lang though,
// as records in this language might have NULL values in their $Lang property
// and otherwise wouldn't show up here
- //$alreadyTranslatedLangs[Translatable::default_lang()] = i18n::get_language_name(Translatable::default_lang());
+ //$alreadyTranslatedLangs[Translatable::default_locale()] = i18n::get_locale_name(Translatable::default_locale());
// Exclude the current language from being shown.
- if(Translatable::current_lang() != Translatable::default_lang()) {
- $currentLangKey = array_search(Translatable::current_lang(), $alreadyTranslatedLangs);
+ if(Translatable::current_locale() != Translatable::default_locale()) {
+ $currentLangKey = array_search(Translatable::current_locale(), $alreadyTranslatedLangs);
if($currentLangKey) unset($alreadyTranslatedLangs[$currentLangKey]);
}
@@ -806,7 +794,13 @@ class Translatable extends DataObjectDecorator {
'Root',
new Tab(_t('Translatable.TRANSLATIONS', 'Translations'),
new HeaderField('CreateTransHeader', _t('Translatable.CREATE', 'Create new translation'), 2),
- $langDropdown = new LanguageDropdownField("NewTransLang", _t('Translatable.NEWLANGUAGE', 'New language'), $alreadyTranslatedLangs),
+ $langDropdown = new LanguageDropdownField(
+ "NewTransLang",
+ _t('Translatable.NEWLANGUAGE', 'New language'),
+ $alreadyTranslatedLangs,
+ 'SiteTree',
+ 'Locale-English'
+ ),
$createButton = new InlineFormAction('createtranslation',_t('Translatable.CREATEBUTTON', 'Create'))
)
);
@@ -822,8 +816,8 @@ class Translatable extends DataObjectDecorator {
$existingTranslation = $this->owner->getTranslation($langCode);
if($existingTranslation) {
$existingTransHTML .= sprintf('%s',
- sprintf('admin/show/%d/?lang=%s', $existingTranslation->ID, $langCode),
- i18n::get_language_name($langCode)
+ sprintf('admin/show/%d/?locale=%s', $existingTranslation->ID, $langCode),
+ i18n::get_locale_name($langCode)
);
}
}
@@ -879,10 +873,10 @@ class Translatable extends DataObjectDecorator {
* excluding itself. See {@link getTranslation()} to retrieve
* a single translated object.
*
- * @param string $lang
+ * @param string $locale
* @return DataObjectSet
*/
- function getTranslations($lang = null) {
+ function getTranslations($locale = null) {
if($this->owner->exists()) {
// HACK need to disable language filtering in augmentSQL(),
// as we purposely want to get different language
@@ -892,11 +886,11 @@ class Translatable extends DataObjectDecorator {
$baseDataClass = ClassInfo::baseDataClass($this->owner->class);
$filter = sprintf('"%s_translationgroups"."TranslationGroupID" = %d', $baseDataClass, $translationGroupID);
- if($lang) {
- $filter .= sprintf(' AND "%s"."Lang" = \'%s\'', $baseDataClass, Convert::raw2sql($lang));
+ if($locale) {
+ $filter .= sprintf(' AND "%s"."Locale" = \'%s\'', $baseDataClass, Convert::raw2sql($locale));
} else {
// exclude the language of the current owner
- $filter .= sprintf(' AND "%s"."Lang" != \'%s\'', $baseDataClass, $this->owner->Lang);
+ $filter .= sprintf(' AND "%s"."Locale" != \'%s\'', $baseDataClass, $this->owner->Locale);
}
$join = sprintf('LEFT JOIN "%s_translationgroups" ON "%s_translationgroups"."OriginalID" = "%s"."ID"',
$baseDataClass,
@@ -921,11 +915,11 @@ class Translatable extends DataObjectDecorator {
* Use {@link hasTranslation()} as a quicker alternative to check
* for an existing translation without getting the actual object.
*
- * @param String $lang
+ * @param String $locale
* @return DataObject Translated object
*/
- function getTranslation($lang) {
- $translations = $this->getTranslations($lang);
+ function getTranslation($locale) {
+ $translations = $this->getTranslations($locale);
return ($translations) ? $translations->First() : null;
}
@@ -938,15 +932,15 @@ class Translatable extends DataObjectDecorator {
* it belongs to. For "original records" which are not created through this
* method, the "translation group" is set in {@link onAfterWrite()}.
*
- * @param string $lang
+ * @param string $locale
* @return DataObject The translated object
*/
- function createTranslation($lang) {
+ function createTranslation($locale) {
if(!$this->owner->exists()) {
user_error('Translatable::createTranslation(): Please save your record before creating a translation', E_USER_ERROR);
}
- $existingTranslation = $this->getTranslation($lang);
+ $existingTranslation = $this->getTranslation($locale);
if($existingTranslation) return $existingTranslation;
$class = $this->owner->class;
@@ -954,7 +948,7 @@ class Translatable extends DataObjectDecorator {
// copy all fields from owner (apart from ID)
$newTranslation->update($this->owner->toMap());
$newTranslation->ID = 0;
- $newTranslation->Lang = $lang;
+ $newTranslation->Locale = $locale;
// hacky way to set an existing translation group in onAfterWrite()
$translationGroupID = $this->owner->getTranslationGroup();
$newTranslation->_TranslationGroupID = $translationGroupID ? $translationGroupID : $this->owner->ID;
@@ -968,10 +962,11 @@ class Translatable extends DataObjectDecorator {
* Use {@link getTranslation()} to get the actual translated record from
* the database.
*
+ * @param string $locale
* @return boolean
*/
- function hasTranslation($lang) {
- return (array_search($lang, $this->getTranslatedLangs()) !== false);
+ function hasTranslation($locale) {
+ return (array_search($locale, $this->getTranslatedLangs()) !== false);
}
/*
@@ -1007,12 +1002,12 @@ class Translatable extends DataObjectDecorator {
$find = array();
$replace = array();
- if($context && $context->Lang && $context->Lang != Translatable::default_lang()) {
+ if($context && $context->Locale && $context->Locale != Translatable::default_locale()) {
if($children) {
foreach($children as $child) {
- if($child->hasTranslation($context->Lang)) {
- $trans = $child->getTranslation($context->Lang);
+ if($child->hasTranslation($context->Locale)) {
+ $trans = $child->getTranslation($context->Locale);
if($trans) {
$find[] = $child;
$replace[] = $trans;
@@ -1032,16 +1027,16 @@ class Translatable extends DataObjectDecorator {
* Get a list of languages with at least one element translated in (including the default language)
*
* @param string $className Look for languages in elements of this class
- * @return array Map of languages in the form langCode => langName
+ * @return array Map of languages in the form locale => langName
*/
static function get_existing_content_languages($className = 'SiteTree', $where = '') {
if(!Translatable::is_enabled()) return false;
$baseTable = ClassInfo::baseDataClass($className);
- $query = new SQLQuery('Distinct Lang',$baseTable,$where,"",'Lang');
+ $query = new SQLQuery('Distinct Locale',$baseTable,$where,"",'Locale');
$dbLangs = $query->execute()->column();
- $langlist = array_merge((array)Translatable::default_lang(), (array)$dbLangs);
+ $langlist = array_merge((array)Translatable::default_locale(), (array)$dbLangs);
$returnMap = array();
- $allCodes = array_merge(i18n::$all_locales, i18n::$common_languages);
+ $allCodes = array_merge(i18n::$all_locales, i18n::$common_locales);
foreach ($langlist as $langCode) {
if($langCode)
$returnMap[$langCode] = (is_array($allCodes[$langCode]) ? $allCodes[$langCode][0] : $allCodes[$langCode]);
@@ -1055,17 +1050,17 @@ class Translatable extends DataObjectDecorator {
* (as identified by RootURLController::$default_homepage_urlsegment).
* Returns NULL if no translated page can be found.
*
- * @param string $Lang
+ * @param string $locale
* @return string|boolean URLSegment (e.g. "home")
*/
- static function get_homepage_urlsegment_by_language($lang) {
- $origHomepageObj = Translatable::get_one_by_lang(
+ static function get_homepage_urlsegment_by_language($locale) {
+ $origHomepageObj = Translatable::get_one_by_locale(
'SiteTree',
- Translatable::default_lang(),
+ Translatable::default_locale(),
sprintf('"URLSegment" = \'%s\'', RootUrlController::get_default_homepage_urlsegment())
);
if($origHomepageObj) {
- $translatedHomepageObj = $origHomepageObj->getTranslation(Translatable::current_lang());
+ $translatedHomepageObj = $origHomepageObj->getTranslation(Translatable::current_locale());
if($translatedHomepageObj) {
return $translatedHomepageObj->URLSegment;
}
@@ -1073,6 +1068,62 @@ class Translatable extends DataObjectDecorator {
return null;
}
+
+ /**
+ * @deprecated 2.4 Use is_default_locale()
+ */
+ static function is_default_lang() {
+ return self::is_default_locale();
+ }
+
+ /**
+ * @deprecated 2.4 Use set_default_locale()
+ */
+ static function set_default_lang($lang) {
+ self::set_default_locale($lang);
+ }
+
+ /**
+ * @deprecated 2.4 Use get_default_locale()
+ */
+ static function get_default_lang() {
+ return self::get_default_locale();
+ }
+
+ /**
+ * @deprecated 2.4 Use current_locale()
+ */
+ static function current_lang() {
+ return self::current_locale();
+ }
+
+ /**
+ * @deprecated 2.4 Use set_reading_locale()
+ */
+ static function set_reading_lang($lang) {
+ self::set_reading_locale($lang);
+ }
+
+ /**
+ * @deprecated 2.4 Use get_reading_locale()
+ */
+ static function get_reading_lang() {
+ return self::get_reading_locale();
+ }
+
+ /**
+ * @deprecated 2.4 Use get_by_locale()
+ */
+ static function get_by_lang($class, $lang, $filter = '', $sort = '', $join = "", $limit = "", $containerClass = "DataObjectSet", $having = "") {
+ return self::get_by_locale($class, $lang, $filter, $sort, $join, $limit, $containerClass, $having);
+ }
+
+ /**
+ * @deprecated 2.4 Use get_one_by_locale()
+ */
+ static function get_one_by_lang($class, $lang, $filter = '', $cache = false, $orderby = "") {
+ return self::get_one_by_locale($class, $lang, $filter, $cache, $orderby);
+ }
}
diff --git a/dev/Debug.php b/dev/Debug.php
index 175dea14c..ed6c622d5 100644
--- a/dev/Debug.php
+++ b/dev/Debug.php
@@ -255,7 +255,7 @@ class Debug {
if(Director::is_ajax()) {
echo $friendlyErrorMessage;
} else {
- $errorFilePath = ErrorPage::get_filepath_for_errorcode($statusCode, Translatable::current_lang());
+ $errorFilePath = ErrorPage::get_filepath_for_errorcode($statusCode, Translatable::current_locale());
if(file_exists($errorfilePath)) {
echo file_get_contents(ASSETS_PATH . "/error-$statusCode.html");
} else {
diff --git a/search/SearchForm.php b/search/SearchForm.php
index 05b93f25a..55d3d85ec 100755
--- a/search/SearchForm.php
+++ b/search/SearchForm.php
@@ -6,7 +6,7 @@
* If multilingual content is enabled through the {@link Translatable} extension,
* only pages the currently set language on the holder for this searchform are found.
* The language is set through a hidden field in the form, which is prepoluated
- * with {@link Translatable::current_lang()} when then form is constructed.
+ * with {@link Translatable::current_locale()} when then form is constructed.
*
* @see Use ModelController and SearchContext for a more generic search implementation based around DataObject
* @package sapphire
@@ -55,7 +55,7 @@ class SearchForm extends Form {
}
if(Translatable::is_enabled()) {
- $fields->push(new HiddenField('lang', 'lang', Translatable::current_lang()));
+ $fields->push(new HiddenField('lang', 'lang', Translatable::current_locale()));
}
if(!$actions) {
@@ -105,7 +105,7 @@ class SearchForm extends Form {
// set language (if present)
if(Translatable::is_enabled() && isset($data['lang'])) {
- Translatable::set_reading_lang($data['lang']);
+ Translatable::set_reading_locale($data['lang']);
}
$keywords = $data['Search'];
diff --git a/tasks/MigrateTranslatableTask.php b/tasks/MigrateTranslatableTask.php
index cfc00b447..49b3e75b4 100644
--- a/tasks/MigrateTranslatableTask.php
+++ b/tasks/MigrateTranslatableTask.php
@@ -35,7 +35,8 @@ class MigrateTranslatableTask extends BuildTask {
// Clone the original, and set it up as a translation
$newtrans = $original->duplicate(false);
$newtrans->OriginalID = $original->ID;
- $newtrans->Lang = $oldtrans['Lang'];
+ // we have to "guess" a locale based on the language
+ $newtrans->Locale = i18n::get_locale_from_lang($oldtrans['Lang']);
if($stage == 'Live' && array_key_exists($original->ID, $ids)) {
$newtrans->ID = $ids[$original->ID];
}
@@ -53,7 +54,7 @@ class MigrateTranslatableTask extends BuildTask {
// Copy each translated field into the new translation
if($oldtransitem) foreach($oldtransitem as $key => $value) {
- if(!in_array($key, array('ID', 'OriginalLangID', 'ClassName', 'Lang'))) {
+ if(!in_array($key, array('ID', 'OriginalLangID', 'ClassName'))) {
$newtrans->$key = $value;
}
}
@@ -62,10 +63,10 @@ class MigrateTranslatableTask extends BuildTask {
// Write the new translation to the database
- $sitelang = Translatable::current_lang();
- Translatable::set_reading_lang($newtrans->Lang);
+ $sitelang = Translatable::current_locale();
+ Translatable::set_reading_locale($newtrans->Locale);
$newtrans->writeToStage($stage, true);
- Translatable::set_reading_lang($sitelang);
+ Translatable::set_reading_locale($sitelang);
if($stage == 'Stage') {
$ids[$original->ID] = $newtrans->ID;
@@ -79,4 +80,4 @@ class MigrateTranslatableTask extends BuildTask {
}
}
-?>
+?>
\ No newline at end of file
diff --git a/tests/model/TranslatableTest.php b/tests/model/TranslatableTest.php
index 258207258..b11648f85 100644
--- a/tests/model/TranslatableTest.php
+++ b/tests/model/TranslatableTest.php
@@ -16,9 +16,9 @@ class TranslatableTest extends FunctionalTest {
function setUp() {
$this->origTranslatableSettings['enabled'] = Translatable::is_enabled();
- $this->origTranslatableSettings['default_lang'] = Translatable::default_lang();
+ $this->origTranslatableSettings['default_locale'] = Translatable::default_locale();
Translatable::enable();
- Translatable::set_default_lang("en");
+ Translatable::set_default_locale("en_US");
// needs to recreate the database schema with language properties
self::kill_temp_db();
@@ -34,7 +34,7 @@ class TranslatableTest extends FunctionalTest {
function tearDown() {
if(!$this->origTranslatableSettings['enabled']) Translatable::disable();
- Translatable::set_default_lang($this->origTranslatableSettings['default_lang']);
+ Translatable::set_default_locale($this->origTranslatableSettings['default_locale']);
self::kill_temp_db();
self::create_temp_db();
@@ -45,68 +45,68 @@ class TranslatableTest extends FunctionalTest {
function testTranslationGroups() {
// first in french
$frPage = new SiteTree();
- $frPage->Lang = 'fr';
+ $frPage->Locale = 'fr_FR';
$frPage->write();
// second in english (from french "original")
- $enPage = $frPage->createTranslation('en');
+ $enPage = $frPage->createTranslation('en_US');
// third in spanish (from the english translation)
- $esPage = $enPage->createTranslation('es');
+ $esPage = $enPage->createTranslation('es_ES');
// test french
$this->assertEquals(
- $frPage->getTranslations()->column('Lang'),
- array('en','es')
+ $frPage->getTranslations()->column('Locale'),
+ array('en_US','es_ES')
);
- $this->assertNotNull($frPage->getTranslation('en'));
+ $this->assertNotNull($frPage->getTranslation('en_US'));
$this->assertEquals(
- $frPage->getTranslation('en')->ID,
+ $frPage->getTranslation('en_US')->ID,
$enPage->ID
);
- $this->assertNotNull($frPage->getTranslation('es'));
+ $this->assertNotNull($frPage->getTranslation('es_ES'));
$this->assertEquals(
- $frPage->getTranslation('es')->ID,
+ $frPage->getTranslation('es_ES')->ID,
$esPage->ID
);
// test english
$this->assertEquals(
- $enPage->getTranslations()->column('Lang'),
- array('fr','es')
+ $enPage->getTranslations()->column('Locale'),
+ array('fr_FR','es_ES')
);
- $this->assertNotNull($frPage->getTranslation('fr'));
+ $this->assertNotNull($frPage->getTranslation('fr_FR'));
$this->assertEquals(
- $enPage->getTranslation('fr')->ID,
+ $enPage->getTranslation('fr_FR')->ID,
$frPage->ID
);
- $this->assertNotNull($frPage->getTranslation('es'));
+ $this->assertNotNull($frPage->getTranslation('es_ES'));
$this->assertEquals(
- $enPage->getTranslation('es')->ID,
+ $enPage->getTranslation('es_ES')->ID,
$esPage->ID
);
// test spanish
$this->assertEquals(
- $esPage->getTranslations()->column('Lang'),
- array('fr','en')
+ $esPage->getTranslations()->column('Locale'),
+ array('fr_FR','en_US')
);
- $this->assertNotNull($esPage->getTranslation('fr'));
+ $this->assertNotNull($esPage->getTranslation('fr_FR'));
$this->assertEquals(
- $esPage->getTranslation('fr')->ID,
+ $esPage->getTranslation('fr_FR')->ID,
$frPage->ID
);
- $this->assertNotNull($esPage->getTranslation('en'));
+ $this->assertNotNull($esPage->getTranslation('en_US'));
$this->assertEquals(
- $esPage->getTranslation('en')->ID,
+ $esPage->getTranslation('en_US')->ID,
$enPage->ID
);
}
function testGetTranslationOnSiteTree() {
$origPage = $this->objFromFixture('Page', 'testpage_en');
- $translatedPage = $origPage->createTranslation('fr');
- $getTranslationPage = $origPage->getTranslation('fr');
+ $translatedPage = $origPage->createTranslation('fr_FR');
+ $getTranslationPage = $origPage->getTranslation('fr_FR');
$this->assertNotNull($getTranslationPage);
$this->assertEquals($getTranslationPage->ID, $translatedPage->ID);
@@ -116,18 +116,18 @@ class TranslatableTest extends FunctionalTest {
$origPage = $this->objFromFixture('Page', 'testpage_en');
// through createTranslation()
- $translationAf = $origPage->createTranslation('af');
+ $translationAf = $origPage->createTranslation('af_ZA');
// create a new language on an unrelated page which shouldnt be returned from $origPage
$otherPage = new Page();
$otherPage->write();
- $otherTranslationEs = $otherPage->createTranslation('es');
+ $otherTranslationEs = $otherPage->createTranslation('es_ES');
$this->assertEquals(
$origPage->getTranslatedLangs(),
array(
- 'af',
- //'en', // default language is not included
+ 'af_ZA',
+ //'en_US', // default language is not included
),
'Language codes are returned specifically for the queried page through getTranslatedLangs()'
);
@@ -143,7 +143,7 @@ class TranslatableTest extends FunctionalTest {
// manual creation of page without an original link
$translationDeWithoutOriginal = new Page();
- $translationDeWithoutOriginal->Lang = 'de';
+ $translationDeWithoutOriginal->Locale = 'de_DE';
$translationDeWithoutOriginal->write();
$this->assertEquals(
$translationDeWithoutOriginal->getTranslatedLangs(),
@@ -154,7 +154,7 @@ class TranslatableTest extends FunctionalTest {
function testTranslationCanHaveSameURLSegment() {
$origPage = $this->objFromFixture('Page', 'testpage_en');
- $translatedPage = $origPage->createTranslation('de');
+ $translatedPage = $origPage->createTranslation('de_DE');
$translatedPage->URLSegment = 'testpage';
$this->assertEquals($origPage->URLSegment, $translatedPage->URLSegment);
@@ -176,7 +176,7 @@ class TranslatableTest extends FunctionalTest {
);
// then in "translation mode"
- $pageTranslated = $pageOrigLang->createTranslation('fr');
+ $pageTranslated = $pageOrigLang->createTranslation('fr_FR');
$fields = $pageTranslated->getCMSFields();
$this->assertType(
'TextField',
@@ -195,7 +195,7 @@ class TranslatableTest extends FunctionalTest {
function testDataObjectGetWithReadingLanguage() {
$origTestPage = $this->objFromFixture('Page', 'testpage_en');
$otherTestPage = $this->objFromFixture('Page', 'othertestpage_en');
- $translatedPage = $origTestPage->createTranslation('de');
+ $translatedPage = $origTestPage->createTranslation('de_DE');
// test in default language
$resultPagesDefaultLang = DataObject::get(
@@ -208,7 +208,7 @@ class TranslatableTest extends FunctionalTest {
$this->assertNotContains($translatedPage->ID, $resultPagesDefaultLang->column('ID'));
// test in custom language
- Translatable::set_reading_lang('de');
+ Translatable::set_reading_locale('de_DE');
$resultPagesCustomLang = DataObject::get(
'Page',
sprintf("\"SiteTree\".\"MenuTitle\" = '%s'", 'A Testpage')
@@ -219,12 +219,12 @@ class TranslatableTest extends FunctionalTest {
// casting as a workaround for types not properly set on duplicated dataobjects from createTranslation()
$this->assertContains((string)$translatedPage->ID, $resultPagesCustomLang->column('ID'));
- Translatable::set_reading_lang('en');
+ Translatable::set_reading_locale('en_US');
}
function testDataObjectGetByIdWithReadingLanguage() {
$origPage = $this->objFromFixture('Page', 'testpage_en');
- $translatedPage = $origPage->createTranslation('de');
+ $translatedPage = $origPage->createTranslation('de_DE');
$compareOrigPage = DataObject::get_by_id('Page', $origPage->ID);
$this->assertEquals(
@@ -236,10 +236,10 @@ class TranslatableTest extends FunctionalTest {
function testDataObjectGetOneWithReadingLanguage() {
$origPage = $this->objFromFixture('Page', 'testpage_en');
- $translatedPage = $origPage->createTranslation('de');
+ $translatedPage = $origPage->createTranslation('de_DE');
// running the same query twice with different
- Translatable::set_reading_lang('de');
+ Translatable::set_reading_locale('de_DE');
$compareTranslatedPage = DataObject::get_one(
'Page',
sprintf("\"SiteTree\".\"Title\" = '%s'", $translatedPage->Title)
@@ -252,17 +252,17 @@ class TranslatableTest extends FunctionalTest {
);
// reset language to default
- Translatable::set_reading_lang('de');
+ Translatable::set_reading_locale('de_DE');
}
function testModifyTranslationWithDefaultReadingLang() {
$origPage = $this->objFromFixture('Page', 'testpage_en');
- $translatedPage = $origPage->createTranslation('de');
+ $translatedPage = $origPage->createTranslation('de_DE');
- Translatable::set_reading_lang('en');
+ Translatable::set_reading_locale('en_US');
$translatedPage->Title = 'De Modified';
$translatedPage->write();
- $savedTranslatedPage = $origPage->getTranslation('de');
+ $savedTranslatedPage = $origPage->getTranslation('de_DE');
$this->assertEquals(
$savedTranslatedPage->Title,
'De Modified',
@@ -277,9 +277,9 @@ class TranslatableTest extends FunctionalTest {
function testSiteTreePublication() {
$origPage = $this->objFromFixture('Page', 'testpage_en');
- $translatedPage = $origPage->createTranslation('de');
+ $translatedPage = $origPage->createTranslation('de_DE');
- Translatable::set_reading_lang('en');
+ Translatable::set_reading_locale('en_US');
$origPage->Title = 'En Modified';
$origPage->write();
// modifying a record in language which is not the reading language should still write the record correctly
@@ -296,14 +296,14 @@ class TranslatableTest extends FunctionalTest {
function testDeletingTranslationKeepsOriginal() {
$origPage = $this->objFromFixture('Page', 'testpage_en');
- $translatedPage = $origPage->createTranslation('de');
+ $translatedPage = $origPage->createTranslation('de_DE');
$translatedPageID = $translatedPage->ID;
$translatedPage->delete();
$translatedPage->flushCache();
$origPage->flushCache();
- $this->assertNull($origPage->getTranslation('de'));
+ $this->assertNull($origPage->getTranslation('de_DE'));
$this->assertNotNull(DataObject::get_by_id('Page', $origPage->ID));
}
@@ -314,13 +314,13 @@ class TranslatableTest extends FunctionalTest {
$child3Page = $this->objFromFixture('Page', 'child3');
$grandchildPage = $this->objFromFixture('Page', 'grandchild');
- $parentPageTranslated = $parentPage->createTranslation('de');
+ $parentPageTranslated = $parentPage->createTranslation('de_DE');
$child4PageTranslated = new SiteTree();
- $child4PageTranslated->Lang = 'de';
+ $child4PageTranslated->Locale = 'de_DE';
$child4PageTranslated->ParentID = $parentPageTranslated->ID;
$child4PageTranslated->write();
- Translatable::set_reading_lang('en');
+ Translatable::set_reading_locale('en_US');
$this->assertEquals(
$parentPage->Children()->column('ID'),
array(
@@ -331,7 +331,7 @@ class TranslatableTest extends FunctionalTest {
"Showing Children() in default language doesnt show children in other languages"
);
- Translatable::set_reading_lang('de');
+ Translatable::set_reading_locale('de_DE');
$parentPage->flushCache();
$this->assertEquals(
$parentPageTranslated->Children()->column('ID'),
@@ -340,7 +340,7 @@ class TranslatableTest extends FunctionalTest {
);
// reset language
- Translatable::set_reading_lang('en');
+ Translatable::set_reading_locale('en_US');
}
function testHierarchyLiveStageChildren() {
@@ -351,20 +351,20 @@ class TranslatableTest extends FunctionalTest {
$child3Page = $this->objFromFixture('Page', 'child3');
$grandchildPage = $this->objFromFixture('Page', 'grandchild');
- $parentPageTranslated = $parentPage->createTranslation('de');
+ $parentPageTranslated = $parentPage->createTranslation('de_DE');
$child4PageTranslated = new SiteTree();
- $child4PageTranslated->Lang = 'de';
+ $child4PageTranslated->Locale = 'de_DE';
$child4PageTranslated->ParentID = $parentPageTranslated->ID;
$child4PageTranslated->write();
$child4PageTranslated->publish('Stage', 'Live');
$child5PageTranslated = new SiteTree();
- $child5PageTranslated->Lang = 'de';
+ $child5PageTranslated->Locale = 'de_DE';
$child5PageTranslated->ParentID = $parentPageTranslated->ID;
$child5PageTranslated->write();
- Translatable::set_reading_lang('en');
+ Translatable::set_reading_lang('en_US');
$this->assertNotNull($parentPage->liveChildren());
$this->assertEquals(
$parentPage->liveChildren()->column('ID'),
@@ -384,7 +384,7 @@ class TranslatableTest extends FunctionalTest {
"Showing stageChildren() in default language doesnt show children in other languages"
);
- Translatable::set_reading_lang('de');
+ Translatable::set_reading_lang('de_DE');
$parentPage->flushCache();
$this->assertNotNull($parentPageTranslated->liveChildren());
$this->assertEquals(
@@ -403,35 +403,35 @@ class TranslatableTest extends FunctionalTest {
);
// reset language
- Translatable::set_reading_lang('en');
+ Translatable::set_reading_lang('en_US');
}
function testTranslatablePropertiesOnSiteTree() {
$origObj = $this->objFromFixture('TranslatableTest_Page', 'testpage_en');
- $translatedObj = $origObj->createTranslation('fr');
- $translatedObj->TranslatableProperty = 'Fr';
+ $translatedObj = $origObj->createTranslation('fr_FR');
+ $translatedObj->TranslatableProperty = 'fr_FR';
$translatedObj->write();
$this->assertEquals(
$origObj->TranslatableProperty,
- 'En',
+ 'en_US',
'Creating a translation doesnt affect database field on original object'
);
$this->assertEquals(
$translatedObj->TranslatableProperty,
- 'Fr',
+ 'fr_FR',
'Translated object saves database field independently of original object'
);
}
function testCreateTranslationOnSiteTree() {
$origPage = $this->objFromFixture('Page', 'testpage_en');
- $translatedPage = $origPage->createTranslation('de');
+ $translatedPage = $origPage->createTranslation('de_DE');
- $this->assertEquals($translatedPage->Lang, 'de');
+ $this->assertEquals($translatedPage->Locale, 'de_DE');
$this->assertNotEquals($translatedPage->ID, $origPage->ID);
- $subsequentTranslatedPage = $origPage->createTranslation('de');
+ $subsequentTranslatedPage = $origPage->createTranslation('de_DE');
$this->assertEquals(
$translatedPage->ID,
$subsequentTranslatedPage->ID,
@@ -441,43 +441,43 @@ class TranslatableTest extends FunctionalTest {
function testTranslatablePropertiesOnDataObject() {
$origObj = $this->objFromFixture('TranslatableTest_DataObject', 'testobject_en');
- $translatedObj = $origObj->createTranslation('fr');
- $translatedObj->TranslatableProperty = 'Fr';
- $translatedObj->TranslatableDecoratedProperty = 'Fr';
+ $translatedObj = $origObj->createTranslation('fr_FR');
+ $translatedObj->TranslatableProperty = 'fr_FR';
+ $translatedObj->TranslatableDecoratedProperty = 'fr_FR';
$translatedObj->write();
$this->assertEquals(
$origObj->TranslatableProperty,
- 'En',
+ 'en_US',
'Creating a translation doesnt affect database field on original object'
);
$this->assertEquals(
$origObj->TranslatableDecoratedProperty,
- 'En',
+ 'en_US',
'Creating a translation doesnt affect decorated database field on original object'
);
$this->assertEquals(
$translatedObj->TranslatableProperty,
- 'Fr',
+ 'fr_FR',
'Translated object saves database field independently of original object'
);
$this->assertEquals(
$translatedObj->TranslatableDecoratedProperty,
- 'Fr',
+ 'fr_FR',
'Translated object saves decorated database field independently of original object'
);
}
function testCreateTranslationWithoutOriginal() {
$origParentPage = $this->objFromFixture('Page', 'testpage_en');
- $translatedParentPage = $origParentPage->createTranslation('de');
+ $translatedParentPage = $origParentPage->createTranslation('de_DE');
$translatedPageWithoutOriginal = new SiteTree();
$translatedPageWithoutOriginal->ParentID = $translatedParentPage->ID;
- $translatedPageWithoutOriginal->Lang = 'de';
+ $translatedPageWithoutOriginal->Locale = 'de_DE';
$translatedPageWithoutOriginal->write();
- Translatable::set_reading_lang('de');
+ Translatable::set_reading_locale('de_DE');
$this->assertEquals(
$translatedParentPage->stageChildren()->column('ID'),
array(
@@ -486,7 +486,7 @@ class TranslatableTest extends FunctionalTest {
"Children() still works on a translated page even if no translation group is set"
);
- Translatable::set_reading_lang('en');
+ Translatable::set_reading_locale('en_US');
}
function testCreateTranslationTranslatesUntranslatedParents() {
@@ -495,23 +495,23 @@ class TranslatableTest extends FunctionalTest {
$child1PageOrigID = $child1Page->ID;
$grandchildPage = $this->objFromFixture('Page', 'grandchild');
- $this->assertFalse($grandchildPage->hasTranslation('de'));
- $this->assertFalse($child1Page->hasTranslation('de'));
- $this->assertFalse($parentPage->hasTranslation('de'));
+ $this->assertFalse($grandchildPage->hasTranslation('de_DE'));
+ $this->assertFalse($child1Page->hasTranslation('de_DE'));
+ $this->assertFalse($parentPage->hasTranslation('de_DE'));
- $translatedGrandChildPage = $grandchildPage->createTranslation('de');
- $this->assertTrue($grandchildPage->hasTranslation('de'));
- $this->assertTrue($child1Page->hasTranslation('de'));
- $this->assertTrue($parentPage->hasTranslation('de'));
+ $translatedGrandChildPage = $grandchildPage->createTranslation('de_DE');
+ $this->assertTrue($grandchildPage->hasTranslation('de_DE'));
+ $this->assertTrue($child1Page->hasTranslation('de_DE'));
+ $this->assertTrue($parentPage->hasTranslation('de_DE'));
}
function testHierarchyAllChildrenIncludingDeleted() {
- // Original tree in 'en':
+ // Original tree in 'en_US':
// parent
// child1 (Live only, deleted from stage)
// child2 (Stage only, never published)
// child3 (Stage only, never published, untranslated)
- // Translated tree in 'de':
+ // Translated tree in 'de_DE':
// parent
// child1 (Live only, deleted from stage)
// child2 (Stage only)
@@ -521,7 +521,7 @@ class TranslatableTest extends FunctionalTest {
$parentPageID = $parentPage->ID;
// Create parent translation
- $translatedParentPage = $parentPage->createTranslation('de');
+ $translatedParentPage = $parentPage->createTranslation('de_DE');
$translatedParentPageID = $translatedParentPage->ID;
// Create child1
@@ -530,7 +530,7 @@ class TranslatableTest extends FunctionalTest {
$child1Page->publish('Stage', 'Live');
// Create child1 translation
- $child1PageTranslated = $child1Page->createTranslation('de');
+ $child1PageTranslated = $child1Page->createTranslation('de_DE');
$child1PageTranslatedID = $child1PageTranslated->ID;
$child1PageTranslated->publish('Stage', 'Live');
$child1PageTranslated->deleteFromStage('Stage'); // deleted from stage only, record still exists on live
@@ -541,7 +541,7 @@ class TranslatableTest extends FunctionalTest {
$child2PageID = $child2Page->ID;
// Create child2 translation
- $child2PageTranslated = $child2Page->createTranslation('de');
+ $child2PageTranslated = $child2Page->createTranslation('de_DE');
$child2PageTranslatedID = $child2PageTranslated->ID;
// Create child3
@@ -549,7 +549,7 @@ class TranslatableTest extends FunctionalTest {
$child3PageID = $child3Page->ID;
// on original parent in default language
- Translatable::set_reading_lang('en');
+ Translatable::set_reading_locale('en_US');
SiteTree::flush_and_destroy_cache();
$parentPage = $this->objFromFixture('Page', 'parent');
$children = $parentPage->AllChildrenIncludingDeleted();
@@ -564,7 +564,7 @@ class TranslatableTest extends FunctionalTest {
);
// on original parent in translation mode
- Translatable::set_reading_lang('de');
+ Translatable::set_reading_locale('de_DE');
SiteTree::flush_and_destroy_cache();
$parentPage = $this->objFromFixture('Page', 'parent');
$this->assertEquals(
@@ -576,11 +576,11 @@ class TranslatableTest extends FunctionalTest {
"Showing AllChildrenIncludingDeleted() in translation mode with parent page in default language shows children in default language"
);
- // @todo getTranslation() doesn't switch languages for future calls, its handled statically through set_reading_lang()
+ // @todo getTranslation() doesn't switch languages for future calls, its handled statically through set_reading_locale()
// // on translated page in translation mode using getTranslation()
// SiteTree::flush_and_destroy_cache();
// $parentPage = $this->objFromFixture('Page', 'parent');
- // $translatedParentPage = $parentPage->getTranslation('de');
+ // $translatedParentPage = $parentPage->getTranslation('de_DE');
// $this->assertEquals(
// $translatedParentPage->AllChildrenIncludingDeleted()->column('ID'),
// array(
@@ -591,7 +591,7 @@ class TranslatableTest extends FunctionalTest {
// );
// reset language
- Translatable::set_reading_lang('en');
+ Translatable::set_reading_locale('en_US');
}
function testRootUrlDefaultsToTranslatedUrlSegment() {
@@ -599,14 +599,14 @@ class TranslatableTest extends FunctionalTest {
$origPage = $this->objFromFixture('Page', 'homepage_en');
$origPage->publish('Stage', 'Live');
- $translationDe = $origPage->createTranslation('de');
+ $translationDe = $origPage->createTranslation('de_DE');
$translationDe->URLSegment = 'heim';
$translationDe->write();
$translationDe->publish('Stage', 'Live');
// test with translatable enabled
- $_SERVER['HTTP_HOST'] = '/?lang=de';
- Translatable::set_reading_lang('de');
+ $_SERVER['HTTP_HOST'] = '/?locale=de';
+ Translatable::set_reading_locale('de_DE');
$this->assertEquals(
RootURLController::get_homepage_urlsegment(),
'heim',
@@ -624,7 +624,7 @@ class TranslatableTest extends FunctionalTest {
Translatable::enable();
// setting back to default
- Translatable::set_reading_lang('en');
+ Translatable::set_reading_locale('en_US');
$_SERVER['HTTP_HOST'] = $_originalHost;
}
}
diff --git a/tests/model/TranslatableTest.yml b/tests/model/TranslatableTest.yml
index ab5d72b5b..65dd01a01 100644
--- a/tests/model/TranslatableTest.yml
+++ b/tests/model/TranslatableTest.yml
@@ -2,17 +2,17 @@ Page:
homepage_en:
Title: Home
URLSegment: home
- Lang: en
+ Locale: en_US
testpage_en:
Title: Home
MenuTitle: A Testpage
URLSegment: testpage
- Lang: en
+ Locale: en_US
othertestpage_en:
Title: Other Testpage
MenuTitle: A Testpage
URLSegment: othertestpage
- Lang: en
+ Locale: en_US
parent:
Title: Parent
URLSegment: parent
@@ -34,10 +34,10 @@ Page:
Parent: =>Page.child1
TranslatableTest_DataObject:
testobject_en:
- TranslatableProperty: En
- TranslatableDecoratedProperty: En
+ TranslatableProperty: en_US
+ TranslatableDecoratedProperty: en_US
TranslatableTest_Page:
testpage_en:
Title: En
- TranslatableProperty: En
+ TranslatableProperty: en_US
URLSegment: testpage-en
\ No newline at end of file
diff --git a/tests/search/TranslatableSearchFormTest.php b/tests/search/TranslatableSearchFormTest.php
index 4132f6b45..0a7486c09 100644
--- a/tests/search/TranslatableSearchFormTest.php
+++ b/tests/search/TranslatableSearchFormTest.php
@@ -12,10 +12,10 @@ class TranslatableSearchFormTest extends FunctionalTest {
protected $recreateTempDb = true;
function setUp() {
- $this->origTranslatableSettings['enabled'] = Translatable::is_enabled();
- $this->origTranslatableSettings['default_lang'] = Translatable::default_lang();
+ $this->origTranslatableSettings['enabled'] = Translatable::is_enabled();default_locale
+ $this->origTranslatableSettings['default_locale'] = Translatable::default_locale();
Translatable::enable();
- Translatable::set_default_lang("en");
+ Translatable::set_default_locale("en");
// needs to recreate the database schema with language properties
self::kill_temp_db();
@@ -34,7 +34,7 @@ class TranslatableSearchFormTest extends FunctionalTest {
function tearDown() {
if(!$this->origTranslatableSettings['enabled']) Translatable::disable();
- Translatable::set_default_lang($this->origTranslatableSettings['default_lang']);
+ Translatable::set_default_locale($this->origTranslatableSettings['default_locale']);
self::kill_temp_db();
self::create_temp_db();
@@ -53,7 +53,7 @@ class TranslatableSearchFormTest extends FunctionalTest {
$translatedPublishedPage->write();
$translatedPublishedPage->publish('Stage', 'Live');
- // Translatable::set_reading_lang() can't be used because the context
+ // Translatable::set_reading_locale() can't be used because the context
// from the holder is not present here - we set the language explicitly
// through a pseudo GET variable in getResults()