Child pages
  • Create tag for displaying language-specific date parts
Skip to end of metadata
Go to start of metadata

Imported From: http://groups.google.com/group/in-portal-dev/browse_thread/thread/3bae12a838020827#

I propose to create tag for displaying language-specific date parts, like weekday, month name etc. on site language, not always on english as date function of php offers.

Related Tasks

INP-378 - Getting issue details... STATUS

8 Comments

  1. Actually I have came across this before and did some customization, here
    is my code for the Languages_tp.php

                    /**
                     * Returns formatted date + time on current language
                     *
                     * @param Array $params
                     * @return string
                     */
                    function CurrentDate($params)
                    {
                            $format = $params['format'];
                            $date = adodb_mktime() + $this->Application->TimeZoneAdjustment();

                            // special processing for week days and months
                            if ( (strpos($format, 'l') !== false) || (strpos($format, 'F') !==
    false) ) {

                                    if ( (strpos($format, 'l') !== false) ) {
                                            $week_day =
    $this->Application->Phrase('lu_weekday_'.adodb_date('l', $date));
                                            $format = str_replace('l', '#@#', $format); // replace with
    reserved char (preserves translation link)
                                    }

                                    if ( (strpos($format, 'F') !== false) ) {
                                            $month = $this->Application->Phrase('lu_month_'.adodb_date('F',
    $date));
                                            $format = str_replace('F', '#@@#', $format); // replace with
    reserved char (preserves translation link)
                                    }

                                    return str_replace( '#@#', $week_day, str_replace('#@@#', $month,
    adodb_date($format, $date)) );
                            }

                            return adodb_date($format, $date);
                    }

    What if we add parameter to this tag to allow more flexibility so it
    looks like this:

    <inp2:language_CurrentDate use_phrases="1" />

    Only then the above phrase conversions will be used?

    --

    --
    Best Regards,

    Dmitry V. Andrejev

  2. Here is another version:

    /**
             * Returns formatted date + time on current language
             *
             * @param string $format
             * @param int $timestamp
             * @param string $case_suffixes
             * @return string
             */
            function LanguageDate($format, $timestamp = false, $case_suffixes =
    '')
            {
                if (!$timestamp) $timestamp = adodb_mktime();
                // apply timezone adjustment manually (because we are not using
    kDateFormatter)
                $date = $timestamp + $this->Application->TimeZoneAdjustment();

                $replacements = Array (
                    'l' => 'la_WeekDay',
                    'D' => 'la_WeekDay',
                    'M' => 'la_Month',
                    'F' => 'la_Month',
                );

                if ($case_suffixes) {
                    // apply case suffixes (for russian language only)
                    $case_suffixes = explode(',', $case_suffixes);

                    foreach ($case_suffixes as $case_suffux) {
                        list ($replacement_name, $case_suffix_value) =
    explode('=', $case_suffux, 2);
                        $replacements[$replacement_name] .= $case_suffix_value;
                    }
                }

                foreach ($replacements as $format_char => $phrase_prefix) {
                    if (strpos($format, $format_char) === false) {
                        unset($replacements[$format_char]);
                        continue;
                    }

                    $replacements[$format_char] =
    $this->Application->Phrase($phrase_prefix . adodb_date($format_char,
    $date));
                    $format = str_replace($format_char, '#' . ord($format_char)
    . '#', $format);
                }

                $date_formatted = adodb_date($format, $date);

                foreach ($replacements as $format_char => $format_replacement) {
                    $date_formatted = str_replace('#' . ord($format_char) . '#',
    $format_replacement, $date_formatted);
                }

                return $date_formatted;
            }

    But it should be converted to tag, because now it's helper method.

  3. Hi Alex,

    Would please clarify on this:

    "But it should be converted to tag, because now it's helper method."

    I suppose your code is a new task for Language Tag Processor?

    DA.

  4. Not task, but tag. No, my code is supposed to be new tag in kDBTagProcessor
    like Field tag is. Only difference is that it will display formatted date
    field contents. Optional parameter "value" will allow to format any abstract
    date as well (not from database). Code, I've attached is helper method, that
    was called from LanguageDate tag.

    Tag CurrentDate in LanguageTagProcessor is not related to this discussion in
    any way.

  5. Sorry - it was a typo. Yes, it's a new tag.

    Let's file a task for it.

    DA.

  6. Ok, time to file a new Feature Request for this.

    Finally feature request has been filed for this:

    453: Create new Tag to display language-specific Date parts

    INP-378 - Getting issue details... STATUS


    DA.

  7. Here is the final path for testing. I've also attached it to the task.