Localized Content Management — A user oriented approach
The editorial department at my company is creating a lot of content to enrich our products with descriptions and additional information. These contents are written in different languages and distributed to all country shops. While refactoring our product information management (PIM) system, the IT department introduced a complete new way of content management to simplify that process. We created a user-oriented experience and interface design.
The base of the system is the language management. It allows to define languages as a tree structure. Each language can inherit from another language. We decided to have one common “global” language where optional english contents are saved. Whether there should be one common global language or just a parallel setup depends on the use case and whether you want to show a “fallback” if no specific translation for a content was found.
Whenever a content is requested from the PIM, the request will contain the desired language and the PIM will deliver the content either in the requested language or the next available inherited language. Since “german” is the common language in different countries, the “swiss” and “austrian” contents inherit from the “german” language. That way, you will always get the german content whenever you request a content from austria, but you can always define a specific austrian content.
The different languages are shown as tabs above the content fields in the PIM. You can quickly change between the languages. The contents are shown within the tab content. You will always see whether a content is language specific or inherited from another country by showing a language flag beside the content. An inherited content is always shown greyed out in the content fields. By clicking on the language flag, the inherited content is copied into the content field and can be edited. This makes it much easier to make small changes for a specific language. When saving a content change, all tabs will be refreshed to show changed inherited contents.
The content itself is written in markdown syntax so that it can be used in different media like the product pages in the shop or the newsletters. Most template systems like Twig have filters that can convert markdown into HTML.
Whenever a content is loaded or saved, different filters are applied to change the content.
The “Inherit Filter”, which loads either the specific language version of a content or one of its inherited versions, is always applied whenever a content is loaded either to show a content field it in the PIM or when the content is requested via the API.
The “Standard Filter” will do common replacements for all languages and will for example strip white spaces from the beginning or end of a content or will remove unnecessary or not allowed characters from the content. It is always applied before a content is saved.
The “Language Filter” can be defined on language level and is always applied after all other filters whenever a content is loaded or saved. It is used for example to replace quotes with a language specific format or to replace characters. This way we were able to use “german” as an inherited language for “swiss” by just replacing the german specific character “ß” with “ss”. With that very simple language specific filter, no extra contents have to be written for Switzerland.
During the refactoring process the IT department worked close together with the editorial department to improve the content creation workflow. Common problems like “the german content has always to be copied to the swiss and austrian content” and “we always have to manually replace certain characters” were solved with the flexible filter system. The user interface was enhanced with intuitive functions which are easy to understand and aligns with the workflow of the content editors. The amount of work for the editorial department was reduced significantly.