Translations

Translations

Die Bibliothek dient der Übersetzung in Xamarin / Xamarin.Forms Apps in C# Code und in XAML-Layout-Dateien. Neben der Abstraktion bringt die Bibliothek die Implementierung einer XAML-Markup-Extension. In der Standardimplementierung werden .Net Resource-Dateien (auch mehrere und aus unterschiedlichen Bibliotheken) zur Übersetzung genutzt. Es steht frei eigene Quellen für Übersetzungen umzusetzen.

Implemntierte Services

  • Abstraktion:
    • IResourceManagersSource - Interface für den Singleton, der die Resourcen enthält.
    • ITranslationService - Übersetzungsservice, der über Dependency Injection in View Models genutzt wird.
  • Umsetzungen
    • TranslationExtension - XAML Erweiterung für Übersetzungen.
    • TranslationService - Implementierung des Services für Übersetzungen (nutzt IResourceManagerSource und IMultilingual aus Plugin.Multilingual).
    • ResourceManagerSource - Implementierung des Singletons für die Resourcen der Übersetzungen.

Installation

# Abstraktion
Install-Package WD.Translations.Abstractions -Version 0.2.0
# Implementierung
Install-Package WD.Translations -Version 0.2.0

Verwendung

Initialisieren Sie ResourceManagersSource in Eurer App.xaml.cs um den Übersetzungsservice in XAML und Code nutzen zu können. Registrieren Sie es als Singleton oder Instance in Eurem Dependency Injection Container der Wahl, wenn Sie ein nutzen. Sie können bei der Registrierung eine beliebige Anzahl von Resourcen registireren. Bei der Auslösung der Übersetzung gewinnt der erste Treffer (die Reihenfolge der Resorucen spielt also eine Rolle). Damit können Sie zum Beispiel Übersetzungen aus einer Basisbibliothek überschreiben, wenn Ihre eigene Resource als erste registriert wird.

App.xaml.cs

// Create Singleton (without DI)
protected override async void OnInitialized()
{
    InitializeComponent();

    var resourceSource = ResourceManagersSource.Init(
      AppResources.ResourceManager,
      CommonTranslations.ResourceManager); // Add your collection

    mainPage = new MainPage();
}

// Register in DI (here with Prism)
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
    containerRegistry.RegisterInstance(ResourceManagersSource.Init(
      AppResources.ResourceManager,
      CommonTranslations.ResourceManager)); // Add your collection of sources
    containerRegistry.RegisterInstance(Plugin.Multilingual.CrossMultilingual.Current);
    containerRegistry.RegisterSingleton<ITranslationService, TranslationService>();

    containerRegistry.RegisterForNavigation<MainPage>();
}

Verwendung in XAML-Dateien

<?xml version="1.0" encoding="utf-8"?>

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:i18N="clr-namespace:WD.Translations;assembly=WD.Translations"
             Title="{i18N:Translation PAGE_TITLE}">
  <ContentPage.Content>
    <Label Text="{i18N:Translation HELLO_WORLD}"/>
  </ContentPage.Content>
</ContentPage>

Verwendung in View Models

private readonly ITranslationService _translServ;

public MyVieModel(ITranslationService translationService)
{
  _translServ = translationService;
}

// Simple translation
public string Title
{
  get { return _translServ.GetTransalation("PAGE_TITLE"); }
}

// Translation with placeholders
public void SomeMethod()
{
  // Translation e.g: "Value have to be between {0} and {1}."
  var validator = new Validator
  {
    _translServ.GetFormattedTranslation("VALIDATION_ERROR_MESSAGE", 0, 500)
  };
}