开发者

Expression Engine i18n

Does Expression Engine have a built-in solution for i18n (internationalization)?

I have to bui开发者_如何学Gold a multi-language site, and would like to know the best approaches in EE for doing so.


There are many ways you can create a multilingual or country-specific site in ExpressionEngine to deliver content specific to each language/country.

The two most popular solutions are summarized from the following ExpressionEngine Wiki articles:

MultiLingual Websites in ExpressionEngine

The basic idea is to present your content in different languages using a combination of URL Segments, custom fields and a bit of PHP.

Advantages

  • Single entry manages multiple languages
  • Simple URL structure

As an example, say you have a 3-language site: English (en), Spanish (es) and German (de).

For every piece of content in your site, you'd create a custom field with the language identifier as a postfix (or prefix, whatever you prefer) to the fields.

Your custom field names might look like this:

custom_field_en
custom_field_es
custom_field_de

To switch between languages, simply add a corresponding URL segment (/en, /es or /de) that matches the language:

example.com/template_group/template/en
example.com/template_group/template/es
example.com/template_group/template/de

The main advantage of this approach is that it keeps all versions of your content inside a single entry, making updates and edits easy and consistent.


MultiLingual Websites in ExpressionEngine, Alternative

The alternative approach idea is to create sub-directories for each country, and use ExpressionEngine's path.php Global Variables to hold the country code and/or language as a variable.

Advantages

  • No PHP needed
  • No need to keep track of which segment holds the language variable
  • Elegant URL structure

Using the same 3-languages as an example from the first method, you would create a new directory in the root of your EE install and name it after the country code of the language you want to add:

Your folder structure might look like this:

+ /de
+ /en
+ /es
index.php
+ /images
+ /system
+ /themes

To allow this method work, place a copy of the main index.php inside each of the language directories. You would then modify each file by assigning variables corresponding to each language's directory:

$assign_to_config['site_index'] = 'http://www.example.com/en/';
$assign_to_config['global_vars'] = array(
    "country_code" => "en",
    "language" => "english"
);

The URLs built will use whatever language/country designation you choose:

example.com/es-MX/template_group/template/
example.com/MX/template_group/template/

The main advantage of the alternative approach is using Global Variables, leveraging the fact they are are parsed very early, and can be used almost anywhere in templates.

See: ExpressionEngine's Parse Order (PDF, 33 KB)


Other Solutions

Embracing the philosophy of ExpressionEngine, the flexibility you're given as a designer/developer allows you to tailor a custom solution that suits your unique needs.

If either of these approaches don't quite meet your needs, you can eaily craft your own method or take a hybrid approach.

With this in mind, a good starting point would be to look into the Multilingual Add-Ons at Devot-ee that may aide in your development.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