2013-02-28 2 views
0

У меня есть сайт, который читает часть своего контента из базы данных, мне нужен этот сайт на обоих языках, на английском и арабском.Динамическая локализация сайта, основанная на данных

нужный контент дублируется в базе данных на обоих языках. скажем, у меня есть столбцы En_Name и Ar_Name в моей базе данных.

и, например, для арабской версии веб-сайта ссылка будет отображать текст из Ar_Name, а на английском языке он должен отображать текст из En_Name.

для статического содержимого на моем веб-сайте Я думаю, что рекомендуется использовать стандартную локализацию ASP.NET с использованием (.resx-файлов). но я не знаю, как сделать локализацию для динамического раздела веб-сайта.

Итак, как я могу сделать одну и ту же гиперссылку, читаемую один раз из поля Ar_Name, а затем из En_Name на основе выбора пользователей (локализация)?

ответ

0

Существует много способов добиться этого. Вы не упомянули, какую технологию баз данных вы используете, поэтому мой пример - с Entity Framework. Возможно, вам придется настроить это на свою собственную ситуацию.

Нечто подобное может быть возможно с LinqToSql или другими ORM. Если вы используете что-то еще целиком, тогда ключ должен иметь центральный класс, который вы передаете что-то согласованное (следовательно, интерфейс), которое выполняет перевод.

Например, если бы я использовал Entity Framework, каждая таблица в базе данных, в которой были эти два поля, я бы добавил интерфейс, который предоставляет эти поля. Тогда у меня был бы вспомогательный класс с методом, который взял любой объект с этим интерфейсом и проверил текущую локализацию и вернул бы правильную версию текста.

public interface IBilingualEntity 
{ 
    // Defines a consistent interface that indicates which language version 
    // each thing is in. 
    string Ar_Name { get; } 
    string En_Name { get; } 
} 

public partial MyEntity : IBilingualEntity 
{ 
    // This is a class generate by Entity Framework. But it could 
    // be anything really if you are using some other framework. 
    // 
    // Nothing to do here as the other side of the partial 
    // should already implement the interface with the code 
    // generated from Entity Framework. If not, implement the 
    // interface and return the correct language version in 
    // the property. 
} 

// This is the helper that works out which language version to use. 
public class BilingualHelper 
{ 
    public string GetName(IBilingualEntity entity) 
    { 
     // NOTE: You may have to strip away the region part of the name 
     // but off the top of my head I can't remember the format. 
     // If you are using something else to store the culture you'll 
     // have to reference that instead. 
     var cultureName = Thread.CurrentThread.CurrentUICulture.Name; 
     if (cultureName == "ar") 
      return entity.Ar_Name; 
     return entity.En_Name; 
    } 
} 
+0

Thanks Man, отличная идея. Я использую LINQ, и я облака делаю это так же. – RaedK

Смежные вопросы