Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

209 lines (176 sloc) 8.409 kb
<?php
/**
* Internationalization and translation functions. Because Hybrid Core is a framework made up of various
* extensions with different textdomains, it must filter 'gettext' so that a single translation file can
* handle all translations.
*
* @package HybridCore
* @subpackage Functions
* @author Justin Tadlock <justin@justintadlock.com>
* @copyright Copyright (c) 2008 - 2012, Justin Tadlock
* @link http://themehybrid.com/hybrid-core
* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*/
/**
* Checks if a textdomain's translation files have been loaded. This function behaves differently from
* WordPress core's is_textdomain_loaded(), which will return true after any translation function is run over
* a text string with the given domain. The purpose of this function is to simply check if the translation files
* are loaded.
*
* @since 1.3.0
* @access private This is only used internally by the framework for checking translations.
* @param string $domain The textdomain to check translations for.
*/
function hybrid_is_textdomain_loaded( $domain ) {
global $hybrid;
return ( isset( $hybrid->textdomain_loaded[$domain] ) && true === $hybrid->textdomain_loaded[$domain] ) ? true : false;
}
/**
* Loads the framework's translation files. The function first checks if the parent theme or child theme
* has the translation files housed in their '/languages' folder. If not, it sets the translation file the the
* framework '/languages' folder.
*
* @since 1.3.0
* @access private
* @uses load_textdomain() Loads an MO file into the domain for the framework.
* @param string $domain The name of the framework's textdomain.
* @return true|false Whether the MO file was loaded.
*/
function hybrid_load_framework_textdomain( $domain ) {
/* Get the WordPress installation's locale set by the user. */
$locale = get_locale();
/* Check if the mofile is located in parent/child theme /languages folder. */
$mofile = locate_template( array( "languages/{$domain}-{$locale}.mo" ) );
/* If no mofile was found in the parent/child theme, set it to the framework's mofile. */
if ( empty( $mofile ) )
$mofile = trailingslashit( HYBRID_LANGUAGES ) . "{$domain}-{$locale}.mo";
return load_textdomain( $domain, $mofile );
}
/**
* @since 0.7.0
* @deprecated 1.3.0
*/
function hybrid_get_textdomain() {
_deprecated_function( __FUNCTION__, '1.3.0', 'hybrid_get_parent_textdomain' );
return hybrid_get_parent_textdomain();
}
/**
* Gets the parent theme textdomain. This allows the framework to recognize the proper textdomain of the
* parent theme.
*
* Important! Do not use this for translation functions in your theme. Hardcode your textdomain string. Your
* theme's textdomain should match your theme's folder name.
*
* @since 1.3.0
* @access private
* @uses get_template() Defines the theme textdomain based on the template directory.
* @global object $hybrid The global Hybrid object.
* @return string $hybrid->textdomain The textdomain of the theme.
*/
function hybrid_get_parent_textdomain() {
global $hybrid;
/* If the global textdomain isn't set, define it. Plugin/theme authors may also define a custom textdomain. */
if ( empty( $hybrid->parent_textdomain ) )
$hybrid->parent_textdomain = sanitize_key( apply_filters( hybrid_get_prefix() . '_parent_textdomain', get_template() ) );
/* Return the expected textdomain of the parent theme. */
return $hybrid->parent_textdomain;
}
/**
* Gets the child theme textdomain. This allows the framework to recognize the proper textdomain of the
* child theme.
*
* Important! Do not use this for translation functions in your theme. Hardcode your textdomain string. Your
* theme's textdomain should match your theme's folder name.
*
* @since 1.2.0
* @access private
* @uses get_stylesheet() Defines the child theme textdomain based on the stylesheet directory.
* @global object $hybrid The global Hybrid object.
* @return string $hybrid->child_theme_textdomain The textdomain of the child theme.
*/
function hybrid_get_child_textdomain() {
global $hybrid;
/* If a child theme isn't active, return an empty string. */
if ( !is_child_theme() )
return '';
/* If the global textdomain isn't set, define it. Plugin/theme authors may also define a custom textdomain. */
if ( empty( $hybrid->child_textdomain ) )
$hybrid->child_textdomain = sanitize_key( apply_filters( hybrid_get_prefix() . '_child_textdomain', get_stylesheet() ) );
/* Return the expected textdomain of the child theme. */
return $hybrid->child_textdomain;
}
/**
* Filters the 'load_textdomain_mofile' filter hook so that we can change the directory and file name
* of the mofile for translations. This allows child themes to have a folder called /languages with translations
* of their parent theme so that the translations aren't lost on a parent theme upgrade.
*
* @since 1.3.0
* @access private
* @param string $mofile File name of the .mo file.
* @param string $domain The textdomain currently being filtered.
* @return $mofile
*/
function hybrid_load_textdomain_mofile( $mofile, $domain ) {
/* If the $domain is for the parent or child theme, search for a $domain-$locale.mo file. */
if ( $domain == hybrid_get_parent_textdomain() || $domain == hybrid_get_child_textdomain() ) {
/* Check for a $domain-$locale.mo file in the parent and child theme root and /languages folder. */
$locale = get_locale();
$locate_mofile = locate_template( array( "languages/{$domain}-{$locale}.mo", "{$domain}-{$locale}.mo" ) );
/* If a mofile was found based on the given format, set $mofile to that file name. */
if ( !empty( $locate_mofile ) )
$mofile = $locate_mofile;
}
/* Return the $mofile string. */
return $mofile;
}
/**
* Filters 'gettext' to change the translations used for the 'hybrid-core' textdomain. This filter makes it possible
* for the theme's MO file to translate the framework's text strings.
*
* @since 1.3.0
* @access private
* @param string $translated The translated text.
* @param string $text The original, untranslated text.
* @param string $domain The textdomain for the text.
* @return string $translated
*/
function hybrid_gettext( $translated, $text, $domain ) {
/* Check if 'hybrid-core' is the current textdomain, there's no mofile for it, and the theme has a mofile. */
if ( 'hybrid-core' == $domain && !hybrid_is_textdomain_loaded( 'hybrid-core' ) && hybrid_is_textdomain_loaded( hybrid_get_parent_textdomain() ) ) {
/* Get the translations for the theme. */
$translations = &get_translations_for_domain( hybrid_get_parent_textdomain() );
/* Translate the text using the theme's translation. */
$translated = $translations->translate( $text );
}
return $translated;
}
/**
* Filters 'gettext' to change the translations used for the each of the extensions' textdomains. This filter
* makes it possible for the theme's MO file to translate the framework's extensions.
*
* @since 1.3.0
* @access private
* @param string $translated The translated text.
* @param string $text The original, untranslated text.
* @param string $domain The textdomain for the text.
* @return string $translated
*/
function hybrid_extensions_gettext( $translated, $text, $domain ) {
/* Check if the current textdomain matches one of the framework extensions. */
if ( in_array( $domain, array( 'breadcrumb-trail', 'custom-field-series', 'post-stylesheets', 'theme-layouts' ) ) ) {
/* If the theme supports the extension, switch the translations. */
if ( current_theme_supports( $domain ) ) {
/* If the framework mofile is loaded, use its translations. */
if ( hybrid_is_textdomain_loaded( 'hybrid-core' ) )
$translations = &get_translations_for_domain( 'hybrid-core' );
/* If the theme mofile is loaded, use its translations. */
elseif ( hybrid_is_textdomain_loaded( hybrid_get_parent_textdomain() ) )
$translations = &get_translations_for_domain( hybrid_get_parent_textdomain() );
/* If translations were found, translate the text. */
if ( !empty( $translations ) )
$translated = $translations->translate( $text );
}
}
return $translated;
}
?>
Jump to Line
Something went wrong with that request. Please try again.