Per Nergård (MVP)
OMVPSaaS CMS Developer CertificationCommerce Connect 13 Developer Certification +2
Mar 5, 2013
visibility 13481
star star star star star
(1 votes)

EPiServer localization xml files structure

In CMS7 there are a couple of new things that can be localized. I hadn’t had the time to check it out but a question in the forums   about localization of “GroupName” on page types got me curious.

Localization of page types and properties are the same as for earlier versions of EPiServer.

Blocks are new to CMS7. Thomas Krantz blogged about block localization over here but I will include it in the example below just for completeness. The example for blocks in the Alloy demo package ContentTypeNames.xml is incorrect at least in the first production release.

Groups then. The DisplayAttribute.GroupName is localized via heading elements. These headings localizes the tab names in edit mode.

I couldn’t find anything about ContentTypeAttribute.GroupName so I fired up good old reflector. It turned out that you can localize GroupName via specifying groups in the xml file.

I expected this to localize the labels for the different groups of page types  you get when creating a new page. This is not the case. What’s actually localized is the bracketed prefix on the page type when you view them in admin mode. I can’t see much use for this so I’ve checked with the support and they have an existing bug regarding that page type information localization doesn’t work so hopefully this will be fixed soon.

Below is an example lang file for reference.

<?xml version="1.0" encoding="utf-8" ?>
<languages>
 
  <language name="English" id="en">
 
    <!-- Blocks -->
    <blocktypes>
      <blocktype name="PageListBlock">
        <name>Page List</name>
        <description>Blockbeskrivning</description>
      </blocktype>
    </blocktypes>
 
    <!-- Tab headings aka GroupName in Displayattribute for a property-->
    <headings>
      <heading name="Default">
        <description>Default</description>
      </heading>
    </headings>
    
    <pagetypes>
      <!-- PropertyNames -->
      <common>
        <property name="DisableIndexing">
          <caption>Disable indexing</caption>
          <help>Help</help>
        </property>
      </common> 
      
      <!-- Page types -->
      <pagetype name="ArticlePage">
        <name>Article</name>
        <description>Help</description>
      </pagetype>
      
      <!-- Groupname in ContentTypeAttribute-->
      <groups>
        <group name="Test">Prefix</group>
      </groups>
    </pagetypes>
  </language>
 
</languages>
Mar 05, 2013

Comments

Per Nergård (MVP)
Per Nergård (MVP) Apr 23, 2013 01:37 PM

Update: (It seems I can't edit old posts with live writer from another computer so a comment have to be sufficient).

if you wan't to localize propertynames on a per type basis the format is like this. The pagetype element name attribute can be both the name of a pagetype as well as a blocktype.




Caption
HelpText


janaka.podiralahamy
janaka.podiralahamy Nov 18, 2013 05:02 PM

i am able to see my changes on page types but not with blocks. can you help? thanks!

error Please login to comment.
Latest blogs
Surviving a Dirty Feed. Part 3: Error Handling and Event Batching

Committing a 250,000-row Optimizely catalog import row by row, returning a per-row failure report, and coalescing catalog events into one per batch.

Stanisław Szołkowski | Oct 16, 2026 |

Building UI Extensions for Optimizely SaaS CMS

Introduction Developers have been extending the functionality of Optimizely PaaS CMS for years using addons built in C# and deployed as NuGet...

Mark Stott | Oct 15, 2026

Cheapskate AI Translator: Because Translation Should Not Require a Second Mortgage

There is a particular kind of software project that begins with a detailed architecture document, a product roadmap, and a carefully assembled...

Linh Doan Cuu | Oct 15, 2026

Computed Fields in CMS 13 Content Contracts with Optimizely Graph

Content Contracts in Optimizely CMS 13 allow different content types to share a common structure when querying Optimizely Graph. But what if the...

Mardy | Oct 14, 2026