Eh bien, si vous insistez absolument pour le faire, voici l'approche Je prendrais.
Définir une interface simple avec une méthode qui prend un nombre et crache un suffixe.Comme ceci:
interface INumberSuffixProvider
{
string GetSuffix(int number);
}
Maintenant, identifier les langues que vous souhaitez soutenir. Déterminez quels sont leurs suffixes. Ecrire une classe qui implémente INumberSuffixProvider
pour chacun de ces langages (il peut être utile d'écrire une classe de base qui fournit une implémentation standard assez similaire à la plupart des langages).
Enfin, créer une classe d'usine pour créer une INumberSuffixProvider
pour une chaîne de culture donnée:
public class NumberSuffixProviderFactory
{
public INumberSuffixProvider GetProvider(Language language)
{
switch (name)
{
case Language.English: return new EnglishNumberSuffixProvider();
case Language.German: return new GermanNumberSuffixProvider();
// etc., etc. -- this is just for illustration
default: throw new ArgumentException("Unknown language.");
}
}
}
Ce n'est pas la solution la plus simple, car elle nécessite un peu de travail de votre part. Mais si vous pouvez déterminer quelles langues vous voulez soutenir, au moins une fois que vous avez la structure de base en place (ce qui est juste une esquisse d'une idée, vraiment), mettre ce code à utiliser devrait être assez facile.
Par exemple:
string FormatDate(DateTime date)
{
// These might be a static members.
var language = _currentLanguage;
var suffixProvider = _suffixProviderFactory.GetProvider(language);
return string.Format(
"{0}{1} {2:MMM} {3}",
date.Day,
suffixProvider.GetSuffix(date.Day),
date,
date.Year
);
}
pourquoi -1, si vous donnez un moins s'il vous plaît ajouter un commentaire pourquoi – Ivo
Que feriez-vous si un tel suffixe n'existe pas dans certaines langues? Et si c'est parfois un préfixe? Ou un mot séparé? (btw, je n'ai pas -1) – jalf