Как я автоматически устанавливаю локаль пользователя в PHP?

Не самая красивая, но вы найдете максимальное число, используя split, найдите местоположение max и вставьте столбец

df = pd.DataFrame(columns=['node_1', 'node_2', 'node_3','node_4','node_5','node_6','node_7','node_8','node_9','node_10','node_11','B'])


num = max(map(int, df.filter(like = 'node_').columns.str.split('_').str[1]))
loc = df.columns.get_loc('node' + '_' + str(num)) + 1
column = 'node'+ '_'+str(num + 1)
df.insert(loc, column, np.nan)

print(df.columns)

Index(['node_1', 'node_2', 'node_3', 'node_4', 'node_5', 'node_6', 'node_7', 'node_8', 'node_9', 'node_10', 'node_11', 'node_12', 'B'],
  dtype='object')
8
задан Sean 28 November 2008 в 23:27
поделиться

4 ответа

Хорошее решение продвигается.

Без этого необходимо будет проанализировать тот заголовок. Это - разделенный запятыми список разделенных от точки с запятой локалей и атрибутов.

Это может быть похожим на это:

en_US, en;q=0.8, fr_CA;q=0.2, *;q=0.1

и затем попробуйте каждую локаль до setlocale() принимает его. Будьте подготовлены, что ни один из них не может соответствовать.

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


Для локали Windows возможно, необходимо ли преобразовать имена ISO 639-1 к ISO 639-2/3?

2
ответ дан 5 December 2019 в 17:42
поделиться

Это не столь легко, как это должно быть (по моему скромному мнению). В первую очередь, необходимо извлечь локали из $_SERVER['HTTP_ACCEPT_LANGUAGE'] и вид их их q значения. Впоследствии необходимо получить соответствующую системную локаль для каждой из данных локалей, которые не должны быть никакой проблемой на *, отклоняют машину (Вам только, возможно, придется справиться с корректным набором символов), но в Windows необходимо будет перевести локали в локали Windows, например. de_DE будет German_Germany (снова также необходимо справиться с проблемами набора символов при использовании UTF-8 в приложении, например). Я думаю, что необходимо будет создать справочную таблицу для этой проблемы - и существует много локалей ;-)

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

Но затем будет последнее препятствие, которое справится:

Информация о локали сохраняется для каждого процесса, не на поток. При выполнении PHP на многопоточном API сервера как IIS или Apache в Windows, можно испытать внезапные изменения настроек локали, в то время как сценарий работает, хотя сам сценарий никогда не называл setlocale () сам. Это происходит из-за других сценариев, работающих в различных потоках того же процесса, одновременно изменяющего processwide локаль с помощью setlocale ().

(см.: http://de2.php.net/manual/en/function.setlocale.php)

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

Поэтому упомянутый Zend_Locale не полагается на функцию PHP setlocale() (это только используется для получения системной информации о локали), но вместо этого использует систему на основе данных, обеспеченных Unicode Проект CLDR. Это делает независимого политика компонента из всех ними setlocale() проблемы, но это также представляет некоторые другие дефициты, такие как отсутствие поддержки осведомленных о локали строковых операций (сортирующий, например).

5
ответ дан 5 December 2019 в 17:42
поделиться

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

Хорошие новости о Пехлеви, Вы не должны устанавливать все это. Это - связанная платформа losely, и можно просто использовать Zend_Locale, не используя ни одного из других компонентов. Возможно, Вы хотите объединить его с Zend_Translate.

Попробуйте

2
ответ дан 5 December 2019 в 17:42
поделиться

Существует http_negotiate_language, но это зависит от http-расширения. С другой стороны, см. комментарии к странице руководства для реализации пространства пользователя.

1
ответ дан 5 December 2019 в 17:42
поделиться
Другие вопросы по тегам:

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