Opzione 1:
È possibile sostituire le proprietà DateTimeFormatInfo.MonthNames e MonthGenitiveNames così come la loro corrispondente AbbreviatedMonthNames e AbbreviatedMonthGenitiveNames proprietà.
Sono semplici 1-dimensionali string[]
array e hanno un setter pubblico, che permette di aggiungere le vostre traduzioni personalizzate al CultureInfo:
Quando questa proprietà è impostata, la matrice deve essere unidimensionale e deve avere esattamente 13 elementi. Gli oggetti del calendario accettano i calendari con 13 mesi. Il primo elemento (l'elemento a zero dell'indice) rappresenta il primo mese dell'anno definito dalla proprietà Calendar.
Se si imposta la proprietà MonthNames, è necessario impostare anche la proprietà MonthGenitiveNames .
Se il modello personalizzato include il modello di formato "MMMM", DateTime.ToString visualizza il valore della MonthNames al posto del "MMMM" nel modello di formato.
Questa proprietà è interessata se il valore della proprietà Calendario cambia.
Così si potrebbe modificare il vostro esempio di codice a questo:
// I am just using German Number representations for the example.
// Use additional string Arrays to suit the abbrevated
// and the Genetive names.
// Replaye with whatever suits your needs.
string[] monthNames =
{
"Eins",
"Zwei",
"Drei",
"Vier",
"Fünf",
"Sechs",
"Sieben",
"Acht",
"Neun",
"Zehn",
"Elf",
"Zwölf",
string.Empty
};
// Assign each string Array to its corresponding property.
// I am using the same Array here just as an example for
// what is possible and because I am lazy... :-)
ci.DateTimeFormat.MonthNames = monthNames;
ci.DateTimeFormat.MonthGenitiveNames = monthNames;
ci.DateTimeFormat.AbbreviatedMonthNames = monthNames;
ci.DateTimeFormat.AbbreviatedMonthGenitiveNames = monthNames;
Questi nomi saranno poi utilizzati con il tuo stringa di formato in uscita, proprio come si desidera avere.
Ogni volta che si modifica il calendario, queste sostituzioni andranno perse. Quindi è necessario assicurarsi di riassegnare i valori personalizzati se ne avete bisogno.
[Update] Opzione 2:
Un approccio più persistente potrebbe essere quella di utilizzare il CultureAndRegionInfoBuilder Class.
Definisce una cultura personalizzata nuova o basata su un'altra cultura e il paese/regione . La cultura personalizzata può essere installata su un computer e successivamente utilizzata da qualsiasi applicazione in esecuzione su quel computer.
È possibile creare una versione di sostituzione completa della cultura "he-IL"
o creare una variante con solo le traduzioni personalizzate o qualsiasi altra cosa nel mezzo.
Utilizzando questo approccio non è necessario assicurarsi manualmente che le traduzioni siano in atto dopo ogni interruttore Cultura nell'appliazione come nell'opzione 1. Una volta registrata la nuova cultura personalizzata, è possibile utilizzarla come qualsiasi altro CultureInfo .
Si prega di notare che la vostra applicazione avrà bisogno di privilegi amministrativi per registrare una nuova cultura personalizzata.
La creazione di una cultura personalizzata non è troppo complicata come mostra il seguente frammento di codice.
Esempio da MSDN: CultureAndRegionInfoBuilder
L'esempio seguente definisce una lingua personalizzata RU-USA che rappresenta la lingua russa negli Stati Uniti. L'esempio definisce la cultura personalizzata caricando le impostazioni dall'oggetto CulturaInfo russo (Russia) e dall'oggetto RegionInfo statunitense, quindi imposta un numero di proprietà CultureAndRegionInfoBuilder. Nell'esempio viene registrata la cultura personalizzata, quindi viene creata un'istanza e viene creata la cultura di thread corrente come .
using System;
using System.Globalization;
using System.Threading;
public class Example
{
public static void Main()
{
// Create a custom culture for ru-US.
CultureAndRegionInfoBuilder car1 = new CultureAndRegionInfoBuilder("ru-US",
CultureAndRegionModifiers.None);
car1.LoadDataFromCultureInfo(CultureInfo.CreateSpecificCulture("ru-RU"));
car1.LoadDataFromRegionInfo(new RegionInfo("en-US"));
car1.CultureEnglishName = "Russian (United States)";
car1.CultureNativeName = "русский (США)";
car1.CurrencyNativeName = "Доллар (США)";
car1.RegionNativeName = "США";
// Register the culture.
try {
car1.Register();
}
catch (InvalidOperationException) {
// Swallow the exception: the culture already is registered.
}
// Use the custom culture.
CultureInfo ci = CultureInfo.CreateSpecificCulture("ru-US");
Thread.CurrentThread.CurrentCulture = ci;
Console.WriteLine("Current Culture: {0}",
Thread.CurrentThread.CurrentCulture.Name);
Console.WriteLine("Writing System: {0}",
Thread.CurrentThread.CurrentCulture.TextInfo);
}
}
// The example displays the following output:
// Current Culture: ru-US
// Writing System: TextInfo - ru-US
Questo è già stato risposto qui: http://stackoverflow.com/questions/8711390/get-the- complete-month-name-in-inglese – user3036342
@ user3036342: Credo che la risposta collegata userà * Settembre * come nome del mese e non * Kislev * che è il nome del mese ebraico trascritto usando l'alfabeto latino. –
@ user3036342 Questa domanda è irrilevante. –