aboutsummaryrefslogtreecommitdiffstats
path: root/htdocs/includes
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2021-10-20 22:49:22 +0200
committerArmand Philippot <git@armandphilippot.com>2021-10-20 22:49:22 +0200
commitc14da77997880189e6f4b7012d40dec227b9b225 (patch)
tree114dbe1f13d51dcdae2bc9e0e4f69a71178adb31 /htdocs/includes
parentd439d65db1c4f56aa5bafa5df6b595855501fcb9 (diff)
chore: add php template and includes (config, i18n and utils)
Diffstat (limited to 'htdocs/includes')
-rw-r--r--htdocs/includes/config.php19
-rw-r--r--htdocs/includes/i18n.php150
-rw-r--r--htdocs/includes/utils.php31
3 files changed, 200 insertions, 0 deletions
diff --git a/htdocs/includes/config.php b/htdocs/includes/config.php
new file mode 100644
index 0000000..cf7dba6
--- /dev/null
+++ b/htdocs/includes/config.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Config of demo.armandphilippot.com
+ *
+ * @package DemoArmandphilippotCom
+ * @author Armand Philippot <contact@armandphilippot.com>
+ * @copyright 2021 Armand Philippot
+ * @license http://www.opensource.org/licenses/mit-license.php MIT
+ * @link https://demo.armandphilippot.com/
+ * @since 1.0.0
+ */
+
+/**
+ * The website will check if the HTTP accepted locales have a matching
+ * translation. If not, the default locale is "en_US". If you want to
+ * overwrite the default locale, use this variable. Make sure the translation
+ * exists.
+ */
+$dap_default_locale = 'en_US';
diff --git a/htdocs/includes/i18n.php b/htdocs/includes/i18n.php
new file mode 100644
index 0000000..37dee90
--- /dev/null
+++ b/htdocs/includes/i18n.php
@@ -0,0 +1,150 @@
+<?php
+/**
+ * Functions to translate demo.armandphilippot.com
+ *
+ * @package DemoArmandphilippotCom
+ * @author Armand Philippot <contact@armandphilippot.com>
+ * @copyright 2021 Armand Philippot
+ * @license http://www.opensource.org/licenses/mit-license.php MIT
+ * @link https://demo.armandphilippot.com/
+ * @since 1.0.0
+ */
+
+/**
+ * Get a list of available translations.
+ *
+ * @return array The available languages.
+ */
+function dap_get_available_languages()
+{
+ $languages_dir = glob('languages' . DIRECTORY_SEPARATOR . '*', GLOB_ONLYDIR);
+ $languages = str_replace('languages' . DIRECTORY_SEPARATOR, '', $languages_dir);
+
+ return $languages;
+}
+
+/**
+ * Get accepted languages based on HTTP header.
+ *
+ * @return array The accepted languages.
+ */
+function dap_get_languages_from_http()
+{
+ $languages = '';
+
+ if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
+ $languages = preg_split('/(,|;)/', $_SERVER['HTTP_ACCEPT_LANGUAGE'], -1, PREG_SPLIT_NO_EMPTY);
+ $languages = array_filter(
+ $languages,
+ function ($value) {
+ return substr($value, 0, 2) !== 'q=';
+ }
+ );
+ }
+
+ return $languages;
+}
+
+/**
+ * Check if a locale is a valid locale.
+ *
+ * @param string $locale The locale to test.
+ * @param array $valid_locales The valid locales.
+ * @return boolean True if the locale exists.
+ */
+function dap_is_valid_locale(string $locale, array $valid_locales) : bool
+{
+ if (empty($locale)) {
+ return false;
+ }
+
+ return in_array($locale, $valid_locales, true);
+}
+
+/**
+ * Filter the accepted locales to determine the locale to use.
+ *
+ * @param array $locales The locales to test.
+ * @param string $default_locale The default locale.
+ * @return string The first valid locale.
+ */
+function dap_get_valid_locale(array $locales, string $default_locale) : string
+{
+ $valid_locales = dap_get_available_languages();
+
+ if (isset($default_locale) && dap_is_valid_locale($default_locale, $valid_locales)) {
+ $default_locale = $default_locale;
+ } else {
+ $default_locale = 'en_US';
+ }
+
+ $possible_locales = array_intersect($locales, $valid_locales);
+ $possible_locales = array_values($possible_locales);
+ $locale = '';
+
+ if (count($possible_locales) > 0) {
+ $locale = $possible_locales[0];
+ } else {
+ $locale = $default_locale;
+ }
+
+ return $locale;
+}
+
+/**
+ * Define the locale to use.
+ *
+ * @param string $default_locale The default locale.
+ * @return string The locale to use.
+ */
+function dap_define_locale(string $default_locale)
+{
+ $http_language = dap_get_languages_from_http();
+ $http_locale = str_replace('-', '_', $http_language);
+ $http_locale = is_array($http_locale) ? $http_locale : array($http_locale);
+ $locale = dap_get_valid_locale($http_locale, $default_locale);
+
+ return $locale;
+}
+
+/**
+ * Get a list of possible format based on the locale to use.
+ *
+ * @param string $locale The locale to use.
+ * @return array The locale in different formats to use.
+ */
+function dap_get_formatted_locale(string $locale)
+{
+ $formatted_locale = array( $locale );
+ $formatted_locale[] = $locale . '.utf8';
+ $formatted_locale[] = $locale . '.UTF-8';
+ $formatted_locale[] = strtok($locale, '_');
+
+ return $formatted_locale;
+}
+
+/**
+ * Transform a locale format (ex: `en_US`) to a language format (ex: `en-US`).
+ *
+ * @param string $locale The used locale.
+ * @return string The language to use.
+ */
+function dap_get_language(string $locale)
+{
+ $language = str_replace('_', '-', $locale);
+
+ return $language;
+}
+
+/**
+ * Set the locale.
+ *
+ * @param array $formatted_locale The locale with its different formats.
+ */
+function dap_set_locale(array $formatted_locale)
+{
+ setlocale(LC_ALL, $formatted_locale);
+ bindtextdomain('DAP', dirname(__DIR__) . DIRECTORY_SEPARATOR . 'languages');
+ bind_textdomain_codeset('DAP', 'UTF-8');
+ textdomain('DAP');
+}
diff --git a/htdocs/includes/utils.php b/htdocs/includes/utils.php
new file mode 100644
index 0000000..8b661d7
--- /dev/null
+++ b/htdocs/includes/utils.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Utilities for demo.armandphilippot.com
+ *
+ * @package DemoArmandphilippotCom
+ * @author Armand Philippot <contact@armandphilippot.com>
+ * @copyright 2021 Armand Philippot
+ * @license http://www.opensource.org/licenses/mit-license.php MIT
+ * @link https://demo.armandphilippot.com/
+ * @since 1.0.0
+ */
+
+/**
+ * Get current environment defined in .env file.
+ *
+ * @since 1.0.0
+ *
+ * @return string Current env or empty string.
+ */
+function dap_get_current_env()
+{
+ if (file_exists(__DIR__ . '/vendor/autoload.php')) {
+ require_once __DIR__ . '/vendor/autoload.php';
+ $dap_dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
+ $dap_dotenv->safeLoad();
+ $dap_current_env = $_ENV['WP_THEME_ENV'];
+ return $dap_current_env;
+ } else {
+ return '';
+ }
+}