15

Ho un progetto in Xamarin destinato a telefoni Android, iOS e Windows. Ho usato core (libreria PCL) per condividere codice comune tra diverse piattaforme. Ho aggiunto delle risorse file (risorsa .net) resx nella mia libreria di base e leggere la stringa specifica cultura ho usato seguente frammento di codice in uno dei miei ViewModel:Localizzazione per piattaforma mobile cross utilizzando xamarin e problema con iOS solo

public string GetString() 
{ 
    // CommonResources is the name of my resource file 
    ResourceManager resManager = new ResourceManager(typeof(CommonResources)); 
    return resManager.GetString("LoginLabel",CultureInfo.CurrentCulture); 
} 

"LoginLabel" è la mia chiave di risorsa e il suo valore è "Accedi" (in inglese) e "inloggen" in olandese.

Ho creato due file di risorse CommonResources per inglese e olandese nel mio progetto PCL. CommonResources.resx
CommonResources.nl-NL.resx

in Android, iOS e Windows Phone, ho impostato la cultura come segue:

Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("nl-NL"); 
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("nl-NL"); 

Questo funziona bene per Android e Windows Phone.

Ma per iOS non funziona. Restituisce sempre la stringa di risorse dal file inglese. La cultura è impostata correttamente e viene visualizzata in modalità di debug. ma in qualche modo non è in grado di caricare la stringa di risorse dalla risorsa olandese.

Quindi la domanda è, è possibile localizzare string (.Net way) utilizzando PCL per tutte le piattaforme? qualcuno ha qualche idea? Grazie in anticipo.

+0

L'olandese è l'unica altra lingua? In caso contrario, le altre lingue funzionano come previsto? Se sì, puoi aggiungere un'altra lingua come test? – chad

+0

No, l'hindi è un'altra lingua a parte l'olandese. Non funziona per nessuna lingua supportata tranne che per l'inglese. – SoftSan

risposta

2

Per la localizzazione sui nostri progetti Xamarin ho utilizzato il Toolkit di app multilingue (detailed here) dai modelli Microsoft e T4 per trasformare l'output dal toolkit in formati utilizzabili per Android e iOS.

This tutorial ha una fantastica panoramica del processo ed è basato sul progetto di codice this.

0

O:

  • Lei non è in realtà l'impostazione del CurrentCulture su iOS.
  • Stai impostando CurrentCulture su thread A e recuperandolo su thread B.

Prova questo:

public string GetString() 
{ 
    Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("nl-NL"); 
    Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("nl-NL"); 

    // CommonResources is the name of my resource file 
    ResourceManager resManager = new ResourceManager(typeof(CommonResources)); 
    return resManager.GetString("LoginLabel",CultureInfo.CurrentCulture); 
} 
0

si fa a testare su un dispositivo vero e proprio? Nel simulatore non è possibile cambiare la cultura. Ho avuto un problema simile con i miei file di lingua.