/**
  * Get a set of content languages (for quick language navigation)
  * @example
  * <code>
  * <!-- in your template -->
  * <ul class="langNav">
  * 		<% loop Languages %>
  * 		<li><a href="$Link" class="$LinkingMode" title="$Title.ATT">$Language</a></li>
  * 		<% end_loop %>
  * </ul>
  * </code>
  *
  * @return ArrayList|null
  */
 public function Languages()
 {
     $locales = TranslatableUtility::get_content_languages();
     // there's no need to show a navigation when there's less than 2 languages. So return null
     if (count($locales) < 2) {
         return null;
     }
     $currentLocale = Translatable::get_current_locale();
     $homeTranslated = null;
     if ($home = SiteTree::get_by_link('home')) {
         /** @var SiteTree $homeTranslated */
         $homeTranslated = $home->getTranslation($currentLocale);
     }
     /** @var ArrayList $langSet */
     $langSet = ArrayList::create();
     foreach ($locales as $locale => $name) {
         Translatable::set_current_locale($locale);
         /** @var SiteTree $translation */
         $translation = $this->owner->hasTranslation($locale) ? $this->owner->getTranslation($locale) : null;
         $langSet->push(new ArrayData(array('Locale' => $locale, 'RFC1766' => i18n::convert_rfc1766($locale), 'Language' => DBField::create_field('Varchar', strtoupper(i18n::get_lang_from_locale($locale))), 'Title' => DBField::create_field('Varchar', html_entity_decode(i18n::get_language_name(i18n::get_lang_from_locale($locale), true), ENT_NOQUOTES, 'UTF-8')), 'LinkingMode' => $currentLocale == $locale ? 'current' : 'link', 'Link' => $translation ? $translation->AbsoluteLink() : ($homeTranslated ? $homeTranslated->Link() : ''))));
     }
     Translatable::set_current_locale($currentLocale);
     i18n::set_locale($currentLocale);
     return $langSet;
 }
 /**
  * Retrieves information about this object in the CURRENT locale
  *
  * @param string $locale The locale information to request, or null to use the default locale
  * @return ArrayData Mapped list of locale properties
  */
 public function CurrentLocaleInformation()
 {
     $locale = Fluent::current_locale();
     // Store basic locale information
     $data = array('Locale' => $locale, 'LocaleRFC1766' => i18n::convert_rfc1766($locale), 'Alias' => Fluent::alias($locale), 'Title' => i18n::get_locale_name($locale), 'LanguageNative' => i18n::get_language_name(i18n::get_lang_from_locale($locale), true));
     return new ArrayData($data);
 }
Esempio n. 3
0
 public function RFC1766()
 {
     return i18n::convert_rfc1766($this->value);
 }
 /**
  * Retrieves information about this object in the specified locale
  *
  * @param string $locale The locale information to request, or null to use the default locale
  * @return ArrayData Mapped list of locale properties
  */
 public function LocaleInformation($locale = null)
 {
     // Check locale
     if (empty($locale)) {
         $locale = Fluent::default_locale();
     }
     // Check linking mode
     $linkingMode = 'link';
     if ($this->owner->hasMethod('canViewInLocale') && !$this->owner->canViewInLocale($locale)) {
         $linkingMode = 'invalid';
     } elseif ($locale === Fluent::current_locale()) {
         $linkingMode = 'current';
     }
     // Check link
     $link = $this->owner->LocaleLink($locale);
     // Store basic locale information
     $data = array('Locale' => $locale, 'LocaleRFC1766' => i18n::convert_rfc1766($locale), 'Alias' => Fluent::alias($locale), 'Title' => i18n::get_locale_name($locale), 'LanguageNative' => i18n::get_language_name(i18n::get_lang_from_locale($locale), true), 'Link' => $link, 'AbsoluteLink' => $link ? Director::absoluteURL($link) : null, 'LinkingMode' => $linkingMode);
     return new ArrayData($data);
 }
 /**
  * Returns an RFC1766 compliant locale string, e.g. 'fr-CA'.
  * Inspects the associated {@link dataRecord} for a {@link SiteTree->Locale} value if present,
  * and falls back to {@link Translatable::get_current_locale()} or {@link i18n::default_locale()},
  * depending if Translatable is enabled.
  * 
  * Suitable for insertion into lang= and xml:lang=
  * attributes in HTML or XHTML output.
  * 
  * @return string
  */
 function ContentLocale()
 {
     if ($this->dataRecord && $this->dataRecord->hasExtension('Translatable')) {
         $locale = $this->dataRecord->Locale;
     } elseif (Object::has_extension('SiteTree', 'Translatable')) {
         $locale = Translatable::get_current_locale();
     } else {
         $locale = i18n::get_locale();
     }
     return i18n::convert_rfc1766($locale);
 }
