Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-30513

Remove concatenation used to create view text / tooltip for date searchers

      Date searchers' view html is constructed by concatenating i18n keys such as navigator.filter.duedate.after, navigator.hidden.search.request.summary.date.ago. This concatenation makes assumptions about grammar that are true for english but not necessarily true for other languages.

      Change so date searcher view html text is always constructed using i18n keys that are full sentences, not concatenations of multiple subkeys.

            [JRASERVER-30513] Remove concatenation used to create view text / tooltip for date searchers

            ogawa@ricksoft.jp here are the i18n strings that will be used in JIRA 5.2.11:

            navigator.filter.date.period.fromago.toago = From {0} ago to {1} ago
            navigator.filter.date.period.fromago.tofromnow = From {0} ago to {1} from now
            navigator.filter.date.period.fromago.tonow = From {0} ago to now
            navigator.filter.date.period.fromfromnow.tofromnow = From {0} from now to {1} from now
            navigator.filter.date.period.fromnow.tofromnow = From now to {0} from now
            navigator.filter.date.period.fromnow.tonow = From now to now
            
            navigator.filter.date.withinthelast = Within the last {0}
            navigator.filter.date.period.fromago.toanytime = From {0} ago to anytime
            navigator.filter.date.period.fromfromnow.toanytime = From {0} from now to anytime
            navigator.filter.date.period.fromnow.toanytime = From now to anytime
            
            navigator.filter.date.morethan = More than {0}
            navigator.filter.date.morethanago = More than {0} ago
            navigator.filter.date.morethanfromnow = More than {0} from now
            navigator.filter.date.morethannow = More than now
            navigator.filter.date.period.fromanytime.toago = From anytime to {0} ago
            navigator.filter.date.period.fromanytime.tofromnow = From anytime to {0} from now
            navigator.filter.date.period.fromanytime.tonow = From anytime to now
            
            navigator.filter.date.duedate.nowoverdue = Now overdue
            navigator.filter.date.duedate.dueinnext.only = Due in next {0}
            navigator.filter.date.duedate.dueinnext.overdue = Now overdue and due in next {0}
            

            Luis Miranda (Inactive) added a comment - - edited ogawa@ricksoft.jp here are the i18n strings that will be used in JIRA 5.2.11: navigator.filter.date.period.fromago.toago = From {0} ago to {1} ago navigator.filter.date.period.fromago.tofromnow = From {0} ago to {1} from now navigator.filter.date.period.fromago.tonow = From {0} ago to now navigator.filter.date.period.fromfromnow.tofromnow = From {0} from now to {1} from now navigator.filter.date.period.fromnow.tofromnow = From now to {0} from now navigator.filter.date.period.fromnow.tonow = From now to now navigator.filter.date.withinthelast = Within the last {0} navigator.filter.date.period.fromago.toanytime = From {0} ago to anytime navigator.filter.date.period.fromfromnow.toanytime = From {0} from now to anytime navigator.filter.date.period.fromnow.toanytime = From now to anytime navigator.filter.date.morethan = More than {0} navigator.filter.date.morethanago = More than {0} ago navigator.filter.date.morethanfromnow = More than {0} from now navigator.filter.date.morethannow = More than now navigator.filter.date.period.fromanytime.toago = From anytime to {0} ago navigator.filter.date.period.fromanytime.tofromnow = From anytime to {0} from now navigator.filter.date.period.fromanytime.tonow = From anytime to now navigator.filter.date.duedate.nowoverdue = Now overdue navigator.filter.date.duedate.dueinnext.only = Due in next {0} navigator.filter.date.duedate.dueinnext.overdue = Now overdue and due in next {0}

            Kan Ogawa added a comment -

            Now I'm evaluating JIRA 6.0 EAP version.
            I18N problem of new Issue Navigator isn't fixed yet.

            I think that the issues (including related issues) need to be resolved before 6.0 final release.
            If they are fixed in 6.0 EAP version, I'll try to test with pleasure.

            Best regards,
            Kan Ogawa

            Kan Ogawa added a comment - Now I'm evaluating JIRA 6.0 EAP version. I18N problem of new Issue Navigator isn't fixed yet. I think that the issues (including related issues) need to be resolved before 6.0 final release. If they are fixed in 6.0 EAP version, I'll try to test with pleasure. Best regards, Kan Ogawa

            Kan Ogawa added a comment -

            Hi,

            I have translated into English the following page for Atlassian staff(s). You can share it and discuss here about this issue.
            https://confluence.atlassian.com/display/AET/JIRA+5.2+Issue+Navigator+Japanese+Interface+Issues

            Best regards,
            Kan Ogawa

            Kan Ogawa added a comment - Hi, I have translated into English the following page for Atlassian staff(s). You can share it and discuss here about this issue. https://confluence.atlassian.com/display/AET/JIRA+5.2+Issue+Navigator+Japanese+Interface+Issues Best regards, Kan Ogawa

            Kan Ogawa added a comment -

            Hi,

            Using the following i18n strings in nav popup are mistaken. For more details, please see JRA-30748 issue.

            common.concepts.resolved = Resolved
            common.concepts.updated = Updated
            

            Best regards,
            Kan Ogawa

            Kan Ogawa added a comment - Hi, Using the following i18n strings in nav popup are mistaken. For more details, please see JRA-30748 issue. common.concepts.resolved = Resolved common.concepts.updated = Updated Best regards, Kan Ogawa

            Luis Miranda (Inactive) added a comment - - edited

            pslade@atlassian.com the mistake is to assume i18n strings can be refactored like code. Take the following i18n strings:

            popups.daterange.withinthelast.field = {0} within the last 24 hours
            common.concepts.resolved = Resolved
            common.concepts.updated = Updated
            

            The developer then writes code like this:

            println i18n.getText('popups.daterange.withinthelast.field', i18n.getText('common.concepts.resolved')); // "Resolved within the last 24 hours"
            println i18n.getText('popups.daterange.withinthelast.field', i18n.getText('common.concepts.updated')); // "Updated within the last 24 hours"
            

            This works in English but not in other languages. Moral of the story is: don't concatenate i18n strings, always use full phrases.

            Luis Miranda (Inactive) added a comment - - edited pslade@atlassian.com the mistake is to assume i18n strings can be refactored like code. Take the following i18n strings: popups.daterange.withinthelast.field = {0} within the last 24 hours common.concepts.resolved = Resolved common.concepts.updated = Updated The developer then writes code like this: println i18n.getText( 'popups.daterange.withinthelast.field' , i18n.getText( 'common.concepts.resolved' )); // "Resolved within the last 24 hours" println i18n.getText( 'popups.daterange.withinthelast.field' , i18n.getText( 'common.concepts.updated' )); // "Updated within the last 24 hours" This works in English but not in other languages. Moral of the story is: don't concatenate i18n strings, always use full phrases.

            lmiranda JRA-30323 fixes the searcher editHtml, which used to be good but was broken in 5.2. This issue is for the searcher viewHtml which used some concatenation pre-5.2.

            Jonathon Creenaune added a comment - lmiranda JRA-30323 fixes the searcher editHtml, which used to be good but was broken in 5.2. This issue is for the searcher viewHtml which used some concatenation pre-5.2.

            pslade@atlassian.com how is this different from JRA-30323? I'm thinking this has already been addressed in 5.2.1.

            Luis Miranda (Inactive) added a comment - pslade@atlassian.com how is this different from JRA-30323 ? I'm thinking this has already been addressed in 5.2.1.

            sladey added a comment -

            chris@atlassian.com and lmiranda this seems like a change we will need to make in 6.0. Can you guys please understand the incorrect assumptions we have made here. Is there a general i18n pattern of dev in KickAss that we need to fix?

            sladey added a comment - chris@atlassian.com and lmiranda this seems like a change we will need to make in 6.0. Can you guys please understand the incorrect assumptions we have made here. Is there a general i18n pattern of dev in KickAss that we need to fix?

            Kan Ogawa added a comment - - edited

            Proposal

            I have simply summarized. These are new i18n keys and entries to add in TAC.
            However, I don't know that a change of date searchers implementation will be to what extent.

            1. Due Date

            navigator.filter.daterange.duedate.field = {fieldname}: Now overdue
            navigator.filter.daterange.morethan.field = {fieldname}: More than {numericValue} {minutes|hours|days|weeks} overdue
            navigator.filter.daterange.dueinnext.only.field = {fieldname}: Due in next {numericValue} {minutes|hours|days|weeks}
            navigator.filter.daterange.dueinnext.overdue.field = {fieldname}: Now overdue and due in next {numericValue} {minutes|hours|days|weeks}
            navigator.filter.daterange.datebetween.field = {fieldname}: {startDate} - {endDate}
            navigator.filter.daterange.inrange.field = {fieldname}: From {startRange} from now to {endRange} from now
            

            NOTE: {fieldname} is "Due Date".

            Practical original entries for resource bundle added in TAC are:

            navigator.filter.daterange.duedate.field = Now overdue
            navigator.filter.daterange.morethan.field = More than {0} {1} overdue
            navigator.filter.daterange.dueinnext.only.field = Due in next {0} {1}
            navigator.filter.daterange.dueinnext.overdue.field = Now overdue and due in next {0} {1}
            navigator.filter.daterange.datebetween.field = {0} - {1}
            navigator.filter.daterange.inrange.field = From {0} from now to {1} from now
            

            2. Other dates - Created Date / Resolution Date / Updated Date / Custom field(s)

            navigator.filter.daterange.withinthelast.field = {fieldname}: Within the last {numericValue} {minutes|hours|days|weeks}
            navigator.filter.daterange.morethanago.field = {fieldname}: More than {numericValue} {minutes|hours|days|weeks} ago
            navigator.filter.daterange.datebetween.field = {fieldname}: {startDate} - {endDate}
            navigator.filter.daterange.inrange.field = {fieldname}: From {startRange} from now to {endRange} from now
            

            NOTE: "date between" and "in range" are the same as for due date.

            Practical original entries for resource bundle added in TAC are:

            navigator.filter.daterange.withinthelast.field = Within the last {0} {1}
            navigator.filter.daterange.morethanago.field = More than {0} {1} ago
            navigator.filter.daterange.datebetween.field = {0} - {1}
            navigator.filter.daterange.inrange.field = From {0} from now to {1} from now
            

            Best regards,
            Kan Ogawa

            Kan Ogawa added a comment - - edited Proposal I have simply summarized. These are new i18n keys and entries to add in TAC. However, I don't know that a change of date searchers implementation will be to what extent. 1. Due Date navigator.filter.daterange.duedate.field = {fieldname}: Now overdue navigator.filter.daterange.morethan.field = {fieldname}: More than {numericValue} {minutes|hours|days|weeks} overdue navigator.filter.daterange.dueinnext.only.field = {fieldname}: Due in next {numericValue} {minutes|hours|days|weeks} navigator.filter.daterange.dueinnext.overdue.field = {fieldname}: Now overdue and due in next {numericValue} {minutes|hours|days|weeks} navigator.filter.daterange.datebetween.field = {fieldname}: {startDate} - {endDate} navigator.filter.daterange.inrange.field = {fieldname}: From {startRange} from now to {endRange} from now NOTE: {fieldname} is "Due Date". Practical original entries for resource bundle added in TAC are: navigator.filter.daterange.duedate.field = Now overdue navigator.filter.daterange.morethan.field = More than {0} {1} overdue navigator.filter.daterange.dueinnext.only.field = Due in next {0} {1} navigator.filter.daterange.dueinnext.overdue.field = Now overdue and due in next {0} {1} navigator.filter.daterange.datebetween.field = {0} - {1} navigator.filter.daterange.inrange.field = From {0} from now to {1} from now 2. Other dates - Created Date / Resolution Date / Updated Date / Custom field(s) navigator.filter.daterange.withinthelast.field = {fieldname}: Within the last {numericValue} {minutes|hours|days|weeks} navigator.filter.daterange.morethanago.field = {fieldname}: More than {numericValue} {minutes|hours|days|weeks} ago navigator.filter.daterange.datebetween.field = {fieldname}: {startDate} - {endDate} navigator.filter.daterange.inrange.field = {fieldname}: From {startRange} from now to {endRange} from now NOTE: "date between" and "in range" are the same as for due date. Practical original entries for resource bundle added in TAC are: navigator.filter.daterange.withinthelast.field = Within the last {0} {1} navigator.filter.daterange.morethanago.field = More than {0} {1} ago navigator.filter.daterange.datebetween.field = {0} - {1} navigator.filter.daterange.inrange.field = From {0} from now to {1} from now Best regards, Kan Ogawa

            Kan Ogawa added a comment -

            Hi Jonathon,

            I have created new issues, JRA-30651 and JRA-30652.
            It may be hard to fix them, but it is higher request for satisfying all Japanese customers.

            Best regards,
            Kan Ogawa

            Kan Ogawa added a comment - Hi Jonathon, I have created new issues, JRA-30651 and JRA-30652 . It may be hard to fix them, but it is higher request for satisfying all Japanese customers. Best regards, Kan Ogawa

              rtekhov Roman Tekhov (Inactive)
              jcreenaune Jonathon Creenaune
              Affected customers:
              2 This affects my team
              Watchers:
              6 Start watching this issue

                Created:
                Updated:
                Resolved: