Как преобразовать Microsoft Locale ID (LCID) в код языка или Объект языкового стандарта в Java

Какое соглашение требует, чтобы таблицы имели исключительные имена? Я всегда думал, что это были множественные имена.

пользователь А добавляется к таблице Users.

Этот сайт соглашается:
http://vyaskn.tripod.com/object_naming.htm#Tables

Этот сайт не соглашается (но я не соглашаюсь с ним):
http://justinsomnia.org/writings/naming_conventions.html

, Поскольку другие упомянули: это просто инструкции. Выберите соглашение, которое работает на Вас и Вашу компанию/проект и палку с нею. Переключение между исключительным и множественным или иногда сокращение слов и иногда не намного больше ухудшают.

10
задан Jonik 28 July 2009 в 09:11
поделиться

3 ответа

Я думаю, что ключевой вопрос здесь: « Почему вы хотите сжимать URL-адреса? »

Пытаться сократить длинные URL-адреса в адресной строке?

Вам лучше сохранить исходный URL-адрес где-то (база данных, текстовый файл ...) вместе с хэш-кодом части, не относящейся к домену (MD5 в порядке). Затем у вас может быть простая страница (или какой-нибудь HTTPModule, если вы чувствуете себя броско) для чтения MD5 и поиска реального URL-адреса. Так работает TinyURL и другие.

Например:

http://mydomain.com/folder1/folder2/page1.aspx

Можно сократить на:

http://mydomain.com/2d4f1c8a

Использование библиотеки сжатия для этого не сработает . Строка будет сжата в более короткое двоичное представление, но преобразование ее обратно в строку, которая должна быть действительной как часть URL-адреса (например, Base64), сведет на нет любые выгоды, полученные вами от сжатия.

Хранение большого количества URL-адресов в в памяти или на диске?

Используйте встроенную библиотеку сжатия в System.IO.Compression или библиотеку ZLib, которая проста и невероятно хороша. Поскольку вы будете хранить двоичные данные, сжатый вывод будет прекрасен как есть. Вам нужно будет распаковать его, чтобы использовать как URL.

Base64) сведет на нет любые преимущества, которые вы получили от сжатия.

Хранение большого количества URL-адресов в памяти или на диске?

Используйте встроенную библиотеку сжатия в System.IO.Compression или библиотеку ZLib, которая проста и невероятно хороша . Поскольку вы будете хранить двоичные данные, сжатый вывод будет прекрасен как есть. Вам нужно будет распаковать его, чтобы использовать как URL.

Base64) сведет на нет любые преимущества, которые вы получили от сжатия.

Хранение большого количества URL-адресов в памяти или на диске?

Используйте встроенную библиотеку сжатия в System.IO.Compression или библиотеку ZLib, которая проста и невероятно хороша . Поскольку вы будете хранить двоичные данные, сжатый вывод будет прекрасен как есть. Вам нужно будет распаковать его, чтобы использовать как URL.

Оказалось, что этого было достаточно для наших текущих потребностей.

Отказ от ответственности: это действительно минималистичный, «фиктивный» способ сделать это самостоятельно на Java и, очевидно, сохранить (и поддерживать) копию информации отображения LCID в вашем собственном кодовая база не очень элегантна. (С другой стороны, я также не хотел бы включать огромную библиотеку jar или делать что-нибудь слишком сложное только для этого простого сопоставления.) Поэтому, несмотря на этот ответ, не стесняйтесь публиковать более элегантные решения или существующие библиотеки , если вы знаете что-нибудь подобное.

5
ответ дан 4 December 2019 в 00:26
поделиться

Первое попадание в Google для "Java LCID" - это javadoc:

gnu.java.awt.font.opentype.NameDecoder

private static java.util.Locale getWindowsLocale (int lcid)

 Отображает LCID Windows в языковой стандарт Java.

Параметры:
 lcid - идентификатор языка Windows, локаль Java которого должна быть получена. 
Возврат:
 подходящий языковой стандарт или null, если сопоставление не может быть выполнено.

Я не знаю, где скачать эту библиотеку, но это GNU, так что найти ее не составит большого труда.

0
ответ дан 4 December 2019 в 00:26
поделиться

Для этого можно использовать GetLocaleInfo (при условии, что вы работаете в Windows (win2k +)).

Этот код C ++ демонстрирует, как использовать функцию:

#include "windows.h"

int main()
{
  HANDLE stdout = GetStdHandle(STD_OUTPUT_HANDLE);
  if(INVALID_HANDLE_VALUE == stdout) return 1;

  LCID Locale = 0x0c01; //Arabic - Egypt
  int nchars = GetLocaleInfoW(Locale, LOCALE_SISO639LANGNAME, NULL, 0);
  wchar_t* LanguageCode = new wchar_t[nchars];
  GetLocaleInfoW(Locale, LOCALE_SISO639LANGNAME, LanguageCode, nchars);

  WriteConsoleW(stdout, LanguageCode, nchars, NULL, NULL);
  delete[] LanguageCode;
  return 0;
}

Не потребуется много работы, чтобы превратить это в вызов JNA . (Совет: используйте константы как int, чтобы найти их значения.)

Пример кода JNA:

Использование JNI немного сложнее, но управляемо для относительно тривиальной задачи.

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

5
ответ дан 4 December 2019 в 00:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: