Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Вопрос о разделителях

23.09.22 09:09
Re: Вопрос о разделителях
 
Программист коренной житель

Открываешь букварь и читаешь про локализацию.


Например ToString(IFormatProvider):

decimal value = -16325.62m;
// Display value using the invariant culture.
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture));
// Display value using the en-GB culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")));
// Display value using the de-DE culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("de-DE")));
// This example displays the following output to the console:
//       -16325.62
//       -16325.62
//       -16325,62


Что делать

Уволить нахрен криворуких программистом и нанять тех, которые умеют разрабатывать многоязычные приложения.


у кого какие идеи.

Если уволить криворуких нельзя, то дать им ссылку на MSDN пусть учатся.


есть ли какие-то международные стандарты, которые устанавливают правила применения типов разделителей?

Нет, нету. В каждой стране свои правила. И точка или запятая в числах - это ваша не единственная проблема. Вот когда дойдете до дат - это будет веселье:

using System;
using System.Globalization;
public class Example2
{
   public static void Main2()
   {
      CultureInfo[] cultures = new CultureInfo[] {CultureInfo.InvariantCulture,
                                                  new CultureInfo("en-us"),
                                                  new CultureInfo("fr-fr"),
                                                  new CultureInfo("de-DE"),
                                                  new CultureInfo("es-ES"),
                                                  new CultureInfo("ja-JP")};
      DateTime thisDate = new DateTime(2009, 5, 1, 9, 0, 0);
      foreach (CultureInfo culture in cultures)
      {
         string cultureName;
         if (string.IsNullOrEmpty(culture.Name))
            cultureName = culture.NativeName;
         else
            cultureName = culture.Name;
         Console.WriteLine("In {0}, {1}",
                           cultureName, thisDate.ToString(culture));
      }
      }
}
// The example produces the following output:
//    In Invariant Language (Invariant Country), 05/01/2009 09:00:00
//    In en-US, 5/1/2009 9:00:00 AM
//    In fr-FR, 01/05/2009 09:00:00
//    In de-DE, 01.05.2009 09:00:00
//    In es-ES, 01/05/2009 9:00:00
//    In ja-JP, 2009/05/01 9:00:00


Или данные хотелки должны быть указаны в ТЗ?

По идее используемые стандарты, конечно, можно перечислить в ТЗ... Но если заказчик из конкретной страны, то он по умолчанию будет ожидать, что тексты, числа, даты и прочие локализируемые штуки будут показаны на его языке.


У меня сейчас один вариант - давить на то, что данные требования не были заявлены Заказчиком в ТЗ, а четких стандартизированных правил на этот счет не существует.

Гугли ГОСТы.

 

Перейти на