Предотвращение дублирования ресурсов (локализуемая строка) с помощью String.Format - PullRequest
2 голосов
/ 10 июня 2010

Я работаю над приложением (.NET, но не актуально), в котором существует большой потенциал для дублирования ресурсов / строк - большинство этих строк просты, например:

  • Объем: 33
  • Громкость: 33 (дБ)
  • Громкость
  • 33 дБ
  • Громкость (дБ)
  • Команда - Громкость: 33 (дБ)

, где X, Y и единица измерения одинаковы.

Должен ли я определять новый ресурс для каждой строки или предпочтительно использовать String.Format для упрощения некоторых из этих, например ::

String.Format("{0}: {1}", Resource.Volume, 33)
String.Format("{0}: {1} {2}", Resource.Volume, 33, Resource.dB)
Resource.Volume
String.Format("{0} ({1})", 33, Resource.dB)
String.Format("{0} ({1})", Resource.Volume, Resource.dB)
String.Format("Command - {0}: {1} {2}", Resource.Volume, 33, Resource.dB)

Я бы также определил строковые форматы, такие как "{0}: {1}" в ресурсах, чтобы была возможность изменить порядок слов ...

Я бы использовал этот подход избирательно, а не во всем приложении.

А как насчет:

 String.Format("{0}: {1}", Volume, Resource.Muted_Volume) 
 // = Volume: Muted
 Resource.Muted_Volume
 String.Format("{0}: {1} (by user {2})", Volume, Resource.Muted_Volume, "xy") 
 // = Volume: Muted (by user xy)

Как насчет простых случаев, таких как «Пользователь» против «Пользователь»: «против» Пользователь -«?Можете ли вы представить себе какую-либо культуру, в которой символ «:» будет находиться в другом месте или, возможно, будет использоваться другой символ?

Преимущество заключается в сокращении количества ресурсов в 2-3 раза в моем приложении.

Есть ли скрытые опасности использования этого подхода?Может ли кто-нибудь привести пример (язык / культура), где это не будет работать правильно?

Ответы [ 2 ]

2 голосов
/ 10 июня 2010

Вы сами определили основной недостаток, задавая вопрос:

Может ли кто-нибудь дать мне пример (язык), где это не будет работать правильно?

Вы полагаетесь на то, что порядок слов одинаков на всех языках. Я ни в коем случае не эксперт по языкам, но я работал над приложениями, которые были переведены на другие языки (обычно французский и немецкий), и порядок слов при создании строк всегда был проблемой.

Вероятно, вам подойдут простые фразы - например, те, что вы даете, но что-нибудь более сложное, и вам нужно будет иметь отдельные ресурсы для каждой.

1 голос
/ 10 июня 2010

Помимо проблем с множественным числом / единичным (которые не относятся к этой проблеме), я думаю, что это безопасно для большинства европейских языков, так как он не использует свободный текст, но в основном количество и наименования: например, Command: имякоманды.Объем: количество.Вам нужно разобраться с порядком слов, имея шаблон, определенный ресурсом, но это все еще только один ресурс для «типа формата» - слова в шаблоне по-прежнему параметризованы.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...