I am trying to use the node type name in page.tpl.php for certain content types. Actually, we have modified the article type and renamed it as News. It's name is News in all languages but in Spanish, where it is Noticias.

The translations are defined under Structure>Content Type>Article.

I tried to use this code :

if(!empty($node) && $node->type == 'article'):
  print node_type_get_name($node);

but the node type is always printed as News, even on Spanish pages.

I tried wrapping this in a t() , but no change. Am I doing something wrong here ? Thanks for your help !

  • possible duplicate of How to Translate Content type name using i18n module?
    – Jimajamma
    Commented Feb 10, 2014 at 13:23
  • I have all internationalization modules installed and activated, so I think this question is not the same as mine. Screenshot1 Screenshot2
    – thewild
    Commented Feb 10, 2014 at 14:33
  • Actually, I might have the problem described in this question, but the given answer only allows one to start over its drupal installation. Our site is a production site, so that is not an option.
    – thewild
    Commented Feb 11, 2014 at 13:41

1 Answer 1


I have edited html.tpl.php

I have added this code before starting the body tag in order to replace body css classes with translated

    $body_classes_array = explode(' ',$classes);
    foreach($body_classes_array as $key=>$class)
        $body_classes_array[$key] = t($class);
    $classes = implode(' ',$body_classes_array);

after this modification, you can search css class name in translate page and put a suitable translation for it.

so final html.tpl.php is


 * @file
 * Default theme implementation to display the basic html structure of a single
 * Drupal page.
 * Variables:
 * - $css: An array of CSS files for the current page.
 * - $language: (object) The language the site is being displayed in.
 *   $language->language contains its textual representation.
 *   $language->dir contains the language direction. It will either be 'ltr' or 'rtl'.
 * - $rdf_namespaces: All the RDF namespace prefixes used in the HTML document.
 * - $grddl_profile: A GRDDL profile allowing agents to extract the RDF data.
 * - $head_title: A modified version of the page title, for use in the TITLE
 *   tag.
 * - $head_title_array: (array) An associative array containing the string parts
 *   that were used to generate the $head_title variable, already prepared to be
 *   output as TITLE tag. The key/value pairs may contain one or more of the
 *   following, depending on conditions:
 *   - title: The title of the current page, if any.
 *   - name: The name of the site.
 *   - slogan: The slogan of the site, if any, and if there is no title.
 * - $head: Markup for the HEAD section (including meta tags, keyword tags, and
 *   so on).
 * - $styles: Style tags necessary to import all CSS files for the page.
 * - $scripts: Script tags necessary to load the JavaScript files and settings
 *   for the page.
 * - $page_top: Initial markup from any modules that have altered the
 *   page. This variable should always be output first, before all other dynamic
 *   content.
 * - $page: The rendered page content.
 * - $page_bottom: Final closing markup from any modules that have altered the
 *   page. This variable should always be output last, after all other dynamic
 *   content.
 * - $classes String of classes that can be used to style contextually through
 *   CSS.
 * @see template_preprocess()
 * @see template_preprocess_html()
 * @see template_process()
 * @ingroup themeable
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php print $language->language; ?>" version="XHTML+RDFa 1.0" dir="<?php print $language->dir; ?>"<?php print $rdf_namespaces; ?>>

<head profile="<?php print $grddl_profile; ?>">
  <?php print $head; ?>
  <title><?php print $head_title; ?></title>
  <?php print $styles; ?>
  <?php print $scripts; ?>
    $body_classes_array = explode(' ',$classes);
    foreach($body_classes_array as $key=>$class)
        $body_classes_array[$key] = t($class);
    $classes = implode(' ',$body_classes_array);
<body class="<?php print $classes; ?>" <?php print $attributes;?>>
  <div id="skip-link">
    <a href="#main-content" class="element-invisible element-focusable"><?php print t('Skip to main content'); ?></a>
  <?php print $page_top; ?>
  <?php print $page; ?>
  <?php print $page_bottom; ?>

I hope my post can help you.

  • I don't see how translating class name can be relevant in my case ? My problem is that node_get_type_name is not translated, even when wrapped in a t() function.
    – thewild
    Commented Feb 10, 2014 at 14:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.