Как жестко запрограммировать названия месяцев на французском языке в php?

Я работаю над приведенным ниже кодом php / javascript, который возвращает названия месяцев на французском языке, но не соответствует французским словам, которые мы используем.

<script>
document.getElementById('title_fr').value = "<?php setlocale(LC_TIME, "frc"); echo strftime("%d %b %Y", strtotime( $this_date )); ?>"; 
</script>

Приведенный выше скрипт возвращает названия месяцев на французском языке, что не соответствует нашему набору названий месяцев на французском языке.

mars
avr.
mai
juin
juil.
août
sept.
oct. 
nov.
déc.

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

janvier
février
mars
avril
mai
juin
juillet
août
septembre
octobre
novembre
décembre

Постановка проблемы:

Мне интересно, какие изменения мне нужно внести в приведенный выше сценарий, чтобы он возвращал название месяца на французском языке, за которым я следую.

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

const monthNamesFr = ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"];

person john    schedule 14.03.2019    source источник
comment
Так что в (вашей) Франции в году всего десять месяцев, это интересно :-)   -  person 04FS    schedule 14.03.2019
comment
Согласно руководству по strftime, вы можете использовать %B вместо %b, чтобы получить полное название месяца (в зависимости от локали). Решит ли это проблему?   -  person JNevill    schedule 14.03.2019
comment
Нет, 12 месяцев. Я забыл поставить янв / фев.   -  person john    schedule 14.03.2019
comment
Используйте date, чтобы получить только часть месяца в вашей дате, а затем используйте ее в качестве индекса для доступа к вашему массиву названий месяцев. Объедините это с остальными частями даты, которые вам нужно вывести до или после.   -  person 04FS    schedule 14.03.2019
comment
@JNevill Это сработало, спасибо за помощь. Как вы думаете, мне нужно внести здесь какие-либо изменения setlocale(LC_TIME, "frc"); echo strftime("%d %b %Y", strtotime( $this_date ));?   -  person john    schedule 14.03.2019
comment
@JNevill Другая проблема, с которой я столкнулся, - это когда его décembre и février, его возвращение d�cembre и füvrier   -  person john    schedule 14.03.2019
comment
Я думаю, setlocale(LC_TIME, "frc"); echo strftime("%d %B %Y", strtotime( $this_date )); - правильный путь. Что касается ваших уродливых символов, это похоже на проблемы с кодировкой символов (символы UTF8 проходят, но преобразуются в ASCII). Не будучи экспертом по PHP, я не уверен, что вы справитесь с этим. Если в вашем php.ini есть параметр, который нужно изменить, или если вы обрабатываете преобразование кодировки с помощью чего-то вроде _2 _... Я бы открыл еще один вопрос здесь по SO, чтобы он мог привлечь внимание экспертов.   -  person JNevill    schedule 14.03.2019
comment
Из ответа Дэйва Бертона stackoverflow.com/questions/241015/ Я использовал <meta http-equiv=Content-Type content="text/html; charset=windows-1252">, и он начал работать.   -  person john    schedule 14.03.2019
comment
Я не уверен, влияет ли это на другие части кода.   -  person john    schedule 14.03.2019


Ответы (2)


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

 setlocale(LC_TIME, "frc"); echo strftime("%d %B %Y", strtotime( $this_date ));
person JNevill    schedule 14.03.2019
comment
Это сработало. Другая проблема, с которой я столкнулся, - это когда его décembre и février, его возвращение décembre и füvrier - person john; 14.03.2019

Я бы предложил использовать допустимую локаль, например fr_FR для французского языка во Франции. Кроме того, используйте %B для полного названия месяца согласно strftime() документации.

$this_date = '2018-04-03 12:12:12';
setlocale(LC_TIME, "fr_FR");
echo strftime('%d %B %Y', strtotime($this_date)); // 03 avril 2019

Это работает независимо от локали, настроенной в системе.

person Erik Giberti    schedule 14.03.2019
comment
Это сработало. Другая проблема, с которой я столкнулся, - это когда его décembre и février, его возвращение décembre и füvrier - person john; 14.03.2019
comment
Вероятно, это проблема с кодировкой символов. Если вы смешиваете UTF-8 с другой кодировкой, например iso-8859-1 - person Erik Giberti; 17.03.2019