summaryrefslogtreecommitdiff
path: root/includes/locale.inc
diff options
context:
space:
mode:
Diffstat (limited to 'includes/locale.inc')
-rw-r--r--includes/locale.inc84
1 files changed, 84 insertions, 0 deletions
diff --git a/includes/locale.inc b/includes/locale.inc
index cc95ef7f4..8768be7dc 100644
--- a/includes/locale.inc
+++ b/includes/locale.inc
@@ -3216,3 +3216,87 @@ function country_get_list() {
return $countries;
}
+/**
+ * Save locale specific date formats to the database.
+ *
+ * @param $langcode
+ * Language code, can be 2 characters, e.g. 'en' or 5 characters, e.g.
+ * 'en-CA'.
+ * @param $type
+ * Date format type, e.g. 'short', 'medium'.
+ * @param $format
+ * The date format string.
+ */
+function locale_date_format_save($langcode, $type, $format) {
+ $locale_format = array();
+ $locale_format['language'] = $langcode;
+ $locale_format['type'] = $type;
+ $locale_format['format'] = $format;
+
+ $is_existing = (bool) db_query_range('SELECT 1 FROM {date_format_locale} WHERE language = :langcode AND type = :type', 0, 1, array(':langcode' => $langcode, ':type' => $type))->fetchField();
+ if ($is_existing) {
+ $keys = array('type', 'language');
+ drupal_write_record('date_format_locale', $locale_format, $keys);
+ }
+ else {
+ drupal_write_record('date_format_locale', $locale_format);
+ }
+}
+
+/**
+ * Select locale date format details from database.
+ *
+ * @param $languages
+ * An array of language codes.
+ * @return
+ * An array of date formats.
+ */
+function locale_get_localized_date_format($languages) {
+ $formats = array();
+
+ // Get list of different format types.
+ $format_types = system_get_date_types();
+ $short_default = variable_get('date_format_short', 'm/d/Y - H:i');
+
+ // Loop through each language until we find one with some date formats
+ // configured.
+ foreach ($languages as $language) {
+ $date_formats = system_date_format_locale($language);
+ if (!empty($date_formats)) {
+ // We have locale-specific date formats, so check for their types. If
+ // we're missing a type, use the default setting instead.
+ foreach ($format_types as $type => $type_info) {
+ // If format exists for this language, use it.
+ if (!empty($date_formats[$type])) {
+ $formats['date_format_' . $type] = $date_formats[$type];
+ }
+ // Otherwise get default variable setting. If this is not set, default
+ // to the short format.
+ else {
+ $formats['date_format_' . $type] = variable_get('date_format_' . $type, $short_default);
+ }
+ }
+
+ // Return on the first match.
+ return $formats;
+ }
+ }
+
+ // No locale specific formats found, so use defaults.
+ $system_types = array('short', 'medium', 'long');
+ // Handle system types separately as they have defaults if no variable exists.
+ $formats['date_format_short'] = $short_default;
+ $formats['date_format_medium'] = variable_get('date_format_medium', 'D, m/d/Y - H:i');
+ $formats['date_format_long'] = variable_get('date_format_long', 'l, F j, Y - H:i');
+
+ // For non-system types, get the default setting, otherwise use the short
+ // format.
+ foreach ($format_types as $type => $type_info) {
+ if (!in_array($type, $system_types)) {
+ $formats['date_format_' . $type] = variable_get('date_format_' . $type, $short_default);
+ }
+ }
+
+ return $formats;
+}
+