Esempio n. 6
0
 /**
  * Returns <link rel="alternate"> markup for insertion into
  * a HTML4/XHTML compliant <head> section, listing all available translations
  * of a page.
  * 
  * @see http://www.w3.org/TR/html4/struct/links.html#edef-LINK
  * @see http://www.w3.org/International/articles/language-tags/
  * 
  * @return string HTML
  */
 function MetaTags(&$tags)
 {
     $template = '<link rel="alternate" type="text/html" title="%s" hreflang="%s" href="%s" />' . "\n";
     $translations = $this->owner->getTranslations();
     if ($translations) {
         foreach ($translations as $translation) {
             $tags .= sprintf($template, $translation->Title, i18n::convert_rfc1766($translation->Locale), $translation->Link());
         }
     }
 }
 /**
  * Returns <link rel="alternate"> markup for insertion into
  * a HTML4/XHTML compliant <head> section, listing all available translations
  * of a page.
  * 
  * @see http://www.w3.org/TR/html4/struct/links.html#edef-LINK
  * @see http://www.w3.org/International/articles/language-tags/
  * 
  * @return string HTML
  */
 public function MetaTags(&$tags)
 {
     $template = '<link rel="alternate" type="text/html" title="%s" hreflang="%s" href="%s" />' . "\n";
     $translations = $this->owner->getTranslations();
     if ($translations) {
         $translations = $translations->toArray();
         $translations[] = $this->owner;
         foreach ($translations as $translation) {
             $tags .= sprintf($template, Convert::raw2xml($translation->Title), i18n::convert_rfc1766($translation->Locale), $translation->AbsoluteLink());
         }
     }
 }
 /**
  * Gets the RFC 1766 version of the input locale
  * @return {string} RFC 1766 version of the locale (i.e en-US)
  */
 public function getRFC1766Locale()
 {
     return i18n::convert_rfc1766($this->owner->Locale);
 }
Esempio n. 9
0
 /**
  * Return the title, description, keywords and language metatags.
  * 
  * @todo Move <title> tag in separate getter for easier customization and more obvious usage
  * 
  * @param boolean|string $includeTitle Show default <title>-tag, set to false for custom templating
  * @param boolean $includeTitle Show default <title>-tag, set to false for
  *                              custom templating
  * @return string The XHTML metatags
  */
 public function MetaTags($includeTitle = true)
 {
     $tags = "";
     if ($includeTitle === true || $includeTitle == 'true') {
         $tags .= "<title>" . Convert::raw2xml($this->MetaTitle ? $this->MetaTitle : $this->Title) . "</title>\n";
     }
     $version = new SapphireInfo();
     $tags .= "<meta name=\"generator\" http-equiv=\"generator\" content=\"SilverStripe - http://www.silverstripe.com\" />\n";
     $charset = ContentNegotiator::get_encoding();
     $tags .= "<meta http-equiv=\"Content-type\" content=\"text/html; charset={$charset}\" />\n";
     if ($this->MetaKeywords) {
         $tags .= "<meta name=\"keywords\" http-equiv=\"keywords\" content=\"" . Convert::raw2att($this->MetaKeywords) . "\" />\n";
     }
     if ($this->MetaDescription) {
         $tags .= "<meta name=\"description\" http-equiv=\"description\" content=\"" . Convert::raw2att($this->MetaDescription) . "\" />\n";
     }
     if ($this->ExtraMeta) {
         $tags .= $this->ExtraMeta . "\n";
     }
     // get the "long" lang name suitable for the HTTP content-language flag (with hyphens instead of underscores)
     $currentLang = $this->hasExtension('Translatable') ? Translatable::get_current_locale() : i18n::get_locale();
     $tags .= "<meta http-equiv=\"Content-Language\" content=\"" . i18n::convert_rfc1766($currentLang) . "\"/>\n";
     // DEPRECATED 2.3: Use MetaTags
     $this->extend('updateMetaTags', $tags);
     $this->extend('MetaTags', $tags);
     return $tags;
 }
Esempio n. 10
0
 /**
  * Returns all translated locales as a special ArrayList
  *
  * @return ArrayList 
  */
 public function getAllTranslations()
 {
     $currentLocale = Translatable::get_current_locale();
     $translations = $this->getTranslations();
     $translationSource = new ArrayList();
     if ($translations) {
         $translationSource->push(new DataObject(array('Name' => SilvercartLanguageHelper::getLanguageName($currentLocale, $currentLocale), 'NativeName' => SilvercartLanguageHelper::getLanguageName($currentLocale, $currentLocale), 'Code' => $this->getIso2($currentLocale), 'RFC1766' => i18n::convert_rfc1766($currentLocale), 'Link' => $this->Link())));
         foreach ($translations as $translation) {
             $translationSource->push(new DataObject(array('Name' => SilvercartLanguageHelper::getLanguageName($translation->Locale, $currentLocale), 'NativeName' => SilvercartLanguageHelper::getLanguageName($translation->Locale, $translation->Locale), 'Code' => $this->getIso2($translation->Locale), 'RFC1766' => i18n::convert_rfc1766($translation->Locale), 'Link' => $translation->Link())));
         }
     }
     return $translationSource;
 }