Angular: i18n: рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдмрд╛рд╣рд░ рдЕрдиреБрд╡рд╛рдж рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо

рдХреЛ рдирд┐рд░реНрдорд┐рдд 7 рд╕рд┐рддре░ 2016  ┬╖  204рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: angular/angular

рдореИрдВ рдПрдХ рдЬрдорд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ ... ("x" рдХреЗ рд╕рд╛рде рдПрдХ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ)

[x] feature request

рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░
https://github.com/angular/angular/issues/9104#issuecomment -244909246

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╕реНрдерд┐рд░ рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЬреЗрдПрд╕ рдХреЛрдб рдкрд░ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреЗрд╡рд▓ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕

рдЕрдкреЗрдХреНрд╖рд┐рдд/рд╡рд╛рдВрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░
рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ рднреА рдкреНрд░рдпреБрдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкреБрдирд░реБрддреНрдкрд╛рджрди

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?
рдореИрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП $translate.instant рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗ рд░рд╣рд╛ рд╣реВрдВ:

  • рдХрд╕реНрдЯрдо рд░реЗрдВрдбрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЯреЗрдХреНрд╕реНрдЯ:
if (data._current_results === data._total) {
                content = this.$translate.instant('CLIPPINGS__LIST__SUMMARY_ALL', {'num': data._current_results});
            } else {
                if (undefined === data._total) {
                    data._total = '...';
                }

                content = this.$translate.instant('CLIPPINGS__LIST__SUMMARY', {
                    'num': data._current_results,
                    'total': data._total
                });
            }

            // Put 'mentions' first
            data = angular.merge({}, {
                mentions: mentions
            }, data);

            _.each(data, (value:number, key:string):void => {
                if (value) {
                    details += value + ' ' + this.$translate.instant('CLIPPINGS__LIST__SUMMARY_TYPE_' + key) + ', ';
                }
            });

            if (details) {
                details = '(' + _.trim(details, ', ') + ')';
            }

            content = content.replace(':details', details);

рдФрд░ рдЬреНрдпрд╛рджрд╛ рдЙрджрд╛рд╣рд░рдг:

  • рдПрдХ HTML рдкреНрд░рд╕реНрддреБрдд рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдирд┐рд░реНрдпрд╛рдд рдХреА рдЧрдИ рдЫрд╡рд┐ рд╕реЗ рдЫрд╡рд┐ рдХрд╛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛:
getExportImageName(hideExtension:boolean):string {
        let fileName:string;

        fileName = this.$translate.instant('D_CHART_FACET_authors__EXPORT_FILENAME', {
            'profileName': this.ExportService.GetProfileName(),
            'period': this.ExportService.GetPeriodString(this.SearchFilter.GetPeriodFromInterval())
        });

        if (!Boolean(hideExtension)) {
            fileName += '.png';
        }

        return fileName;
    }
  • рдХрднреА-рдХрднреА рдЖрдк рдЕрдиреБрд╡рд╛рдж рдХрд░ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдХрднреА-рдХрднреА рдореЙрдбрд▓ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдмрд╣реБрдд рд╡рд░реНрдмреЛрдЬрд╝ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ):
private _getTitle():string {
        if (this.inShareColumn) {
            return this.$translate.instant('COMPARISONS__SHARE_COLUMN_share_of_voice_TITLE');
        } else if (this.inTotalsColumn) {
            return this.$translate.instant('COMPARISONS__TOTAL_COLUMN_share_of_voice_TITLE');
        } else {
            return _.get<string>(this.group, 'profileName', '');
        }
    }
  • рдХрд┐рд╕реА рддреГрддреАрдп рдкрдХреНрд╖ рдЪрд╛рд░реНрдЯ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рд╣рд╛рдИрдЪрд╛рд░реНрдЯреНрд╕)
this.chart = new Highcharts.Chart(<any>{
            title: {
                text: this.$translate.instant('REPORTS_BLOG_MAPPING_CHART_TITLE_tone').toUpperCase(),
            },
            xAxis: {
                title: {
                    text: this.$translate.instant('REPORTS_BLOG_MAPPING_CHART_TITLE_tone_xaxis')
                }
            },
            yAxis: {
                min: 0,
                title: {
                    text: this.$translate.instant('REPORTS_BLOG_MAPPING_CHART_TITLE_tone_yaxis')
                }
            },
            plotOptions: {
                scatter: {
                    tooltip: {
                        headerFormat: '<b>{point.key}</b><br>',
                        pointFormat: '{point.y} ' + this.$translate.instant('REPORTS_BLOG_MAPPING_CHART_mentions')
                    }
                }
            }
        });
  • рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЪрд░ рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдФрд░ рдкрд╛рдЗрдк рдХреЗ рдмрд┐рдирд╛ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ
this.config = {
            requiredList: true,
            bannedList: false,
            allowSpaces: false,
            allowComma: false,
            colorsType: false,
            defaultEnterAction: 'required',
            requiredTooltip: this.$translate.instant('D_CLIPPING_TAGS__REQUIRED_TOOLTIP'),
            bannedTooltip: this.$translate.instant('D_CLIPPING_TAGS__BANNED_TOOLTIP')
        };
  • window.title рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП :):
SetWindowTitle(title:string) {
        if (!!title) {
            this.$window.document.title = this.$translate.instant(title);
        }
    }
  • рдХрд╕реНрдЯрдо рджрд┐рдирд╛рдВрдХ рд╕реНрд╡рд░реВрдкрдг:
dateHuman(date:Date):string {
        return date.getDate() + ' ' + this.$translate.instant('GLOBAL_CALENDAR_MONTH_' + date.getMonth())
            + ' ' + date.getFullYear();
    }
  • рдЕрдиреБрд╡рд╛рджрд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВ:
// Sort types
            tmpTypes = _.sortBy(tmpTypes, (type:string):string => {
                // 'MISC' at the end
                if ('MISC' === type) {
                    return 'zzzzz';
                }

                return this.$translate.instant('FACET_phrases2__TYPE_' + type);
            });
GetSortedLanguages():IFacetLangDetectedCommonServiceLanguageObject[] {
        // We have to sort by translated languages!
        return _.sortBy(_.map(this.facetOptions, (item:string):any => {
            return {
                key: item,
                label: this.$translate.instant('FACET_langDetected_' + item),
                cssStyle: (_.includes(['english', 'catalan', 'spanish', 'french', 'italian'], item))
                    ? {'font-weight': 'bold'} : null,
                flag: _.get(this.lutFlags, item, null)
            };
        }), (item):string => {
            return item.label.toLowerCase();
        });
    }
  • рдХрдЪреНрдЪреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕реАрдПрд╕рд╡реА рдпрд╛ рдПрдХреНрд╕реЗрд▓ рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ:
getDataExportStacked(inputData:any):any {
        let exportData = angular.copy(inputData);

        if (angular.isArray(exportData) && exportData.length) {
            exportData[0].name = this.$translate.instant('CLIPPINGS__CHARTS_volume_TITLE');

            exportData[0].data = _.map(exportData[0].data, (inputDataItem:any):any => {
                return {
                    'label': inputDataItem.association.profileName,
                    'value': inputDataItem.value
                };
            });
        }

        return exportData;
    }
  • рдХреЙрдиреНрдлрд┐рдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдерд░реНрдб рдкрд╛рд░реНрдЯреА рдкреНрд▓рдЧрдЗрдиреНрд╕ рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ:
UpdateCalendarStrings():void {
        Highcharts.setOptions({
            lang: {
                months: [
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_January'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_February'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_March'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_April'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_May'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_June'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_July'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_August'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_September'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_October'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_November'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_December')
                ],
                shortMonths: [
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_SHORT_Jan'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_SHORT_Feb'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_SHORT_Mar'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_SHORT_Apr'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_SHORT_May'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_SHORT_Jun'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_SHORT_Jul'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_SHORT_Aug'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_SHORT_Sep'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_SHORT_Oct'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_SHORT_Nov'),
                    this.$translate.instant('GLOBAL_CALENDAR_MONTH_SHORT_Dec')
                ],
                weekdays: [
                    this.$translate.instant('GLOBAL_CALENDAR_DAY_Sunday'),
                    this.$translate.instant('GLOBAL_CALENDAR_DAY_Monday'),
                    this.$translate.instant('GLOBAL_CALENDAR_DAY_Tuesday'),
                    this.$translate.instant('GLOBAL_CALENDAR_DAY_Wednesday'),
                    this.$translate.instant('GLOBAL_CALENDAR_DAY_Thursday'),
                    this.$translate.instant('GLOBAL_CALENDAR_DAY_Friday'),
                    this.$translate.instant('GLOBAL_CALENDAR_DAY_Saturday')
                ]
            }
        });
    }


рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рдгрд╛/рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдХреНрдпрд╛ рд╣реИ?
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдмрд╛рд╣рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВред

рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдПрдВ:

  • рдХреЛрдгреАрдп рд╕рдВрд╕реНрдХрд░рдг: 2.0.0-rc.6
  • рдмреНрд░рд╛рдЙрдЬрд╝рд░: [рд╕рднреА]
  • рднрд╛рд╖рд╛: [рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 2.0.2 | ES5 | рд╕рд┐рд╕реНрдЯрдордЬреЗрдПрд╕]

@vicb

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╢реЛрд╕реНрдЯреЙрдкрд░ рд╣реИ, i18n рдЗрд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рддрдХ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореИрдВ рдХреЛрдб рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╕рддреНрдпрд╛рдкрди рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВ

рд╕рднреА 204 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╢реЛрд╕реНрдЯреЙрдкрд░ рд╣реИ, i18n рдЗрд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рддрдХ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореИрдВ рдХреЛрдб рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╕рддреНрдпрд╛рдкрди рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВ

@ рдореИрдЯреНрд╕ 83 рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХреА?

<p [hidden]="!alertManagerRowForm.controls.sendTo.hasError('validateEmail')" class="help-error">
    {{ 'ALERTMANAGER__FORM__FIELD__sendTo__ERROR__validateEmail' | translate }}
</p>

:confused: рдкреНрд░рд▓реЗрдЦрди рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рд╣реЛрдирд╛ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рдЕрдиреБрд╡рд╛рдж рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдХреБрдЫ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдЪрд╛рд░ рдХреА рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@marcalj рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬрд╛рдирддрд╛ рд╣реВрдВ ... рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрдкрдиреА рдЯреАрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
@manklu рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдБ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╢реЛрд╕реНрдЯреЙрдкрд░ рд╣реИ, i18n рдЗрд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рддрдХ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореИрдВ рдХреЛрдб рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╕рддреНрдпрд╛рдкрди рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВ

рд╣рд╛рдБ рдпрд╣рд╛рдБ рднреА, рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА ng2-translate рд╕реЗ Angular2 i18n рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ OOTB рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдБ, рдФрд░ рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ (ng2-translate IMO рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ)
рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдореИрдВ рдЕрдкрдиреА рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ рдЙрдард╛рдП рдЧрдП рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдХреЛрдИ рдЙрдкрд╛рдп рднреА рдирд╣реАрдВред

рдЕрдЧрд░ рдХреЛрдИ рдбрд┐рдЬрд╝рд╛рдЗрди рд╕реНрдкреЗрдХ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ (рдпрд╛рдиреА Google рдбреЙрдХреНрд╕ рдкрд░)ред

рдЗрд╕реЗ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд▓реНрджреА рд╕реЗ рд╕реЛрдЪрдиреЗ рдкрд░, рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ

_.('static text');
_.('with {{ parameter }}', {parameter: "parameter" });
_.plural(count, {'few': '...'});
_.select(on, {'value': '...'});

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ, рдмрдврд╝рд┐рдпрд╛ рдлреАрдЪрд░ рдЕрдиреБрд░реЛрдз: +1:

рдХреНрдпрд╛ *.ts рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

@fbobbio рдореИрдВ рдЬреЛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЫрд┐рдкреЗ рд╣реБрдП рддрддреНрд╡ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ, рдЙрджрд╛ред
<span class="translation" #trans-foo i18n>foo</span> ред

рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рдВрдзреЗрдВ:
@ViewChild('trans-foo) transFoo : ElementRef; ред

рдлрд┐рд░ рдЕрдиреБрд╡рд╛рджрд┐рдд рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
transFoo.nativeElement.textContent ред

рдордВрджрдмреБрджреНрдзрд┐ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ ng-xi18n рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреВрд░реЗ TS-рдХреЛрдб рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВ рди @i18n() (рд╕реНрдЯреНрд░рд┐рдВрдЧ-) рдкреНрд░реЙрдкрд░реНрдЯреАрдЬ рдЬреИрд╕реЗ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП? рдлрд┐рд░ рдЗрдиреНрд╣реЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдорд╛рди рд╕реЗ рднрд░рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ @Input() рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХрддрд░рдлрд╛ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдЕрдЕрдиреБрд╡рд╛рджрд┐рдд рдорд╛рди рдХреЛ рдХреЛрдб рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд╣реАрдВ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЗрд╕ рддрд░рд╣ рддрд░реНрдХ рдореЗрдВ рд░рдЦреЗрдВ:

@i18n( {
  source : 'Untranslated value',
  description: 'Some details for the translator'
} )
public set translatedProperty( value : string ) {
   this._translatedProperty = value;
}

рдФрд░ рдЬрдм рдХреЛрдИ рдЕрдиреБрд╡рд╛рдж рд▓рдХреНрд╖реНрдп рди рд╣реЛ рддреЛ рд╕реНрд░реЛрдд рдХреЛ рдкреНрд░реЙрдкрд░реНрдЯреА рдореЗрдВ рдлреАрдб рдХрд░реЗрдВред

рдпрд╣ рд╕рдВрдкреВрд░реНрдг рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдЪрдХреНрд░, IMO рдореЗрдВ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рд╡рд╕реНрддреБ рд╣реИред

рдореЗрд░реА рджреБрдХрд╛рди рдореЗрдВ, рд╣рдо рдПрдХ "ng-xi18n - like" рдЯреВрд▓ (xgettext рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди) рдХреЗ рдЖрджреА рд╣реИрдВ, рдЬреЛ рдЕрдиреБрд╡рд╛рджрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдХреНрд╢рдирд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд┐рд╣реНрдирд┐рдд рдЯреЗрдХреНрд╕реНрдЯ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреНрд░реЙрд▓ рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ HTML рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рд╕рд╛рдл рдФрд░ рдЖрд╕рд╛рди i18n рдорд╛рд░реНрдХрдЕрдк рдкрд╕рдВрдж рд╣реИ, рдФрд░ рдореИрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЗ рд▓рд┐рдП рднреА рдпрд╣реА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ред

@vicb рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдореИрдВ рдЯреАрдПрд╕ рдХреЛрдб рдореЗрдВ рдЗрдВрдЯрд░рдкреЛрд▓реЗрдЯреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕реЗ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреАрдПрд╕ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдПрдХ рд╡реИрдз рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реЛрдЧрд╛?

рдпрд╣ рдкреНрд░рд╛рдердорд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдПрдВрдЧреБрд▓рд░ 2 рдСрдлрд╝рд░ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯ-рдСрдл-рдж-рдмреЙрдХреНрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддреА рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдШрдЯрдХ рд╣реИрдВ рдЬрд┐рдирдХреА рдХреБрдВрдЬрд┐рдпрд╛рдБ рдХреБрдЫ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕реЗ рдЖрддреА рд╣реИрдВ рдЬреЛ HTML рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдЙрдкрд▓рдмреНрдз рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЗ рд╡рд┐рд░реБрджреНрдз рдкрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрди рдШрдЯрдХреЛрдВ рдХреЛ рдЙрдЪрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рдмреАрдЪ, рд╣рдо рдЗрд╕ рд╕реАрдорд╛ рдХреЗ рдХрд╛рд░рдг рдПрдирдЬреА-рдЯреНрд░рд╛рдВрд╕рд▓реЗрдЯ рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рддрдХ рд╕реАрдорд┐рдд рд╣реИрдВред

рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдореЗрд░реЗ рдкреВрд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реЗрд╡рд╛ рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА 'рд▓реИрдВрдЧ' рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝рдХрд░ рд╣реИред рдореИрдВ рдлрд┐рд░ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ div рдореЗрдВ рд╕рднреА рдЕрд╡рдзрд┐ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдорд╛рди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЕрдкрдиреА рд╕рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХ рдЫрд┐рдкреА рд╣реБрдИ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдкреГрд╖реНрда рдХреЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд░рдЦрддрд╛ рд╣реВрдВред рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрдм рдЯреЗрдореНрдкрд▓реЗрдЯ рдпрд╛ рдШрдЯрдХ рд╕реЗ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рд╣реЛрддреА рд╣реИред рдпрд╣ рдмрджрд╕реВрд░рдд рд╣реИ рдФрд░ рдЖрдк рдПрдХ рд╣реА рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рддреЛ рдХреБрдЫ рднреА рдирд╣реАрдВред

рд╕реЗрд╡рд╛

@Injectable()
export class AppService {

    //Language string object.
    private _lang:Object = new Object();
    get lang():Object {
        return this._lang;
    }
}

рдирд┐рд░реНрджреЗрд╢рдХ

@Directive({
    selector: '[lang]'
})
export class LangDirective implements OnInit {

    constructor(
        public element: ElementRef,
        public app: AppService) {
    }

    ngOnInit() {
        let ele = this.element.nativeElement;
        for (var i = 0; i < ele.children.length; i++) {
            let id = ele.children[i].getAttribute('id');
            let value = ele.children[i].innerHTML;
            this.app.lang[id]=value;
        }
    }
}

рдЦрд╛рдХрд╛

<button>{{app.lang.myButtonText}}</button>
<div lang hidden >
    <span id="myButtonText" i18n="Test Button">Testing</span>
</div>

рдирдорд╕реНрддреЗ @lvlbmeunier

рдЬрдм рддрдХ рд╣рдо рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддрдм рддрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реБрдЭрд╛рд╡ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЧрддрд┐рд╢реАрд▓ рдЕрдиреБрд╡рд╛рдж рдХреБрдВрдЬрд┐рдпрд╛рдБ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИрдВред рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛:

<p *ngFor="let d of dataEntry">{{app.lang[d.name]}}</p>
<div lang hidden >
<span id="{{d.name}}" *ngFor="let d of dataEntry" i18n>{{d.name}}</span>
</div>

рд╡реЗ рдирдИ рдХреБрдВрдЬрд┐рдпрд╛рдБ рдореЗрд░реА xliff рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВред рдХреНрдпрд╛ рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рд╕реЗ рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рдореИрдВрдиреЗ рдХрднреА рдЗрд╕рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд▓реЗрдХрд┐рди рдореИрдВ рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд╣реВрдВ рдХрд┐ xliff рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреЛрдб рдирд╣реАрдВ рдЪрд▓рд╛рддрд╛ рд╣реИред i18n рдореЗрдВ рдбрд╛рдпрдирд╛рдорд┐рдХ рд╡реИрд▓реНрдпреВ рд╣реЛрдирд╛ рдХреЙрдиреНрд╕реЗрдкреНрдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрди рд╕рднреА рдирд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреА рд╕реВрдЪреА рдореЗрдВ рд╣реЛрдВрдЧреЗ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╕рднреА рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рд▓реВрдк рдореЗрдВред

рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЭреЗ рдПрдкреАрдЖрдИ рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рд╕реИрдХрдбрд╝реЛрдВ рдЯреЗрдХреНрд╕реНрдЯ рдХреБрдВрдЬрд┐рдпрд╛рдБ рдорд┐рд▓рддреА рд╣реИрдВред

рдЖрдк рдЕрдкрдирд╛ рдХреЛрдб рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрд░реЛрдд рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред X18n рдлрд╝рд╛рдЗрд▓ рдХреА рдкреАрдврд╝реА рд╕реНрдерд┐рд░ рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред

4.0.0-beta рдХреЗ рд╕рд╛рде рдЖрдк i18n рдХреЛ рдПрдХ рдЖрдИрдбреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП mainTitle:

<span i18n="title@@mainTitle">

рдЗрд╕рдХреЗ рд╕рд╛рде, рд╣рдо рдХрдо рд╕реЗ рдХрдо рдЬреЗрдЖрдИрдЯреА рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рд╕рднреА "рдЕрддрд┐рд░рд┐рдХреНрдд" рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдбрдореА рдШрдЯрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕реЗ рдРрдк рдПрдЪрдЯреАрдПрдордПрд▓, рдХреЗрд╡рд▓ рдРрдк рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)ред

рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рд╣рдо рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЛ рди рдХреЗрд╡рд▓ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдмрд▓реНрдХрд┐ рдРрдк рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рднреА рдЬреЛрдбрд╝реЗрдВрдЧреЗ:

// bootstrap.ts
getTranslationProviders().then(providers => {
    const options = { providers };
    // here we pass "options.providers" to "platformBrowserDynamic" as extra providers.
    // otherwise when we inject the token TRANSLATIONS it will be empty. The second argument of
   // "bootstrapModule" will assign the providers to the compiler and not our AppModule
    platformBrowserDynamic(<Provider[]>options.providers).bootstrapModule(AppModule, options);
});

рдлрд┐рд░ рд╣рдо рдЕрдкрдиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрдореА рдШрдЯрдХ рдмрдирд╛рдПрдВрдЧреЗ, рдШрдЯрдХ рдХреЛ declarations рдХреЗ AppModule #$4$#$ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рддрд╛рдХрд┐ ng-xi18n рдПрдЪрдЯреАрдПрдордПрд▓ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ) рдвреВрдВрдв рд╕рдХреЗ рдФрд░ рдЗрд╕реЗ рдЕрдиреБрд╡рд╛рдж рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХреЗред

//tmpI18N.ts
import {Component} from '@angular/core';

@Component({
    selector: 'tmpI18NComponent',
    moduleId: module.id,
    templateUrl: 'tmp.i18n.html'
})
export class TmpI18NComponent {
}

рд╣рдорд╛рд░реЗ рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЛ tmp.i18n.html рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

<!-- tmp.i18n.html -->
<span i18n="test@@mainTitle">
    test {{something}}
</span>

рдЕрдм рд╣рдо рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рд╣рдо рдЕрдкрдиреЗ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

import {Injectable, Inject, TRANSLATIONS} from '@angular/core';
import {I18NHtmlParser, HtmlParser, Xliff} from '@angular/compiler';

@Injectable()
export class I18NService {
    private _source: string;
    private _translations: {[name: string]: any};

    constructor(
        @Inject(TRANSLATIONS) source: string
    ) {
        let xliff = new Xliff();
        this._source = source;
        this._translations = xliff.load(this._source, '');
    }

    get(key: string, interpolation: any[] = []) {
        let parser = new I18NHtmlParser(new HtmlParser(), this._source);
        let placeholders = this._getPlaceholders(this._translations[key]);
        let parseTree = parser.parse(`<div i18n="@@${key}">content ${this._wrapPlaceholders(placeholders).join(' ')}</div>`, 'someI18NUrl');

        return this._interpolate(parseTree.rootNodes[0]['children'][0].value, this._interpolationWithName(placeholders, interpolation));
    }

    private _getPlaceholders(nodes: any[]): string[] {
        return nodes
            .filter((node) => node.hasOwnProperty('name'))
            .map((node) => `${node.name}`);
    }

    private _wrapPlaceholders(placeholders: string[]): string[] {
        return placeholders
            .map((node) => `{{${node}}}`);
    }

    private _interpolationWithName(placeholders: string[], interpolation: any[]): {[name: string]: any} {
        let asObj = {};

        placeholders.forEach((name, index) => {
            asObj[name] = interpolation[index];
        });

        return asObj;
    }

    private _interpolate(pattern: string, interpolation: {[name: string]: any}) {
        let compiled = '';
        compiled += pattern.replace(/{{(\w+)}}/g, function (match, key) {
            if (interpolation[key] && typeof interpolation[key] === 'string') {
                match = match.replace(`{{${key}}}`, interpolation[key]);
            }
            return match;
        });

        return compiled;
    }
}

рдЕрдм рд╣рдо рдХреБрдЫ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

export class AppComponent {

    constructor(i18nService: I18NService) {
        // Here we pass value that should be interpolated in our tmp template as a array and 
        // not an object. This is due to the fact that interpolation in the translation files (xlf for instance)
        // are not named. They will have names such as `<x id="INTERPOLATION"/>
        // <x id="INTERPOLATION_1"/>`. And so on.
        console.log(i18nService.get('mainTitle', ['magic']));
    }
}

рдпрд╣ рдПрдХ рд╣реИрдХреА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИред рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рд╣рдо рдЕрдиреБрд╡рд╛рдж рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрдВрдЯрд░рдкреЛрд▓реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЫреБрдкрд╛ рдПрдЪрдЯреАрдПрдордПрд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдиреЛрдЯ: 4.0.0-рдмреАрдЯрд╛ рдХреЗ рд╡рд░реНрддрдорд╛рди @angular/compiler-cli NPM рдкреИрдХреЗрдЬ рдореЗрдВ @angular/tsc-wrapped рдХрд╛ рдПрдХ рдЧрд▓рдд рдирд┐рд░реНрднрд░рддрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рдпрд╣ 0.4.2 рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ рдпрд╣ 0.5.0 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред @vicb рдХреНрдпрд╛ рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рддрдп рд╣реЛ рдЧрдпрд╛ рд╣реИ? рдпрд╛ рд╣рдореЗрдВ рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

@fredrikredflag рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдФрд░ рдПрдУрдЯреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

@ghidoz AOT рдПрдХ рдФрд░ рдХрд╣рд╛рдиреА рд╣реИред рд╣рдо рдЬреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рд╕рднреА рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЛ рдкреВрд░реНрд╡-рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ ngc рд╕рднреА i18n рдХреЛ рд╕рд╣реА рдЕрдиреБрд╡рд╛рдж рд╕реЗ рдмрджрд▓ рджреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕рдХрд╛ рд▓рд╛рдн рдирд╣реАрдВ рдЙрдард╛ рд╕рдХрддреЗред ngc рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдП рдЧрдП рдЕрдиреБрд╡рд╛рджреЛрдВ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рдЦреБрд▓рд╛ рд╡рд┐рдХрд▓реНрдк/рдЧреБрдг рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред рд╣рдо рдПрдХреНрд╕рдПрд▓рдЯреА рдлрд╝рд╛рдЗрд▓ рд▓рд╛рдХрд░ рдЬреЗрдЖрдИрдЯреА рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдЧрддрд┐рд╢реАрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЕрднреА рднреА рдЗрд╕реЗ TRANSLATION рдЯреЛрдХрди рдкрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдУрдЯреА рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛рддрд╛ рд╣реИред

рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдбрдХреНрд╢рди рдРрдк рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рди рдХрд░реЗрдВ ред

/// bootstrap.aot.ts
function fetchLocale() {
    const locale = 'sv';
    const noProviders: Object[] = [];

    const translationFile = `./assets/locale/messages.${locale}.xlf`;
    return window['fetch'](translationFile)
        .then(resp => resp.text())
        .then( (translations: string ) => [
            { provide: TRANSLATIONS, useValue: translations },
            { provide: TRANSLATIONS_FORMAT, useValue: 'xlf' },
            { provide: LOCALE_ID, useValue: locale }
        ])
        .catch(() => noProviders);
}

fetchLocale().then(providers => {
    const options = { providers };
    platformBrowser(<Provider[]>options.providers).bootstrapModuleFactory(AppModuleNgFactory);
});

рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕реЛрдЪ:

@Component()
class MyComp {
  // description, meaning and id are constants
  monday = __('Monday', {description?, meaning?, id?});
}
  • рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рдбреАрдУрдПрдо рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХреЗ, рд╣рдо рд░рдирдЯрд╛рдЗрдо рдЕрдиреБрд╡рд╛рдж рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдмрд╛рдЗрдирд░реА рдХрд╛ рдПрдХ рд╣реА рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдЧрд╛ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рд╣реЛрдЧрд╛,
  • рд╣рдо рд╕реНрдерд┐рд░ рдЕрдиреБрд╡рд╛рджреЛрдВ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЖрдЬ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ - рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдмреЗрд╣рддрд░ perf рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐ рд▓реЛрдХреЗрд▓ рдРрдк рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг,
  • рд╣рдо рд╢рд╛рдпрдж рдмрд╛рдж рдореЗрдВ рдХрд┐рд╕реА рд╕рдордп рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ __(...) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ,
  • рдЗрд╕реЗ 2.3 рд╕реЗ рдЙрдкрд▓рдмреНрдз рдЯреАрдПрд╕ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

/рд╕реАрд╕реА @ocombe

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ __() рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрднреА рддрдХ рдХреЛрдИ рдирд╛рдо рдирд╣реАрдВ рд╣реИ (рдФрд░ рд╡рд┐рдзрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ __ рдирд╣реАрдВ рд╣реЛрдЧреА, рд╣реИ рдирд╛?)

рд╕реНрдерд┐рд░ рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

рдирд╣реАрдВ __() рдирд╛рдо рд╣реИ, рдХреНрдпрд╛ рдЖрдкрдХреЛ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ :)

рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЕрдиреБрд╡рд╛рдж рдврд╛рдВрдЪреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдХреЛрдИ рдЕрдиреНрдп рдирд╛рдо рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк import {__ as olivier} from '@angular/core' рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ!

eeeeeeh рдпрд╣ рдмрд╣реБрдд рдЖрддреНрдо рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИ :D
рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдирд┐рдЬреА рд╕рдорд╛рд░реЛрд╣ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ

рдореБрдЭреЗ ___ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ :) рдореИрдВрдиреЗ рдХрд▓реНрдкрдирд╛ рдХреА рдереА рдХрд┐ рдпрд╣ рдПрдХ рд╕реЗрд╡рд╛ рд╣реЛрдЧреА?
рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ, рдкреНрд░рдЧрддрд┐ рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ

рдореБрдЭреЗ рдкрд╕рдВрдж __()! :D рдмрд╣реБрдд gettext-y рдФрд░ рдпрд╣ рдЫреЛрдЯрд╛ рд╣реИред

JS рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ @ocombes ng2-translate рдХрд╛ рдЕрдиреБрднрд╡ рд╣реИ, рдЬрд╣рд╛рдВ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рднреА рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рд╣реИред

рдЖрдкрдХреЛ ng2 рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ __ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИ :)

рдЕрд╕рд▓ рдореЗрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдбреАрдЖрдИ рд╕реЗрд╡рд╛ рд╡рд┐рдзрд┐ рдХреЛ рдХреИрд╕реЗ рд▓рдкреЗрдЯрдирд╛ рд╣реИ - рд╡реИрд╕реЗ рднреА, рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ, рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ :-) рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА __ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ +1 рдереА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк ' рдХрдо рд╕реЗ рдХрдо PHP рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдХрднреА рднреА рдЕрдиреНрдп рдЕрдиреБрд╡рд╛рдж рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред

рдареАрдХ рд╣реИ, рд╢рд╛рдпрдж ___ рдареАрдХ рд╣реИ, "this.translationService.getTranslation ()" рд╕реЗ рдмреЗрд╣рддрд░, рдмрд╣реБрдд рдЫреЛрдЯрд╛ред
рдФрд░ рд╣рд╛рдБ рдЕрдЧрд░ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

$#$ __(...) $#$ рдХреЗ рдмрдЬрд╛рдп i18n(...) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдХреГрдкрдпрд╛ рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣рд╕ рдмрдВрдж рдХрд░реЛ, рд╡рд╣ рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рдзрдиреНрдпрд╡рд╛рджред

@vicb monday = __('Monday', {description: 'First day of the week', id: 'firstDatOfWeek'}); рдХреЗ рд╕рд╛рде рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдпрд╛рдиреА:

__('@<strong i="8">@firstDatOfWeek</strong>') // Monday

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ Monday рдЙрд╕ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдХрд╣реАрдВ рд╕реЗ рднреА рд╣рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛? рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрд╡рд╛рджреЛрдВ рдЬреИрд╕реЗ "рдХрд░реАрдм", "рдЦреБрд▓рд╛" рдЗрддреНрдпрд╛рджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВред

рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдордХрд╛рдЬ рдХреНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд▓реЛрдЧ рдПрдУрдЯреА рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░рд┐рд▓реАрдЬ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рди рдХрд░реЗ?

рд╕рд╛рджрд░,
рд╢реЙрди

рдХреЛрдгреАрдп 2 рд░рд╕реЛрдИ рд╕рд┐рдВрдХ: http://ng2.javascriptninja.io
рдФрд░ рд╕реНрд░реЛрдд@ https://github.com/born2net/Angular-kitchen-sink

@vicb рдХреЛрдИ рдЦрдмрд░, рд╡рд╣рд╛рдБ рдкрд░ ^

рдЬрдм рддрдХ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреА, рдореИрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЕрдиреБрд╡рд╛рдж рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

import {Component, Input, OnInit} from '@angular/core';

@Component({
    selector: 'app-sandbox',
    templateUrl: 'sandbox.html'
})
export class SandboxComponent implements OnInit {
    @Input()
    public title: string;

    constructor() {
    }

    ngOnInit() {
        console.log('Translated title ', this.title);
    }
}

рдореВрд▓ рдШрдЯрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ:

<app-sandbox i18n-title title="Sandbox"></app-sandbox>

рдпрд╣ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рддрдХ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд╛рдл рд╣реИред рдпрд╣ рдЖрдкрдХреЛ $#$ ts $#$ рдХреЗ рднреАрддрд░ рдЕрдиреБрд╡рд╛рджрд┐рдд title рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд▓реНрдж рд╣реА рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВ :-)

рдпрд╣ рд╕рдмрд╕реЗ рдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрдЧреА

рдпрд╣ рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж @ocombe ред

рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдпрд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз рд╣реИ: https://goo.gl/jQ6tQf
рдХрд┐рд╕реА рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдзрдиреНрдпрд╡рд╛рджред

рдореАрдард╛, рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдкрдврд╝ рд░рд╣рд╛ рд╣реЛрдЧрд╛!

рдзрдиреНрдпрд╡рд╛рдж @ocombe

рдореИрдВрдиреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрдврд╝рд╛ рд╣реИред рд╕реБрдВрджрд░ рд╕рд╛рд░рд╛рдВрд╢ред

рдЯреАрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд┐рдХрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдВрдЧреБрд▓рд░ 4 рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдкрдЧреНрд░реЗрдб рдХрдм рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╣реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╕реАрдорд╛ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд▓реЛрдЧ рдХрдо рд╕реЗ рдХрдо 3/6 рдФрд░ рдорд╣реАрдиреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред

рдореИрдВ рдЕрднреА рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рдЬреЛ рдореЗрд░реЗ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ngx-translate рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдореИрдВ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдгреАрдп i18n рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВред

рд╕рдм рдХреБрдЫ i18n рдореЗрдВ рдорд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдХреЛрдгреАрдп рдврд╛рдВрдЪреЗ рдореЗрдВ i18n рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рд░рд▓реАрдХрд░рдг рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрдпрд╛ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдПрдирдЬреАрдПрдХреНрд╕-рдЕрдиреБрд╡рд╛рдж рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ?

рдЕрднреА рдореЗрд░реА рд╕рдордЭ рд╕реЗ, рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рд╕реЗ рддрд╛рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рдмреЛрдирд╕ рд╣реЛрдЧрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рдмрдбрд╝реА рд╕реАрдорд╛ рдЕрднреА рдмрд╣реБрд╡рдЪрди рд╣реИ, рдХреГрдкрдпрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЬрдм рдЖрдк рд╕рдВрдкреВрд░реНрдг рдЕрдкрдЧреНрд░реЗрдб рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ i18n рд╕рдВрдмрдВрдзрд┐рдд рдЯрд┐рдХрдЯ рдкрдврд╝реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ xliff рдФрд░ xmb рджреЛрдиреЛрдВ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рдкрд╛рдПрдВрдЧреЗред рдпрд╣ рдПрдХ рдФрд░ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдПрдХ рдХрд╛рдордХрд╛рдЬреА рд╕рдорд╛рдзрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдирдЬреАрдПрдХреНрд╕-рдЕрдиреБрд╡рд╛рдж рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

@ocombe рд╡рд┐рд╕реНрддреГрдд рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдбрд┐рдЬрд╝рд╛рдЗрди рдЙрди рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдПрдХ рдкреНрд░рд╢реНрди: рдЬреЗрдЖрдИрдЯреА рдореЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдИ18рдПрди рд╕реЗрд╡рд╛ рдХреА рдбрд┐рдЬрд╛рдЗрди рд╡рд╛рд░реНрддрд╛, рдФрд░ рдПрдУрдЯреА рдореЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреАрдПрд╕ 2.2.рдПрдХреНрд╕ рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ред рдХреНрдпрд╛ рдореИрдВ рдпрд╣ рдорд╛рдирдиреЗ рдореЗрдВ рд╕рд╣реА рд╣реВрдВ рдХрд┐ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рдХреЙрд▓ рдХреЛ рд╕реЗрд╡рд╛ рдкрджреНрдзрддрд┐ рдореЗрдВ рд╕реНрдерд┐рд░ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрдЧрд╛, рдФрд░ I18N рд╕реЗрд╡рд╛ рдХреЗ рд╕рднреА рд╢реЗрд╖ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рднреА рд╣рдЯрд╛ рджреЗрдЧрд╛?

@ рдереЙрдорд╕ рдПрдВрдЧреБрд▓рд░ 4 рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 2.1 (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдВрдЧреБрд▓рд░ 2 рдпрд╛ 4 рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 2.2.1) рдХреЗ рдХрд┐рд╕реА рднреА рд╣рд╛рд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдирдЬреАрдПрдХреНрд╕-рдЕрдиреБрд╡рд╛рдж рдкрд░ рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдУрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рдЖрдк AOT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдПрдХ рд▓рд╛рдн рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рд╢рд╛рдпрдж рдЕрдВрддрд░ рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗред рдЬреЗрдЖрдИрдЯреА (рдХреЛрдИ рдПрдУрдЯреА) рдореЗрдВ рдХреЛрдИ рд▓рд╛рдн рдирд╣реАрдВ рд╣реЛрдЧрд╛ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк get рджреЗрдЦрдиреЗ рдпреЛрдЧреНрдп рдпрд╛ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ instant рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд▓рд╛рдЧрдд рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ)ред
рдореИрдВ рдпрд╣рд╛рдВ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ i18n рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрджрд┐ рд╣рдо рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдпрджрд┐ рдЖрдк Angular i18n (AOT рдФрд░ JIT рдореЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреГрд╢реНрдпрдорд╛рди рд▓рд╛рдн рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЬрд┐рддрдиреЗ рдЕрдзрд┐рдХ рдЕрдиреБрд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЖрдкрдХреЛ рдЙрддрдирд╛ рд╣реА рдЕрдзрд┐рдХ рд▓рд╛рдн рд╣реЛрдЧрд╛ред

рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реВрдБрдЧрд╛ рдХрд┐ рдмрд╣реБрд╡рдЪрди рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЕрднреА рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ?

@schmuli рдХреЗрд╡рд▓ рддрднреА рдЬрдм рдЖрдк рдПрдУрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреЛрдгреАрдп рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реЗрд╡рд╛ рдХреЙрд▓ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рд╕рдорд╛рди рд░рд╣реЗрдВрдЧреАред
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдПрдУрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕рд░реНрд╡рд┐рд╕ рдХреЙрд▓ рдХреЛ рдПрдХ рд╕реНрдерд┐рд░ рдЕрдиреБрд╡рд╛рдж рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдХреЗрд╡рд▓ рд╡реЗ рдЪрд░ рдЬреЛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╡реЗ рдЧрддрд┐рд╢реАрд▓ рд░рд╣реЗрдВрдЧреЗ)ред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо I18n рд╕реЗрд╡рд╛ рдХреЗ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╕рдВрднрд╡ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдПрдХ рдореБрджреНрджрд╛ рд╣реЛрдЧрд╛?

@ocombe рдореИрдВ рдПрдХ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рдЬрд╣рд╛рдВ рдХреЛрдб рдЫреЛрдбрд╝рдирд╛ рдПрдХ рдореБрджреНрджрд╛ рд╣реЛрдЧрд╛, рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреАрдЖрдИ рдЗрдВрдЬреЗрдХреНрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рди рдХрд░реЗрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдХреНрдпрд╛ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореБрджреНрджрд╛ рд╣реИ?)

рдЖрдкрдиреЗ рдЬреЛ рд▓рд┐рдЦрд╛ рд╣реИ рдЙрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХреЛрдб рдХреЛ рдмрджрд▓рдХрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкреЗрд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдХреЛрдб рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рд╢рд╛рдпрдж рдмреЗрд╣рддрд░ рд╣реИред

рд╢рд╛рдпрдж рдПрдУрдЯреА рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд▓реЛрдХреЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЙрд╕ рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рд░реНрд╡рд░ рд╣реИ рдЬреЛ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рд▓реМрдЯрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди рд▓реЛрдХреЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдк рд╣рдореЗрд╢рд╛ рдПрдХ рдбрдореА рдЕрдиреБрд╡рд╛рджрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдХрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@ diego0020 рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЛрдХреЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╕ рдХреЛрд░ рд╕реЗ LOCALE_ID рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВ

@ocombe рдмрд╣реБрд╡рдЪрди xliff рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ Google рдХреЗ рдмрд╛рд╣рд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕реБрд░рд╛рдЧ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ xmb рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣ рднреА рджреЗрдЦреЗрдВ: https://github.com/angular/angular/issues/13780

рд╡реИрд╕реЗ рднреА, рд╣рдорд╛рд░реЗ i18n рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЕрднреА рдХреБрдЫ рднреА рдирд╣реАрдВ рд░реЛрдХ рд░рд╣рд╛ рд╣реИ ngx-translate рдПрдХ рдмрд╣реБрд╡рдЪрди рдкрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдЕрднреА рдХреЗ рд▓рд┐рдП рдХрд░реЗрдЧрд╛ред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ NG4 рдореЗрдВ рд╕рдм рдХреБрдЫ рдмреЗрд╣рддрд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕реБрдзрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░реЗрдЧрд╛ред рдзрдиреНрдпрд╡рд╛рджред

@ рдереЙрдорд╕ рдЖрдИрд╕реАрдпреВ xliff рдХреЗ рд╕рд╛рде рдЬрд▓реНрдж рд╣реА рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: https://github.com/angular/angular/pull/15068 рдФрд░ рдпрджрд┐ рдЖрдк рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдпрд╣ рдбреЙрдХреНрд╕ рдореЗрдВ рд╣реИ: https://angular.io/docs/ ts/рдирд╡реАрдирддрдо/рдХреБрдХрдмреБрдХ/i18n.html#! #рдХрд╛рд░реНрдбрд┐рдирд╛рд▓рд┐рдЯреА

рдХреГрдкрдпрд╛ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдХреНрдпрд╛ рдХреЛрдИ рдИрдЯреАрдП рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рд╕реБрдирд╛ рд╣реИ рдХрд┐ рдпрд╣ ng4.0.0 рд░рд┐рд▓реАрдЬ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рдирд╣реАрдВ! рдзрдиреНрдпрд╡рд╛рдж

рд╕реАрд╕реА @ocombe

рд╣рдо рдЕрднреА рднреА рдбрд┐рдЬрд╛рдЗрди рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕реА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЪреАрдЬреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реИ (рдЬреИрд╕реЗ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреИрд╕реЗ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ), ...
4.2 рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред

рдареАрдХ рд╣реИ рдзрдиреНрдпрд╡рд╛рдж @ocombe , рдореЗрд░реЗ рдкрд╛рд╕ рдХреГрдкрдпрд╛ рджреЛ рдкреНрд░рд╢реНрди рд╣реИрдВ:

  1. рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣рдо рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреИрд╕реЗ:
    <span i18n>This is {{myValue}}</span>
  1. рдореИрдВ рдкреВрдЫрддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреНрдпреЛрдВ рдорд┐рд▓рддреА рд╣реИ:
    Could not mark an element as translatable inside a translatable section

@istiti

  1. рд╣рд╛рдБ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  2. рдЖрдкрдХреЛ рдЕрдкрдиреЗ i18n рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рд╕реАрдзреЗ рдЙрд╕ рддрддреНрд╡ рдкрд░ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдкрд╛рда рд╣реЛ, рди рдХрд┐ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рдИ-рдмрд╣рдиреЛрдВ рдкрд░ред
    рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
    <div i18n><span i18n>my text</span></div> - рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ
    <div><span i18n>my text</span></div> - рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ

@royiHalp
рдзрдиреНрдпрд╡рд╛рдж

  1. рдареАрдХ рд╣реИ рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди рдХреЗ рд╕рд╛рде рдЕрдиреБрд╡рд╛рдж рдХреИрд╕реЗ рдХрд░реЗрдВ?
  2. рдЬрдм рдПрдирдЬреАрд╕реА рдирд┐рдХрд╛рд▓реЗрдВ рддреЛ рдореБрдЭреЗ рдлрд╝рд╛рдЗрд▓ рдФрд░ рд▓рд╛рдЗрди рдФрд░ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ i18n рдЕрдиреНрдп i18n рдХреЗ рдЕрдВрджрд░ рд▓рдкреЗрдЯрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ
    рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╡рд╛рдХрдИ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдореЗрдВ рд╕реЗ рдХрд┐рд╕рдХреЗ рдкрд╛рд╕ рдЧрд▓рддреА рд╕реЗ i18n рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ

@istiti

  1. рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рддрддреНрд╡ рдХреА рддрд░рд╣ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдЖрдкрдиреЗ рдХрд┐рдпрд╛ рдерд╛ i18n рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝реЗрдВ:
    <span i18n>This is {{myValue}}</span>
    Messages.xlf рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛:
    <source>This is <x id="INTERPOLATION"/></source>
    рдЕрдм рдЬрдм рдЖрдк рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рд╡рд╛рдХреНрдп рдореЗрдВ <x id="INTERPOLATION"/> рдХреЛ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рджреВрд╕рд░реЛрдВ рдХреЛ рдЖрдкрдХрд╛ рдЕрд░реНрде рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХреЗ, рдЖрдк рдЗрд╕ рддрд░рд╣ i18n рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
  1. рдореЗрд░реЗ рдЕрдиреБрднрд╡ рд╕реЗ рддреНрд░реБрдЯрд┐ Could not mark an element as translatable inside a translatable section рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╕рдордЭрд╛рдпрд╛ рд╣реИ, рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рддреНрд░реБрдЯрд┐ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рдкрдврд╝рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рдХрд┐рд╕ рдлрд╛рдЗрд▓ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реИред

@fredrikredflag рдзрдиреНрдпрд╡рд╛рдж рдПрдХ рдЯрди!

рдЖрдкрдХрд╛ рдХреЛрдб рд╕реБрдкрд░ рдЙрдкрдпреЛрдЧреА рд╣реИ! рдореБрдЭреЗ рд╕рд┐рд░реНрдл рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ xliff.load рдЖрдЬрдХрд▓ рдПрдХ рдЕрд▓рдЧ рд╡рд╕реНрддреБ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП this._translations рдХреЛ рдЗрд╕рдореЗрдВ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

const loaded = xliff.load(this._source, '');
this._translations = loaded['i18nNodesByMsgId'] ? loaded['i18nNodesByMsgId'] : {};

рдФрд░ get рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдорд╛рдореВрд▓реА рд╕рддреНрдпрд╛рдкрди рдпрджрд┐ рд╣рдо рдПрдХ рдЧреИрд░-рдореМрдЬреВрджрд╛ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ:

const placeholders = this._getPlaceholders(this._translations[key] ? this._translations[key] : []);

рд╕рд╛рде рд╣реА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЦрд╛рд▓реА i18n рдШрдЯрдХ рдкреЗрдбрд╝ рд╣рд┐рд▓ рдЧрдпрд╛ рдерд╛ рдпрд╛ рдХреБрдЫ рдФрд░ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕рдВрдмрдВрдзрд┐рдд рдШрдЯрдХ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдкрд░ рддрд╛рд░реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдкрдбрд╝рд╛:

<span hidden i18n="@@MY_STRING_1">String 1</span>
<span hidden i18n="@@MY_STRING_2">String 2</span>

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдореБрдЭреЗ рдЕрдкрдиреЗ рдорд┐рдиреАрдПрдк рдореЗрдВ рдмрд╕ рдХреБрдЫ рдорд╛рддреНрд░рд╛ рдореЗрдВ рддрд╛рд░ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдУрдЯреА рдХреЗ рд╕рд╛рде рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзрдиреНрдпрд╡рд╛рдж!!!

P/S: рдЗрд╕ рд╕рдордп рдорд╛рд░реНрдЯрд┐рди рд░реВрдм рдХрд╛ xliffmerge рдЯреВрд▓ рдЕрд╡рд╢реНрдп рдЙрдкрдпреЛрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЙрд╕рдХрд╛ TinyTranslator рднреА B-)

рдореИрдВ рдПрдУрдЯреА рд╕рдВрдХрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рджреЛ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ: рдЕрдВрдЧреНрд░реЗрдЬреА рдФрд░ рд░реВрд╕реАред рдореБрдЭреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рд╣реИред

environments/environment.ts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

import { messagesEn } from '../messages/messages-en';

export const environment = {
  production: false
};

export const messages = messagesEn;

рдЕрдЧрд▓реА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рджреЛ рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓реЗрдВ environment.prod-en.ts рдФрд░ environment.prod-ru.ts рднреА рд╣реИрдВ:

import { messagesEn } from '../messages/messages-en';

export const environment = {
  production: true
};

export const messages = messagesEn;

рдФрд░ рд░реВрд╕реА рдХреЗ рд▓рд┐рдП:

import { messagesRu } from '../messages/messages-ru';

export const environment = {
  production: true
};

export const messages = messagesRu;

рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

export const messages = {
  MessageKey: 'Translation',
  AnotherMessageKey: 'Translation',
  Group: {
    MessageKey: 'Translation',
    AnotherMessageKey: 'Translation',
  }
};

рдореЗрд░реЗ рдХреЛрдб (рдШрдЯрдХреЛрдВ, рд╕реЗрд╡рд╛рдУрдВ, рдЖрджрд┐) рдореЗрдВ рдореИрдВ рд╕рд┐рд░реНрдл рд╕рдВрджреЗрд╢ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реВрдВ:

import { messages } from '../../environments/environment';

рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

alert(messages.MessageKey);

.angular-cli.json рдореЗрдВ рдореИрдВрдиреЗ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓рд╛ рдкрд░рд┐рд╡реЗрд╢ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ:

"environments": {
  "dev": "environments/environment.ts",
  "prod-en": "environments/environment.prod-en.ts",
  "prod-ru": "environments/environment.prod-ru.ts"
}

рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

@ рдПрд▓реЗрдХреНрд╕-рдЪреНрдпреВрд╡ рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЬреЗрдЖрдИрдЯреА рдХреЗ рд╕рд╛рде рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ?

@ocombe рдХреЛрдИ рдореЛрдЯрд╛ рдЕрдиреБрдорд╛рди рдпрд╣ рдХрдм рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛?

рдЧреНрд░реЗрдЯ рдлреАрдЪрд░ рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ :)

рдпрд╣ рддрдм рддрдХ рд╣реЛрд▓реНрдб рдкрд░ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП 4.2 рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдореИрдВ рдЕрднреА рднреА рдЗрд╕реЗ 4.3 рдХреЗ рд▓рд┐рдП рдмрдирд╛рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

рдХреЛрдИ рднреА рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ i18n рдХреЛ рдкрд░рдо рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП [рд╢реАрд░реНрд╖рдХ] рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ:
рддреЛ рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, HELLO . рд╢рдмреНрдж рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдЬреЛрдбрд╝реЗрдВ

рд╕рд╛рджрд░

рд╢реЙрди

рдпрджрд┐ HELLO рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк HTML рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
```рдПрдЪрдЯреАрдПрдордПрд▓

````
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ: https://angular.io/docs/ts/latest/cookbook/i18n.html#! #рдЕрдиреБрд╡рд╛рдж-рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ

рдпрджрд┐ рдЖрдкрдХреЛ рдШрдЯрдХ рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рдЬреБрдбрд╝рдирд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рд╣реЛрдЧреА, рдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдХрд╕реНрдЯрдо рддрд░реАрдХрд╛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдореЗрд░реА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП)ред

@ocombe

рд╣рдо рдЕрднреА рднреА рдбрд┐рдЬрд╛рдЗрди рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕реА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЪреАрдЬреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реИ (рдЬреИрд╕реЗ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреИрд╕реЗ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ), ...

рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рднреА рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдлрд┐рд▓рд╣рд╛рд▓ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдХреИрд╕реЗ рддреГрддреАрдп-рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╡рд╛рдж рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рдЖрдк рдХреЗрд╡рд▓ 1 XLIFF рдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреА рднрд╛рд╖рд╛ рдХреЛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╣рд╛рдБ, рдореИрдВ рднреА рдЙрд╕рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ! рдЧреИрд░-рдЕрдВрдЧреНрд░реЗрдЬреА рднрд╛рд╖реА рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ!

рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╕рдорд░реНрдерди рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЯреАрдо рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧреА :-)

рдХреНрдпрд╛ рдХреЛрдИ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдореИрдВрдиреЗ рдХрд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓рдЧрднрдЧ 4.3 рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ (рдФрд░ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди) рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдпрд╣ v5 рд╕реЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдореБрдЭреЗ рдбрд░ рд╣реИ

Whaaaat рдУрд╣ рдиреВ, рдореИрдВ 4.2 рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрдм рдпрд╣ v5 рдХреЗ рд▓рд┐рдП рд╣реИ я╕П рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ v5 рдЧрддрд┐рд╢реАрд▓ рднрд╛рд╖рд╛ рд╣реЛрдЧреА рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд░реЗрдЧреА, рд▓реЗрдХрд┐рди рд╡реИрд╕реЗ рднреА рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рджрд┐рди рд╣реЛрдЧрд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП 36k рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрд┐рд▓реНрдб рдХреЗ рд╕рд╛рде рднрд╛рд╖рд╛: рд╣рд┐рдиреНрджреАред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ v5 рдХрдм рд╣реИ? рдзрдиреНрдпрд╡рд╛рдж

@ocombe

@istiti рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдпрд╣ рдЧрд╛рд░рдВрдЯреАрдХреГрдд рддрд╛рд░реАрдЦ рдирд╣реАрдВ рдереА ;-)
рд░рд┐рд▓реАрдЬ рд╢реЗрдбреНрдпреВрд▓ рдпрд╣рд╛рдВ рд╣реИ: https://github.com/angular/angular/blob/master/docs/RELEASE_SCHEDULE.md
v5 рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рд░рд┐рд▓реАрдЬ 2017тАС09тАС18 рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдмреАрдЯрд╛ рдФрд░ рдЖрд░рд╕реА рд╣реЛрдВрдЧреЗ

рдХреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЛрдХреЗрд▓ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ, messages.xlf рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рдПрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: messages.{component}.{locale}.xlf рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ messages.{component}.xlf ред

рдЕрднреА рдирд╣реАрдВ

@ocombe . рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдХреА рд╡рдЬрд╣ рд╕реЗ рдиреБрдХрд╕рд╛рди рдпрд╣ рд╕рдЦреНрдд рдиреНрдпреВрдирддрдо рд╣реИ

рдореИрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдБ... рдХреНрдпрд╛ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдЕрдиреБрд░реЛрдз/рдкрд░рд┐рд╡рд░реНрддрди рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдпрд╛ рдирд╣реАрдВ?
рдпрд╣рд╛рдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдЕрдиреБрд╡рд╛рдж рдХреЗрд╡рд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рд░рд┐рдбрдХреНрд╕, рдХрд╕реНрдЯрдо рдЯреНрд░реАрд╡реНрдпреВ рдШрдЯрдХ рдЖрджрд┐... рд╕рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╕реЗ рдХреЛрдб рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рдкреНрд░рддрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд╣реАрдВ

рдпрд╣ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╣реИ, рдФрд░ рдпрд╣ рдЖ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдЕрдиреНрдп рдЧрд╣рд░реЗ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдкрдбрд╝реЗ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдпрд╣ 4.3 рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рдерд╛

рдХреНрдпрд╛ рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдХрд┐рд╕ рд╕рдЯреАрдХ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧреА/рдпреЛрдЬрдирд╛рдмрджреНрдз рд╣реИ? 4.3.1, 4.3.2 ... 4.3.X ?

4.x рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдФрд░ рдмрдбрд╝рд╛/рдорд╛рдореВрд▓реА рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рд╣реИ (рдХреЗрд╡рд▓ рдкреИрдЪ: https://github.com/angular/angular/blob/master/docs/RELEASE_SCHEDULE.md) рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ 5.x рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ , рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ред

рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рднреА 5.x рдореЗрдВ рдЖрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ? рдореИрдВ рдЗрд╕реЗ рдмреАрдЯрд╛ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ред рдзрдиреНрдпрд╡рд╛рдж

v50.x рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рди рдХрд┐ v5.x рдореЗрдВ

5.x рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рдпрд╣ 5.0 рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реЛрдЧреА

рд▓реЗ рдЬреНрдпреВред 3 рдмрдЬреЗ 2017 рдмрдЬреЗ 12:56 рдмрдЬреЗ, vltr [email protected] рдПрдХ рд▓реЗрдЦ :

v50.x рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рди рдХрд┐ v5.x рдореЗрдВ

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/angular/angular/issues/11405#issuecomment-319936876 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAQMorXMbyI8l6K3QA4jmXEKawiEC46xks5sUad0gaJpZM4J2pkr
.

рд╣рд╛рдп @ocombe рдореБрдЭреЗ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдФрд░ рд╕рдВрдХрд▓рдХ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рдПрдХ рдХрдард┐рди рдХрд╛рдо рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯрддрд╛ рд╣реИ рдХрд┐ рд╕рдордпрд░реЗрдЦрд╛ рдХреИрд╕реА рджрд┐рдЦрддреА рд╣реИ рдпрд╛ рдпрд╣ рдЕрднреА рднреА 5.0 рд▓реЗрдХрд┐рди рдХреБрдЫ 5.x рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ?

@arackow рдпрд╣ 5.x рдореЗрдВ рд╣реЛрдЧрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, @vicb рд╕рдВрдХрд▓рдХ рдХреЗ рдЕрдВрддрд┐рдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЕрдВрддрддрдГ рдЗрд╕реЗ рд╕рдВрднрд╡ рдмрдирд╛ рджреЗрдЧрд╛

@ocombe ... рдХреНрдпрд╛ рдХреЛрдИ рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реИ рдЬреЛ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ? рд╣рдо рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдХрд╛рд╕ рдЪрд░рдг рдореЗрдВ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдЬрд╛рдирдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЕрдкрдирд╛ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЕрдВрддрд┐рдо рдХреЛрдгреАрдп рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдерд╛ рд▓реЗрдХрд┐рди рдпрд╣ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдерд╛ рдФрд░ рд╢рд╛рдпрдж рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдВрдЧреЗред рдирдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдмреЗрд╣рддрд░ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣рдо рдПрдХ рдирдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд░реЗрдВрдЧреЗ

@ocombe рдореБрдЭреЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ +1 рдХрд░рдирд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрднреА рдЧрдВрднреАрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпреЛрдЧреНрдп: +1: рдЕрджреНрднреБрдд рдЙрдкрдХрд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рджреЛрд╕реНрддреЛрдВ! :)

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдбрд┐рдЬрд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдПрдУрдЯреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдПрдХ рд▓реЗрдЦрдХ рдХреЛ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╡рд╛рдж рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдХреНрдпрд╛ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрд╛ рд╣реИ?

рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ @gms1.
рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред
рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓реЗрдЦрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ i18n рдЯреИрдЧ рдЬреЛрдбрд╝рдиреЗ рд╣реЛрдВрдЧреЗред
рдЖрдкрдХреЛ рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ " ngfactories " (ng-conf 2017 рдкрд░ рдЬреЗрд╕рди рдПрдбрди рдХреА рдмрд╛рдд рджреЗрдЦреЗрдВ) рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдЕрдиреБрд╡рд╛рдж рдЯреИрдЧ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдЬрдм рдЖрдк ng xi18n рдХрдорд╛рдВрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ xliff рдореЗрдВ рдЖрдкрдХреЗ рдиреЛрдб_рдореЙрдбреНрдпреВрд▓ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд╡рд╛рдж рднреА рдорд┐рд▓реЗрдЧрд╛ред

рддреЛ рдирд╣реАрдВ, рдЖрдкрдХреЛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЙрдкрдпреЛрдЧреА рдЕрд░реНрдереЛрдВ рдХреЗ рд╕рд╛рде i18n рдЯреИрдЧ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдбрд┐рдЬрд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реЗ рдЙрджреНрдзреГрдд:

рдПрдУрдЯреА рдХреЗ рд▓рд┐рдП рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕рд░реНрд╡рд┐рд╕ рдХреЙрд▓реНрд╕ рдХреЛ рд╕реНрдЯреИрдЯрд┐рдХ рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рди рд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рддреЛ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реЛрдЧрд╛ рдпрджрд┐ рдПрдХ рдХреЛрдгреАрдп (рдПрдУрдЯреА) рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдорддреМрд░ рдкрд░ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдореБрдЭреЗ рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ .metadata.json рдХрд╛ рдХреЛрдИ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ

рдЖрдкрдХреЛ рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЕрдВрддрд┐рдо рдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрдкрдиреЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрд╡рд▓рдкрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рджреЗрдЦреЗрдВ рдХрд┐ @jasonaden рдиреЗ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдЖрдк i18n рдЯреИрдЧ рдЬреЛрдбрд╝рдХрд░ рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЕрдиреБрд╡рд╛рдж рдпреЛрдЧреНрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

@ gms1 рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛:

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдерд╛ рд▓реЗрдХрд┐рди рдпрд╣ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдерд╛ рдФрд░ рд╢рд╛рдпрдж рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдВрдЧреЗред

рдФрд░ рдПрдУрдЯреА рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ v5 рдХреЗ рд▓рд┐рдП рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдмрджрд▓рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, libs рдХреЗ рд▓рд┐рдП "рдПрдУрдЯреА-рд░реЗрдбреА" рдХреЛрдб рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
i18n рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рдЖрд╕рд╛рди/рд▓рдЪреАрд▓рд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╣ рд╢рд╛рдпрдж рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдЧрд╛: рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдиреБрд╡рд╛рдж рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдУрд╡рд░рд░рд╛рдЗрдб рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рднрд╛рд╖рд╛рдПрдВ рднреА рдпрджрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдЗрд╕ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП @ocombe рдзрдиреНрдпрд╡рд╛рдж!

@ocombe рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ ngx-translate рдХреА рд╕реБрд╡рд┐рдзрд╛рдПрдВ рдХреЛрдгреАрдп рдореЗрдВ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреА?

@ montreal91 рдПрдирдЬреАрдПрдХреНрд╕-рдЕрдиреБрд╡рд╛рдж рдХреЗ рдХрд┐рд╕реА рднреА рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдХреЛрдгреАрдп рдореЗрдВ рд╣реИ, рдореЗрд░реЗ рдХрд╛рдо рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рднреЛрд▓рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ, рдпрд╣ "рдЬреНрдпрд╛рджрд╛рддрд░" рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╣рдо рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдмрдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдХреЛрдгреАрдп рд╕рдорд╛рди рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ (рднрд▓реЗ рд╣реА рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрд▓рдЧ рд╣реЛрдЧрд╛)ред

рдпрд╣ рдореЗрд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг (FLUX) рд╣реИ, рдЬрдмрдХрд┐ рдореИрдВ (https://github.com/PointInside/ng2-toast) рдкрд░ рдЖрдзрд╛рд░рд┐рдд UI рд╕реВрдЪрдирд╛ рдкреНрд░рдгрд╛рд▓реА рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХреЛрдгреАрдп i18n рд╕рд┐рд╕реНрдЯрдо (xi18n) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдмрдЬрд╛рдп рд╕реЗрд╡рд╛ рдХреЙрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ _working_ рд╕рдорд╛рдзрд╛рди рд╣реИред рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЕрдВрд╢реЛрдВ рд╕реЗ рд╡рд┐рдЪрд╛рд░ _extract_ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрд╢рд╛ рд╣реИ рдпреЗ рдорджрдж рдХрд░реЗрдЧрд╛ :)

рдХрд╣реАрдВ рднреА

// this call in any other component, service... 
// "info" method parameter is the "id" of the HTML element in template NotificationComponent.html
this.notificationActionCreator.success("myMessage");

рдЕрдзрд┐рд╕реВрдЪрдирд╛рдШрдЯрдХ.ts

@Component({
    selector: 'notification-cmp',
    templateUrl: '../../public/html/NotificationComponent.html'
})
export class NotificationComponent implements OnInit, OnDestroy, AfterViewInit {

    notificationMap: Map<string, any> = new Map();
    subscription: Subscription;

    constructor(private toastr: ToastsManager,
                private vcr: ViewContainerRef,
                private store: NotificationStore,
                private elementRef: ElementRef) {

        this.toastr.setRootViewContainerRef(vcr);
    }

    ngOnInit() {
        this.subscription = this.store.payload
            .subscribe((payload: NotificationStorePayload) => this.handleStorePayload(payload));
    }

    ngOnDestroy(): void {
        this.store.destroy();
        if (null != this.subscription) {
            this.subscription.unsubscribe();
        }
    }

    ngAfterViewInit(): void {
        this.elementRef.nativeElement.querySelectorAll("div[notification-title][notification-text]")
            .forEach(el => this.notificationMap.set(el.id, {
                    title: el.attributes["notification-title"].value,
                    text: el.attributes["notification-text"].value,
                })
            );
    }

    handleStorePayload(payload: NotificationStorePayload): void {

        if (null != payload.action) {
            let notification = this.notificationMap.get(payload.notification.id);

            switch (payload.notification.type) {
                case NotificationType.SUCCESS:
                    this.toastr.success(notification.text, notification.title);
                    break;
                case NotificationType.INFO:
                    this.toastr.info(notification.text, notification.title);
                    break;
                case NotificationType.WARNING:
                    this.toastr.warning(notification.text, notification.title);
                    break;
                case NotificationType.ERROR:
                    this.toastr.error(notification.text, notification.title);
                    break;
            }
        }
    }
}

рдЕрдзрд┐рд╕реВрдЪрдирд╛рдШрдЯрдХ.html

<div hidden
     id="myMessage"
     i18n-notification-title="@@notificationTitleMyMessage"
     i18n-notification-text="@@notificationTextMyMessage"
     notification-title="Greeting"
     notification-text="Hello world"></div>

<div hidden
     id="error"
     i18n-notification-title="@@notificationTitleError"
     i18n-notification-text="@@notificationTextError"
     notification-title="Error"
     notification-text="Something went wrong!"></div>

рдЕрдм рдЬрдм рдПрдВрдЧреБрд▓рд░ 5 рдЬрд╛рд░реА рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рд╣реИ рдХрд┐ i18n рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрдм рдПрдХреАрдХреГрдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ?

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдХреЛрдгреАрдп рд╕рдВрдХрд▓рдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдЯреАрдореЗрдВ рдХрдо рд░реБрдЪрд┐ рд░рдЦрддреА рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдХрд╛рд░реНрдп рдпрд╛ рдкреАрдЖрд░ рдпрд╛ рдкреНрд░рддрд┐рдмрджреНрдз рдирд╣реАрдВ рд╣реИ: - (ред рд╡реЗрдВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдЬреЛ рд╣рд░ рджреВрд╕рд░реЗ рдЕрдиреБрд╡рд╛рдж-рдврд╛рдВрдЪреЗ рдореЗрдВ рдореМрдЬреВрдж рдмрд╣реБрдд рд╣реА рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЕрдм рдПрдХ рд╡рд░реНрд╖ рд╕реЗ рдЕрдзрд┐рдХ рдкреБрд░рд╛рдирд╛ рд╣реИред рдореИрдВрдиреЗ рджрд┐рдпрд╛ рд╣реИ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╕реБрд╡рд┐рдзрд╛ рдЖ рдЬрд╛рдПрдЧреАред рдХрдо рд╕реЗ рдХрдо 5.x рдХреЗ рд▓рд┐рдП ...

рджреЛрд╕реНрддреЛрдВ рд╢рд╛рдВрдд рд░рд╣реЛред рдПрдУрдЯреА рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рдереЛрдбрд╝рд╛ рднрд░реЛрд╕рд╛ рд░рдЦреЛ, @ocombe рдиреЗ рдХрд╣рд╛:

"рдпрд╣ 5.x рдореЗрдВ рд╣реЛрдЧрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, @vicb рд╕рдВрдХрд▓рдХ рдореЗрдВ рдЕрдВрддрд┐рдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЕрдВрддрддрдГ рдЗрд╕реЗ рд╕рдВрднрд╡ рдмрдирд╛ рджреЗрдЧрд╛"

рд╣рд╛рдБ, рд╣рдо рдЕрднреА рд░рдирдЯрд╛рдЗрдо i18n рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдкрд╣рд▓рд╛ рдХрджрдо рд╣реИред
рд░рдирдЯрд╛рдЗрдо i18n рдХрд╛ рдЕрд░реНрде рд╣реИ: рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдВрдбрд▓, AOT-рд╕рдВрдХрд▓рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп i18n рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╢рд╛рдпрдж рдмрд╛рдж рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдкрд░ рднрд╛рд╖рд╛ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рд╣рдо рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рд░рдирдЯрд╛рдЗрдо рдкрд╛рд░реНрд╕рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрджрд┐ ...)ред
рдПрдХ рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдЧрд▓реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рдЕрдиреБрд╡рд╛рдж рд╣реЛрдЧреАред

рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ (рдЬреЛ 5.0 рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдо рд░рдирдЯрд╛рдЗрдо i18n рдирд╣реАрдВ рдХрд░ рд╕рдХреЗред

рдХреЛрдИ рднреА рд╡рд┐рдЪрд╛рд░ рдЬреЛ 5.x рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ i18n рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛? 5.0.0 рдХреЗ рд╕рд╛рде рд╣реА рдХреБрдЫ рднреА рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

5.0:

  • рдирдП i18n рдкрд╛рдЗрдк (рджрд┐рдирд╛рдВрдХ/рд╕рдВрдЦреНрдпрд╛/рдкреНрд░рддрд┐рд╢рдд/рдореБрджреНрд░рд╛) рдЬреЛ intl API рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ 20 рдмрдЧреНрд╕ рдХреА рддрд░рд╣ рдХреБрдЫ рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рд╡реЗ рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рд╕рдорд╛рди рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ + рдХреБрдЫ рдЕрдиреНрдп рд╕реБрдзрд╛рд░ (рд▓реЛрдХреЗрд▓ рдкреИрд░рд╛рдореАрдЯрд░, рдирдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рд╛рд░реВрдк, рдЯрд╛рдЗрдордЬрд╝реЛрди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП) рддрд╛рд░реАрдЦ рдкрд╛рдЗрдк, ...)
  • рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдирдпрд╛ i18n рдПрдкреАрдЖрдИ рдлрд╝рдВрдХреНрд╢рди: https://next.angular.io/api?query=getlocale
  • рдХреНрд▓реА рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рдПрдХреАрдХрд░рдг

5.1 рдпрд╛ 5.2 (рдпрджрд┐ рдХреЛрдИ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЕрд╡рд░реЛрдзрдХ рдирд╣реАрдВ рд╣реИ):

  • рд░рдирдЯрд╛рдЗрдо i18n

5.x:

  • i18n рдХреЛрдб рдЕрдиреБрд╡рд╛рдж (рд╕рд┐рд░реНрдл рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд╣реАрдВ)

рдФрд░ рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рдЬреЛ рд╣рдо рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рддрдп рдирд╣реАрдВ рд╣реИрдВ (рдЖрдк https://github.com/angular/angular/issues/16477 рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдмрд╕ рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рд╡рд┐рдЪрд╛рд░, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рдереЛрдбрд╝реА рджреЗрд░ рд╣реЛ рдЧрдИ рд╣реИ, рдмрд╕ рдПрдХ TS рдлрд╝рд╛рдЗрд▓ рдореЗрдВ i18n рд╕рдорд░реНрдерди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдХреЗ, рд╣рдо рдПрдиреЛрдЯреЗрд╢рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╕реЛрдЪрддреЗ? (рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдКрдкрд░ рднреА рдХрд┐рдпрд╛ рд╣реИ)

рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛:
@i18n (рдЖрдИрдбреА = 'message1')
рд╕рдВрджреЗрд╢ 1 = "рдпрд╣ рдПрдХ рд╕рдВрджреЗрд╢ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ";

@i18n (рдЖрдИрдбреА = 'рдЧрддрд┐рд╢реАрд▓ рд╕рдВрджреЗрд╢')
dynamicMessage = "рдпрд╣ {0} рдХреЗ рд╕рд╛рде рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд╕рдВрджреЗрд╢ рд╣реИ";

рдбрд╛рдпрдирд╛рдорд┐рдХ рдореИрд╕реЗрдЬ рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде, рд╣рдо рдЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдкреНрд░рд╛рд░реВрдк рд╣реИ, рдлрд┐рд░ рд╣рдо рдиреАрдЪреЗ рдХреА рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
var finalMessage = dynamicMessage.format ('value1')

рдирд╛рдорд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдЖрджрд┐ рдХреА рджреЗрдЦрднрд╛рд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╡рд╛рд▓ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫрд╛ рдбреЗрд╡рд▓рдкрд░ рдЕрдиреБрднрд╡ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рд╕рд╡рд╛рд▓ рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

рдпрджрд┐ рдЖрдк рд╕рдВрджреЗрд╢ 1 рдХреЛ рджреВрд╕рд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рд╕рднреА i18n рдЪрд░реЛрдВ рдХреЛ рддрдм рд╣рдореЗрд╢рд╛ рд╕реНрдерд┐рд░ рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕рд┐рдореНрдлрдиреА рдореЗрдВ рдЕрдиреБрд╡рд╛рдж-рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрд╡рд╛рджрдХ-рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рдЬреЗрдПрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧреА: let translated = this.translator.trans('Hello %name%', [{'%name%': nameVariable}]); рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк: <source>Hello %name%</source> <target>Bonjour %name%</target>

@MickL рд╡рд░реНрддрдорд╛рди-рдПрдУрдЯреА рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдмрд┐рдВрджреБ рд╣реИ, рдПрдХ рдиреНрдпреВрдирддрдо рдФрд░ рдХреБрд╢рд▓ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрдирд╛рдПрдВред рдЗрд╕рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдХреЛрдИ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрднреА рддрдХ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред
рдореЗрд░рд╛ рджреГрдврд╝ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдХрд┐ рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд╛рдпрдирд╛рдорд┐рдХреНрд╕ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рдкрд╛рда рд╕реНрдерд┐рд░ рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рддреЗ рд╣реБрдП рдЙрд╕ рддрд░рд╣ рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВред

рдбрд╛рдпрдиреЗрдорд┐рдХ рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╕рд░рд▓ рд╣реИ, рдЬреЛ рдХрд┐ рдпрджрд┐ рдЖрдк рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдЗрд╕реЗ рджрд┐рдЦрд╛ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ,
рдХреНрдпреЛрдВ?

  1. рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реНрдореГрддрд┐ рдореЗрдВ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╢рдмреНрджрдХреЛрд╢ рд╣реЛрддрд╛ рд╣реИред
  2. рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдкрд╛рда рджрд┐рдЦрд╛ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рдЬрд╛рдиреЗ рдФрд░ рдПрдХ рдХреБрдВрдЬреА рдЦреЛрдЬрдиреЗ рдФрд░ рдлрд┐рд░ рднрд╛рд╖рд╛ рдЕрдиреБрд╡рд╛рдж рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рд░ рдмрд╛рд░ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ "рдореБрдЦреНрдп рднрд╛рд╖рд╛" рд╣реИред

рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рднрд╡рд┐рд╖реНрдп рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

  1. рдмреИрдХрдПрдВрдб рдЖрдкрдХреЛ рд╡рд╣ рдЯреЗрдХреНрд╕реНрдЯ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЖрдк рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
  2. рд╡рд░реНрддрдорд╛рди/рдореБрдЦреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЬрд╛ рд░рд╣реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рда рдХреЛ рдмрджрд▓реЗрдВ/(рдпрд╛ рдмреИрдХрдПрдВрдб рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдЬреЛ рд╡рд░реНрддрдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ)ред (рд╣рд░ рдЪреАрдЬ рдХреЛ рд╕рдордп рдорд┐рд▓рдиреЗ рдкрд░ рдмрджрд▓реЗрдВ, рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд▓реЗрдмрд▓ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рджреЛ рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ)ред
  3. рдХреЗрд╡рд▓ рд╕рд╣реА рдорд╛рдпрдиреЗ рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рдкрд╛рда рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░/рдпрд╛ рдмреИрдХрдПрдВрдб рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рдкрд╛рда рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдмреИрдХрдПрдВрдб рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ "рдЧрддрд┐рд╢реАрд▓ рдкрд╛рда" рдХреА рдПрдХ рдкреНрд░рддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдЖрдк рдЙрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдЕрдм рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдЕрд╕рд▓ рдореЗрдВ рдПрдХ рд▓рдбрд╝рдХрд╛ (рдУрд▓рд┐рд╡рд┐рдпрд░ рдХреЙрдореНрдмреЗ) i18n рдкрд░ рдкреВрд░реНрдгрдХрд╛рд▓рд┐рдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдПрдУрдЯреА рдмрд╣реБрдд рдЦрд╛рд╕ рд╣реИ рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрднрд╡ рдХреЗ рдХрд░реАрдм рд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрд╣реБрдд рдХрд╛рдо рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЬрд▓реНрдж рд╣реА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧрддрд┐рд╢реАрд▓ рдЕрдиреБрд╡рд╛рдж рд╣реЛрдВрдЧреЗ: рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдХреЛ рдЕрд▓рдЧ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ! рдЬрдм рдпрд╣ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╛рдж рдореЗрдВ рдХреЛрдб (рдЗрд╕ рдЕрдВрдХ) рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рд╣реЛрдВрдЧреЗред рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рд╕рдбрд╝рдХ рдЬрдм рддрдХ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдм рд╕реЗ рдЖрдзрд╛ рд╕рд╛рд▓ рд▓рдЧ рдЬрд╛рдПрдЧрд╛ред

рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдгреАрдп рдореЗрдВ i18n рдХреЗ рд╡рд░реНрддрдорд╛рди рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ 07.11.17 рдХреЛ рдПрдВрдЧреБрд▓рд░ рдХрдиреЗрдХреНрдЯ рдкрд░ рдЙрдирдХреЗ рднрд╛рд╖рдг рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: https://youtu.be/DWet6RvhHWI?t=21m12s

рдпрд╣ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдХрд┐рдП рдЧрдП рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣ рдорд╣рдХрддреА рд╣реИ ...

рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрджрдмреВ рдЖ рд░рд╣реА рд╣реИред рдореИрдВ рдкреНрд░рдЧрддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рд╣рд░ рдорд╣реАрдиреЗ рдПрдХ рдмрд╛рд░ рдЗрд╕ рдзрд╛рдЧреЗ рдкрд░ рдЬрд╛рддрд╛ рд╣реВрдВ рдФрд░ рдХрдо рдЙрдореНрдореАрджреЛрдВ рдХреЗ рдХрд╛рд░рдг рдирд┐рд░рд╛рд╢ рд╣реЛрдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗрд╡рд▓ рдпрд╣реА рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рдорд╛рди рд╡рд┐рдХрд▓реНрдк рд╣реЛрдВред рдЗрд╕ рдХрдореА рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдХрд╛рд░рдг рдореЗрд░рд╛ рдХреЛрдб рдЫрд┐рдкреЗ рд╣реБрдП рдЕрдиреБрд╡рд╛рджрд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╕реЗ рднрд░рд╛ рд╣реБрдЖ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдЕрдВрддрддрдГ рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдПрдиреЛрдЯреЗрд╢рди рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдЕрддрд┐рд░рд┐рдХреНрдд рд▓реЗрддрд╛ рд╣реИред рдЬрдм рдореИрдВ рдХреЛрдб рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЪреБрди рд░рд╣рд╛ рд╣реЛрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рджреЗрдЦ рд░рд╣рд╛ рд╣реЛрддрд╛ рд╣реВрдВред рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рддрд╛рд░ рдореЗрд░реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЖрдзрд╛рд░рд┐рдд рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЗ рд╕рдорд╛рди рдкреНрд░рд╛рд░реВрдк рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред

@eliasre рдпрджрд┐ рдЖрдк рдХреЛрдб рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рдореЗрдВ рд╣реИрдВ рддреЛ рдЖрдк https://github.com/ngx-translate/i18n-polyfill рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ
рдХреЛрдИ рд╡рд╛рджрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣реА рд╣реЛрдЧрд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╢рд╛рдпрдж рдЕрд▓рдЧ рд╣реЛрдЧрд╛ (рдЬреИрд╕рд╛ рдХрд┐ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ), рдЕрднреА рдЬреЛ рд╕рдВрднрд╡ рд╣реИ рдЙрд╕рдХреА рд╕реАрдорд╛рдПрдВ рд╣реИрдВ ... рдФрд░ рдпрд╣ рдЖрдкрдХреЗ рдРрдк рдореЗрдВ ~ 80ko рдЬреЛрдбрд╝ рджреЗрдЧрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╣ рдХрд╛рдо

рдпрджрд┐ рдЖрдк рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк ngx-translate рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

@ocombe рдХреНрдпрд╛ рдЖрдк рдкреНрд░рдЧрддрд┐ рдкрд░ рдЕрдкрдбреЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗ рддрд╛рдХрд┐ рд╣рдо рд╡рд┐рдХрд╛рд╕ рдХреА рд╕рдордп-рд╕реАрдорд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЯреНрд░реИрдХ рдФрд░ рдпреЛрдЬрдирд╛ рдмрдирд╛ рд╕рдХреЗрдВ, рдЬрдм рдХрд┐рд╕ рдкреНрд▓рдЧрдЗрди рдпрд╛ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрдгрдпреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ? рдпрд╣ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рдФрд░ рдкреНрд░рд╢рдВрд╕рдиреАрдп рд╣реЛрдЧрд╛

@eliasre рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Google рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЛ рддреЛрдбрд╝реЗ рдмрд┐рдирд╛ред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рд▓рдЧ рд░рд╣рд╛ рд╣реИред

рдЧрд╝рд░реАрдмреЛрдВ рдХреЛ рдкрд░реЗрд╢рд╛рди рдордд рдХрд░реЛ @ocombe рд╡рд╣ рдмрд╣реБрдд рдореЗрд╣рдирдд рдХрд░ рд░рд╣рд╛ рд╣реИ!
рдЗрд╕реЗ рдЬрд╛рд░реА рд░рдЦреЛ! :)

рдореИрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реВрдВ, рдФрд░ рдпрд╣ рдЫреБрдЯреНрдЯрд┐рдпреЛрдВ рдХреА рдЫреБрдЯреНрдЯреА рд╣реИ, рдЬреИрд╕реЗ рд╣реА рдореБрдЭреЗ рдФрд░ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛ рджреВрдВрдЧрд╛

рдзрдиреНрдпрд╡рд╛рдж @ocombe

рдзрдиреНрдпрд╡рд╛рдж @ocombe , рдпрд╣рд╛рдВ рдХрд┐рд╕реА рднреА рдЕрдкрдбреЗрдЯ рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред рдореИрдВ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рдорд╣реАрдиреЛрдВ рд╕реЗ рд░рдирдЯрд╛рдЗрдо i18n рдХрд╛ рдмреЗрд╕рдмреНрд░реА рд╕реЗ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдЕрдВрддрд┐рдо рдмрд┐рд▓реНрдб ETA 5.2 рдерд╛ред рдЬреИрд╕реЗ рд╣реА рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣рд╛рдВ рдПрдХ рдЕрджреНрдпрддрди рдИрдЯреАрдП рд╣реИ, рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ?

рдЗрддрдиреЗ рд▓рдЧрд╛рддрд╛рд░ рдмрдиреЗ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди 20 рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд╛рдг рдЗрд╕ рд╕рдордп рдХрд╖реНрдЯрджрд╛рдпреА рд░реВрдк рд╕реЗ рдзреАрдорд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдХреЛрдгреАрдп 5.2 рдмрд╛рд╣рд░ рд╣реИ рдФрд░ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореБрдЭреЗ i18n рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ (рдпрд╛ рдХреНрдпрд╛ рдореИрдВрдиреЗ рдХреБрдЫ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛?) ... - @ocombe рд╢рд╛рдпрдж рдЖрдк рд╣рдореЗрдВ рд░рд┐рд▓реАрдЬ рдпреЛрдЬрдирд╛ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? i18n рдкрд░ рдЖрдкрдХреЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдФрд░ thx рдмрд╣реБрдд рдХреБрдЫ!

@ocombe рд╡рд╣ рдЖрджрдореА рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╣рдо рдпрд╣рд╛рдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ ... рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдпреВрдЯреНрдпреВрдм рд▓рд┐рдВрдХ рджреЗрдЦреЗрдВ: https://github.com/angular/angular/issues/11405#issuecomment -343933617

рдпреЛрдЬрдирд╛ рд▓рдЧрд╛рддрд╛рд░ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣реА рд╣реИред рдЬрдм рднреА рдореИрдВ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд░рд┐рд▓реАрдЬ рдХреА рддрд╛рд░реАрдЦ рджреЗрддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдорд┐рд▓рддреА рд╣реИ рдпрд╛ рдЬрд░реВрд░реА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рддрд╛рд░реАрдЦ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдореИрдВ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЖрдк рд╕рднреА рдХреЗ рд▓рд┐рдП рдХрд┐рддрдирд╛ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИ, рдЬреЛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рд╡рд╣ рд╕рдм рдХреБрдЫ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
i18n рдмреИрдХрд▓реЙрдЧ/рдпреЛрдЬрдирд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд▓ рд╣рдорд╛рд░реА рдПрдХ рдмреИрдардХ рд╣реИ, рдЕрдЧрд░ рдореБрдЭреЗ рдХреБрдЫ рдирдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛ рджреВрдВрдЧрд╛ред

@ocombe рдЕрдЧрд░ рдЖрдк рдЗрд╕ рдорд╣реАрдиреЗ i18n рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдХреНрд░рд╛рдлреНрдЯ рдмрд┐рдпрд░ рдХрд╛ 24 рдкреИрдХ рдЦрд░реАрджреВрдВрдЧрд╛

рдпрджрд┐ рдЖрдк рдкреВрдЫрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдгреАрдп рддрддреНрд╡ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдорд░реНрдерди рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдореИрдВ рдЬрд░реНрдорди рдмреАрдпрд░ рдХреА 24 рдмреЛрддрд▓реЗрдВ рдФрд░ рдЕрдиреНрдп 24 рдмреЛрддрд▓реЗрдВ рдЬреЛрдбрд╝реВрдВрдЧрд╛ред рдзрд┐рдХреНрдХрд╛рд░ рд╣реИ рд╕реВрдЪрдирд╛ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рдЬреЛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рднрдпрд╛рдирдХ рд╣реИред

@ocombe рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬреАрд╡рди рднрд░ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдорд╣рдВрдЧреА рдХреНрд░рд╛рдлреНрдЯ рдмрд┐рдпрд░ рдХреА 72 рдмреЛрддрд▓реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рджреБрд░реНрд▓рдн рдЕрд╡рд╕рд░ рд╣реИ, рдФрд░ рд╡рд┐рдХрд╛рд╕ рд╕рдореБрджрд╛рдп рдХреЛ рдЦреБрд╢ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдЖрдк рдЗрди рдХрд╛рдореЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВрдЧреЗ рддреЛ рд╣рдо рдЕрдкрдиреЗ рд╡рд╛рджреЗ рдкреВрд░реЗ рдХрд░реЗрдВрдЧреЗ рдореЗрд░реЗ рджреЛрд╕реНрддред

@MickL Angualr Elments, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдпрд╣ рд╣рдореЗрдВ рдЧреИрд░-рдПрд╕рдкреАрдП рдкреГрд╖реНрда рдмрдирд╛рдиреЗ рдФрд░ рдХреЛрдгреАрдп рдШрдЯрдХреЛрдВ рдХреЛ рдореВрд▓ рддрддреНрд╡реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ (рд╕реНрд╡-рд╡рд┐рдЬреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рднреА)

рд╣рд╛рдБ рдореБрдЭреЗ рдкрддрд╛ рд╣реИред рдпрд╣ 2 рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╣рд░ рдХреЛрдИ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреЛрдИ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрдм рдХреА рдЬрд╛рдП...

рдЕрдЧрд░ рдХреЛрдИ рдХреЗрд╡рд▓ рдмреАрдпрд░ рдХреА рдЕрдВрддрд┐рдо 27 рдмреЛрддрд▓реЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЙрдирдХреА рдЧрд┐рдирддреА рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!
http://www.99-bottles-of-beer.net/language-javascript-1948.html

рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝ рджреВрдВрдЧрд╛, @ocombe : рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдмреНрд░рд╛рдВрдб рдХрд╛ рдирд╛рдо рджреЗрдВ: D

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдмрд┐рдпрд░рдмрд╛рдЙрдВрдЯреА рдирд╛рдордХ рдПрде рдмрд╛рдЙрдВрдЯреА рдХреЗ рд╕рдорд╛рди рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛рддрд╛ рд╣реИ: рдкреА

рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдереЛрдбрд╝рд╛ рдЕрдкрдбреЗрдЯ: рд╣рдо рдЕрднреА рднреА v6 рдореЗрдВ рд░рдирдЯрд╛рдЗрдо i18n рдЬрд╛рд░реА рдХрд░рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ 5 рд╕рдкреНрддрд╛рд╣ рдХрд╛ рд╕рдордп рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЫреЛрдЯрд╛ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕реЗ рд╕рдВрднрд╡рдд: рдЕрдВрддрд┐рдо рд░рд┐рд▓реАрдЬ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдпрд╣ рдПрдХ рдЭрдВрдбреЗ рдХреЗ рдкреАрдЫреЗ рд╣реЛрдЧрд╛ред
рд░рдирдЯрд╛рдЗрдо i18n рдХреЛ рдХреЛрдб рдЕрдиреБрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡реИрд╕реЗ рднреА рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ (рдЗрд╕реЗ рдЙрд╕реА рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)ред
рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реЗрд╡рд╛ 100% рддреИрдпрд╛рд░ рд╣реЛрдЧреА, рдФрд░ рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реНрдердЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдареАрдХ рд╕реЗ рдирд╣реАрдВ рддреЛрдбрд╝реЗрдВрдЧреЗ, рдЕрдЧрд░ рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рд░рдирдЯрд╛рдЗрдо i18n рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдЧрд╛ (рдпрд╣ рд╣рдорд╛рд░рд╛ рд░реЛрдбрдореИрдк рд╣реИ), рдФрд░ рд╣рдореЗрдВ рдЗрд╕реЗ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдзреНрд╡рдЬ рдХреЗ рдкреАрдЫреЗ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕реЗ рд╡реИрд╕реЗ рднреА рдХреБрдЫ рднреА рддреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдП)ред

рд╣рдореЗрдВ рдЗрд╕реЗ рд╕рдордп рдкрд░ рдЬрд╛рд░реА рдХрд░рдиреЗ рд╕реЗ рдХреНрдпрд╛ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИ:

  • рдЕрдЧрд░ рд╣рдо рдХрд┐рд╕реА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдореБрджреНрджреЗ рдкрд░ рдареЛрдХрд░ рдЦрд╛рддреЗ рд╣реИрдВ (рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдХрд╛рд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)
  • рдЕрдЧрд░ рдпрд╣ рдЖрдВрддрд░рд┐рдХ Google рдРрдкреНрд╕ рдХреЛ рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдХрд╣реАрдВ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджреА рд╣реИ
  • рдЕрдЧрд░ рдХреБрдЫ рд╕рд░реНрд╡реЛрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕рд╛рде рдЖрддреА рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЕрдкрдирд╛ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛
  • рдпрджрд┐ рдирдИ рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЬрд┐рд╕ рдкрд░ рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдЕрд╡рд░реБрджреНрдз рдпрд╛ рд╡рд┐рд▓рдВрдмрд┐рдд рд╣реИ (рд░рдирдЯрд╛рдЗрдо i18n рдХреБрдЫ рдмрдбрд╝реЗ рдЖрдВрддрд░рд┐рдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рди рдкрд░ рдЯреАрдо рдХреЗ рдЕрдиреНрдп рд╕рджрд╕реНрдп рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ)
  • рд╡рд░рд┐рд╖реНрда рдХреЛрдгреАрдп рдЬреЗрдПрд╕ рдбреЗрд╡рд▓рдкрд░, рдкрд╛рд╕реНрдХрд▓рдкреНрд░реЗрдЪ рдХреЗ рдЕрдиреБрд╡рд╛рдж рд▓рд┐рдм рдХрд╛ 3 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред
  • рдореБрдЭреЗ рдЙрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ред рдХреЛрдгреАрдп 2 рдзреЛрдЦреЗрдмрд╛рдЬрд╝ред рднреЛрд▓реЗрдкрди рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝ рдХрд░рдирд╛ https://angular.io/guide/i18n
  • рдореЗрд░реЗ рдкреЗрд╢реЗрд╡рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ i18n рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдПрдХреАрдХреГрдд рдХрд░рдирд╛
  • рд╕рднреА рдлреНрд░рдВрдЯ-рдПрдВрдб рд╣рд╛рд░реНрдб-рдХреЛрдбреЗрдб рд▓реЗрдмрд▓ рдХреЗ рд╕рд╛рде рдЦрд┐рд▓рд╡рд╛рдбрд╝ рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕реЗ 100+kb xlf рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реБрдП рдкреВрд░рд╛ рджрд┐рди рд╡реНрдпрддреАрдд рдХрд░рдирд╛
  • рдПрдирдЬреА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рднреАрддрд░ рдХрдЪреНрдЪреЗ рд▓реЗрдмрд▓ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдореЗрдВ
  • рдЗрд╕реЗ Google рдкрд░ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рд░рд╣реЗрдВ
  • рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдХрд┐ рдХреЛрдгреАрдп 6 рдпреБрдЧреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред
  • рдореИрдВ рдЖрд░рдПрди
    mfw

@Macadoshis рдЖрдк рдЕрднреА рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рд▓рд┐рдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/ngx-translate/i18n-polyfill

@Macadoshis рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдо alpha.46 рдХреЗ рдмрд╛рдж рд╕реЗ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ! ;)

i18n-polyfill рдХреЛ рдореБрдЭреЗ @ocombe рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди рдореИрдВ ngx-translate рдХреЗ рд▓рд┐рдП рдЬрд╛рдКрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдиреБрд╡рд╛рдж рдХреБрдВрдЬреА рдХреЗ async рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
TRANSLATIONS рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд▓рд┐рдП i18n-polyfill рдХрд╛ рдХрд╛рд░рдЦрд╛рдирд╛ рдХреЗрд╡рд▓ рдЬреНрдЮрд╛рдд-рдкрд╣рд▓реЗ-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдирд┐рд╢реНрдЪрд┐рдд рд▓реЛрдХреЗрд▓ рдХреЗ рд╕рд┐рдВрдХ рдХрдЪреНрдЪреЗ-рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

// sync loading
return require(`raw-loader!../locale/messages.${locale}.xlf`);
// @ngx-translate/i18n-polyfill/esm5/ngx-translate-i18n-polyfill.js
Tokenizer.prototype._advance = function () {
    //...
    this._index++;
    // "this._input" needs to be a string and can't handle a Promise or an Observable
    this._peek = this._index >= this._length ? $EOF : this._input.charCodeAt(this._index);
    this._nextPeek = this._index + 1 >= this._length ? $EOF : this._input.charCodeAt(this._index + 1);
}

@ocombe рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЗ рдХрд┐рддрдиреЗ рдХрд░реАрдм рд╣реИ? рд╣рдореЗрдВ рдХрд┐рд╕реА рдЪреАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдЙрд╕рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░реА рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП? рд╕рд╛рде рд╣реА, рдХреНрдпрд╛ рдЖрдк i18n рдХреЗ рд╕рд╛рде рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдЬреЛ рд╕рдВрд╕реНрдХрд░рдг 6 рдореЗрдВ рдЬрд╛рд░реА рдХреА рдЬрд╛ рд░рд╣реА рд╣реИрдВ, рдФрд░ i18n рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХреИрд╕рд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ?

рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рд╣рдо рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рд╢рд╛рдпрдж рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ (рдореИрдВ рдорд╛рдЙрдВрдЯреЗрди рд╡реНрдпреВ рдХреА рдпрд╛рддреНрд░рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ)ред рдореБрдЭреЗ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рдкрддрд╛ рд╣реИ рдХрд┐ рдкрд░рджреЗ рдХреЗ рдкреАрдЫреЗ рдпрд╣ рдХреНрд▓реЛрдЬрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ goog.getMsg рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ Google рдЕрднреА рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ): https://github.com/google/closure-library /blob/db9bc1a2e71d4b6ee8f57eebe37eb0c6494e9d7e/closure/goog/base.js#L2379 -L2387 рдЬреЛ рдореЗрд░реЗ рдкреЙрд▓реАрдлрд┐рд▓ рдХреЗ рд╕рдорд╛рди рд╣реИред

v6 рдореЗрдВ рд╣рдо рд░рдирдЯрд╛рдЗрдо i18n рдЬрд╛рд░реА рдХрд░реЗрдВрдЧреЗ: рд╕рднреА рд▓реЛрдХреЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдВрдбрд▓, рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╣рд▓ рдХрд┐рдП рдЧрдП рдЕрдиреБрд╡рд╛рдж, рдФрд░ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдордп рд╣реИ рддреЛ рд╢рд╛рдпрдж рдХреЛрдб рдЕрдиреБрд╡рд╛рдж (рдЕрдиреНрдпрдерд╛ рдпрд╣ рдЬрд▓реНрдж рд╣реА рдЖ рдЬрд╛рдПрдЧрд╛)ред рдпрд╣ рд╕рдм рдПрдХ рдЭрдВрдбреЗ рдХреЗ рдкреАрдЫреЗ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдирдП рд░реЗрдВрдбрд░рд░ (рдЬрд┐рд╕реЗ рдПрдирдЬреА-рдЖрдЗрд╡реА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдпреБрджреНрдз-рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдзрдиреНрдпрд╡рд╛рдж! @ocombe ... рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ!
рдХреНрдпрд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдВрдЧреЗ? рдореИрдВ рдЕрднреА рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ - рд▓реЗрдХрд┐рди рдХреБрдЫ рд╣рдлреНрддреЛрдВ рдореЗрдВ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред

рдирд╣реАрдВ, рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рдорд╛рди рд╣реЛрдЧрд╛

рдорд╣рд╛рди рд╕рдорд╛рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП @ocombe рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдЕрддреНрдпрдВрдд рдЖрд╢рд╛рдЬрдирдХ рд╣реИред рдПрдирдЬреА-рдЖрдЗрд╡реА рд░реЗрдВрдбрд░рд░ рд╕реЗ рд╣рдо рдХрд┐рд╕ рддрд░рд╣ рдХреА рдЙрддреНрдкрд╛рджрди рддрддреНрдкрд░рддрд╛ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ v6 рдХреЗ рд╕рд╛рде рд░рд┐рд▓реАрдЬ рд╣реЛрдЧреА? рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдпреБрджреНрдз-рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЙрддреНрдкрд╛рджрди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдЧрд╛ рдФрд░ рд╕рднреА рдкреНрд░рдореБрдЦ рд▓рдЧрднрдЧ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд╣реИ рдирд╛?

рдЖрдк рдпрд╣рд╛рдВ рдкреНрд░рдЧрддрд┐ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/angular/angular/issues/21706
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╕рдм рдХреБрдЫ v6 рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЭрдВрдбреЗ рдХреЗ рдиреАрдЪреЗ рд╣реИ, рд╣рдо v6 рд░рд┐рд▓реАрдЬ рдХреЗ рдмрд╛рдж рднреА рдЗрд╕ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд░рд╣реЗрдВрдЧреЗ (рдпрд╣ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рдпрд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ)
рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдХрд╣реВрдВ рддреЛ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рд╕рднреА рдЪреАрдЬреЗрдВ рдХреНрдпрд╛ рд╣реИрдВ :D
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдХреНрд▓реА рдХрд╛ рдПрдХ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдРрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирдП рд░реЗрдВрдбрд░рд░ рдХреЗ рдЕрдиреБрдХреВрд▓рди рд╕реЗ рд▓рд╛рдн рдХреЗ рд▓рд┐рдП рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╢рд╛рдпрдж рд╕рдм рдХреБрдЫ рдЬрд╛рдВрдЪреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ
рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдпрд╣ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЕрднреА рддрдХ рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рдж рдкрд░ рджрд╛рдВрд╡ рди рд▓рдЧрд╛рдПрдВред рдЖрдВрддрд░рд┐рдХ Google рдРрдкреНрд╕ рдкрд░ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╕рд╛рдорд╛рди рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреБрдЫ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдирдП рд░реЗрдВрдбрд░рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрдкрдХреЗ рдЕрдкрдиреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ рдФрд░ рдЖрдкрдХреЗ рдЕрдкрдиреЗ рдЬреЛрдЦрд┐рдо рдкрд░ рд╣реИ

рдХреНрдпрд╛ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ v6-beta4 рдореЗрдВ рдореМрдЬреВрдж рд╣реИ?

рдирд╣реАрдВ рдпрд╣ рдирд╣реАрдВред рдЗрд╕ рд░реЛрдбрдореИрдк рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ i18n рд░рдирдЯрд╛рдЗрдо рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз рд╣реИред

рдЕрдкрдбреЗрдЯ @ocombe ?

рд░рдирдЯрд╛рдЗрдо i18n рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдкреАрдЖрд░ рдХреЛ рдПрдХ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдбреЗрдореЛ рдРрдк рдХреЗ рд╕рд╛рде рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рдорд┐рд▓рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред рдпрд╣ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдХреЛрдб рдЕрдиреБрд╡рд╛рдж рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрднреА рддрдХ рдХреЛрдИ рд╕реЗрд╡рд╛ рди рд╣реЛред
рдЕрднреА рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд╣реА рдиреНрдпреВрдирддрдо рд╕рдорд░реНрдерди (рд╕реНрдерд┐рд░ рддрд╛рд░) рд╣реИ, рд╣рдо рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдореИрдВ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХрд╛рд░реНрдп рдХрд░реВрдВрдЧрд╛, рдФрд░ рдлрд┐рд░ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдФрд░ рдЪрд░ рдХреЗ рд╕рд╛рде рдЧрддрд┐рд╢реАрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ)ред
рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдХреЛрдб рдЕрдиреБрд╡рд╛рдж рдХреА рд╕реЗрд╡рд╛ рдХрд░реЗрдВрдЧреЗред
рдЬреИрд╕реЗ рд╣реА рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдпрд╣ рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рд╡рд┐рд▓реАрди рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЖрдкрдХреЛ рдПрдХ рдирдП рдкреНрд░рдореБрдЦ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рдиреА рдкрдбрд╝реЗрдЧреАред

@ocombe i Heart i18n рдлреАрдЪрд░реНрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА v4.3 рдореЗрдВ рдпрд╣рд╛рдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП !! рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд░рд┐рд▓реАрдЬ рд▓реЗрдХрд┐рди i18n рдкрд░ рдХреБрдЫ рднреА рдирд╣реАрдВред рдХреНрдпрд╛ рдХреЛрдгреАрдп рдЯреАрдо рдореИрдиреЗрдЬрд░ рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рдХрд╛рдо/рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЖрд╡рдВрдЯрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдореИрдВ рдЖрдкрдХреЛ рдЕрдХреЗрд▓реЗ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдВ рдпрд╛ рджреЛ рджреЗрд╡ рдЬрд▓реНрджреА рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ i 18n рдлреАрдЪрд░ рд╣реИ рдЬреЛ рдХреЛрдгреАрдп рдХреЛ рдмрд┐рдЬрдиреЗрд╕ рдРрдк/рдмрдбрд╝реЗ рдРрдк рдХреЗ рд╕рд╛рде рддреНрд╡рд░рд┐рдд рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рдмрдбрд╝реЗ рдРрдк рдХреЗ рд▓рд┐рдП рдпреЗ рджреЛ рдлреАрдЪрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рдХреНрдпрд╛ рдЖрдкрдХреЛ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛? рдзрдиреНрдпрд╡рд╛рдж

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рд╣рдо @ocombe рд╕реЗ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдореЗрдВ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╕рднреА рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдзрдиреНрдпрд╡рд╛рдж рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХреЛрдИ рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдирд╣реАрдВ рд╣реИ рддреЛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕рдиреЗ рдЙрдирд╕реЗ рдирд╣реАрдВ рдкреВрдЫрд╛ рдерд╛ред рдмрд╕ рдЙрд╕реЗ рдХрд░рдиреЗ рджреЛ, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЬрдм рдпрд╣ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрдЧреА рддреЛ рд╣рдореЗрдВ рдкрдЫрддрд╛рд╡рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рд╕рд┐рд░реНрдл рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП...

рдореЗрд░реЗ рдкрд╛рд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЙрдкрдХрд░рдг рд╣реИ, рдЬрд┐рд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдСрд░реЗрд▓рд┐рдпрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ json рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╢рд╛рдорд┐рд▓ рд╣реИ - рдпрд╣ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗрдмрдкреИрдХ рдЖрдкрдХреЛ рд╕реАрдзреЗ json рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдкрдХреА ts json , рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдЙрди рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рддрдХ рдЖрд╕рд╛рди рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред

рдпрд╣ рдЯреВрд▓ рдПрдВрдЧреБрд▓рд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ - рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрд╛ рдПрдВрдЧреБрд▓рд░ рдЯреВрд▓рд┐рдВрдЧ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдЙрдзрд╛рд░ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред рдЗрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╡реЗрдмрдкреИрдХ рд▓реЛрдбрд░ рднреА рд╣реИ - рдбреЙрдХреНрд╕ рдореЗрдВ рд▓рд┐рдВрдХ рджреЗрдЦреЗрдВред

https://www.npmjs.com/package/gulp-translate

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЖрд╕рд╛рди рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдпрд╛ @ocombe рджреНрд╡рд╛рд░рд╛ рдкреЙрд▓реАрдлрд┐рд▓)ред

рд╣рдо рд╕рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд░реВрдкреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд░реВрдк рддрддреНрд╡ рдХреЗ рдЧреБрдг рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

loginForm = [
  {
    type: 'email',
    placeholder: 'EMAILPLACEHOLDER' // "Your email"
  },
  {
    type: 'password,
    placeholder: 'PASSWORDPLACEHOLDER' // "Your password"
  }
];

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо ngx-translate рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:

<input *ngFor="let ele of loginForm" [type]="ele.type" [placeholder]="ele.placeholder | translate">

рдЕрдм рд╣рдо Angular i18n рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рд╕рднреА рддрд╛рд░ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдВрдЧреБрд▓рд░ i18n рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдорд╛рд░реА рд╕реНрдерд┐рддрд┐ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рд░рд▓ рджрд┐рдЦрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рдорд╛рд░реЗ рд╕рднреА рдЧреНрд░рдВрде рд╕реНрдерд┐рд░рд╛рдВрдХ рдореЗрдВ рдкреВрд░реНрд╡-рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВ, рдФрд░ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ x18n рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рддрд░рд╣ рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИ

placeholder: 'I18N:description|meaning@<strong i="16">@PASSWORDPLACEHOLDER</strong>:Your password'

рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЗрд╕рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

placeholder: 'Your password'

рдХреНрдпрд╛ рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд░рдирдЯрд╛рдЗрдо i18n рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдПрдХ рдкрд╛рдЗрдк рдореЗрдВ рдирдИ i18n рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЛ рдЙрдирдХреЗ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдзрд╛рдЧрд╛ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЦреЛрд▓рд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдХреЛрдгреАрдп рдореЗрдВ рдмрд╣реБрднрд╛рд╖реА рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдореБрдЦ рд░реБрдЪрд┐ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдПрдЪрдЯреАрдПрдордПрд▓ рдФрд░ рдШрдЯрдХ-рдХреЛрдб рджреЛрдиреЛрдВ рдЧреНрд░рдВрдереЛрдВ рдХреЛ рдмрд╛рд░реАрдХреА рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред
ocombe рдХреГрдкрдпрд╛ рд╕рднреА рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░реНрд╕ рдХреЛ рдЕрд▓рд░реНрдЯ рднреЗрдЬрдирд╛ рди рднреВрд▓реЗрдВ рдХрд┐ рдпрд╣ рдХрдм рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ рдХрд┐ рдордИ 2018 рддрдХ рдЖрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдФрд░ рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

@ocombe рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рд░рдирдЯрд╛рдЗрдо рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЗрд╡реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдпрд╛ рдпрд╣ рдкреБрд░рд╛рдиреЗ рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛?

рдпрд╣ рдХреЗрд╡рд▓ рдЖрдЗрд╡реА рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рдЖрдк рдЕрднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ

рдЖрдкрдХреА рдХрдбрд╝реА рдореЗрд╣рдирдд @ocombe рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рд╣рдо рдЗрди рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдХрд┐рддрдиреА рдЬрд▓реНрджреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдкрд░ рдХреЛрдИ рд╢рдмреНрдж?

рдЖрдЗрд╡реА рдХреЛ рдЕрднреА рдПрдХ рдкреВрд░реНрд╡-рд░рд┐рд▓реАрдЬрд╝ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдХреЛрдгреАрдп 6 рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕ рд╕рдордп Ivy рдкреНрд░реА-рд░рд┐рд▓реАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрди рдирдИ 18n рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдЕрднреА рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдЪреНрдЫреА рдкреНрд░рдЧрддрд┐ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдЕрднреА рдЗрд╕ рдкрд░ рдкреВрд░рд╛ рд╕рдордп рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ)ред рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдпрд╣рд╛рдВ рдПрдХ рдЕрдкрдбреЗрдЯ рдкреЛрд╕реНрдЯ рдХрд░реВрдВрдЧрд╛

рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж @ocombe ! рдЖрдкрдХреА рдореЗрд╣рдирдд рд╕реЗ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЛ рдлрд╛рдпрджрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рд╣рдо рд╕рдм рдЗрд╕рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддреЗ рд╣реИрдВ!

@ocombe рдХреНрдпрд╛ ts рдореЗрдВ рд╕реНрдерд┐рд░ рдЕрдиреБрд╡рд╛рдж рдЕрднреА рднреА рдирд┐рдпреЛрдЬрд┐рдд рд╣реИрдВ? рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рд╕рдВрдХрд▓рди рд╕рдордп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди, рд╕рдВрднрд╡рддрдГ рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рдеред
рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреНрдпрд╛ рд╣рдо рдХрд╕реНрдЯрдо ts рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдХреЛ ng build рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдмрд┐рдирд╛ рдирд┐рдХрд╛рд▓реЗ рдкреНрд▓рдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ?

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ @TinyMan рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдЖрдкрдХрд╛ рдорддрд▓рдм рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ (рдЬреИрд╕реЗ рдпрд╣ рдЕрднреА рд╣реИ), рдпрд╛ рдЯреАрдПрд╕ рдХреЛрдб рдореЗрдВ рдЕрдиреБрд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ (рдЯреЗрдореНрдкрд▓реЗрдЯ рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реИ)?

@ocombe рдореЗрд░рд╛ рдорддрд▓рдм ts рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдпрд╛ DI/рд░рдирдЯрд╛рдЗрдо рдЕрдиреБрд╡рд╛рдж рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рд╕рдВрдХрд▓рди рд╕рдордп рдЕрдиреБрд╡рд╛рдж рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдХреЗ рд▓рд┐рдПред рд╕реА рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рддрд░рд╣ред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ vicb рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереА:

  • рд╣рдо рд╕реНрдерд┐рд░ рдЕрдиреБрд╡рд╛рджреЛрдВ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЖрдЬ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ - рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдмреЗрд╣рддрд░ perf рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐ рд▓реЛрдХреЗрд▓ рдРрдк рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг,

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ:

export const Notifications = {
    newComment: i18n("New comment notification@@newComment", "New comment on your story !"),
    newStory: i18n("New story notification@@newStory", "{{0}} wrote a new story !"),
}

рдФрд░ рдлрд┐рд░ рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (fr рдореЗрдВ):

export const Notifications = {
    newComment: "Un nouveau commentaire a ├йt├й ajout├й a votre article !",
    newStory: "{{0}} a ├йcrit un nouvel article !",
}

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдореИрдВ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдорд╛рд░реНрдХрд░ рдХреЗ рд╕рд╛рде рдПрдирдЬреАрдПрдХреНрд╕-рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ (рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ i18n ), рдФрд░ рдЬрдм рдореБрдЭреЗ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддреЛ рдореБрдЭреЗ this.translate.instant(Notifications.newStory, ["TinyMan"]) рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ + рдкреНрд░рдХреНрд╖реЗрдкред рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ рдХреЛ рдХреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ Notifications.newComment рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди рд╡рд┐рдзрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдЖрдИрд╕реАрдпреВ рдФрд░ рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди рдХрд░рддреА рд╣реИ (рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдкрд╣рд▓реЗ рд╣реА рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)

Notification.newStory // {{0}} a ├йcrit un nouvel article, static string, no runtime translation
template(Notification.newStory, "TinyMan") // TinyMan a ├йcrit un nouvel article !

рдпрд╣рд╛рдВ рд╣рдо рдХреЗрд╡рд▓ HTTP рдЕрдиреБрд░реЛрдз рдФрд░ рд╕реЗрд╡рд╛ рдУрд╡рд░рд╣реЗрдб рдХреЗ рдЕрдиреБрд╡рд╛рдж рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ?

рдЖрдк рдЬреЛ рд╡рд░реНрдгрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ i18n рдХреЗ рд░реЛрдбрдореИрдк рдкрд░ рд╣реИред
рдлрд┐рд▓рд╣рд╛рд▓, https://github.com/ngx-translate/i18n-polyfill рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

@TinyMan рдореБрдЭреЗ рдЕрднреА рддрдХ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдпрд╛ рд╡реИрд╢реНрд╡рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрдЧрд╛ред рджреЛрдиреЛрдВ рд╕рдВрднрд╡ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╕реЗрд╡рд╛ рдХреЗ рднреА рдмрд╣реБрдд рд╕рд╛рд░реЗ рдлрд╛рдпрджреЗ рд╣реИрдВ: рдЖрдк рдЗрд╕реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдирдХрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЗрд╕реЗ рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓/рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рднреА рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ Google рдХреНрд▓реЛрдЬрд░ i18n ( goog.getMsg рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рдЬреЛ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдХрд╛рд░реНрдп рд╣реИ, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдзреНрд╡рдЬ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рд╕реЗрд╡рд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╡рд╣ рдзреНрд╡рдЬ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпреЛрдВ рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдФрд░ рдХреЛрдб рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛

@ocombe рдореИрдВ рдпрд╣рд╛рдВ рднреА рдЕрдкрдирд╛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЖрдк рдЗрд╕ рдкрд░ рдЬреЛ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВ рдЙрд╕рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдореЗрд░реЗ рдХрд╛рдо рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рд╕рд╣рд╛рдпрдХ рд╣реЛрдЧрд╛ред рдПрдХ рдкреНрд░рд╢реНрди: рдХреНрдпрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ, рдпрд╛ _will_ рдПрдУрдЯреА рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рдмрдВрдбрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдкрд╛рда рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╕рдордп, рд╕рд╣реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдирдЯрд╛рдЗрдо рдкрд░ xlf рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ?

рддреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЖрдкрдХреЛ рдкреНрд░рддрд┐ рднрд╛рд╖рд╛ 1 xlf рдлрд╝рд╛рдЗрд▓ рдкреНрд▓рд╕ 5 рдпрд╛ 6 рдмрдВрдбрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЕрднреА, рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 10 рднрд╛рд╖рд╛рдПрдБ рд╣реИрдВ рдФрд░ AOT рдЗрд╕рдХреА 50 рд╕реЗ рдЕрдзрд┐рдХ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕рдВрдХрд▓рди рдХрд░рддрд╛ рд╣реИ: рдкреНрд░рддрд┐ рднрд╛рд╖рд╛ рдмрдВрдбрд▓ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ...

рдореИрдВ рдЙрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдпрд╛ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдПрдУрдЯреА рд╕рдВрдХрд▓рди рд╣реЛ рд▓реЗрдХрд┐рди рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдХреЗрд╡рд▓ 1 рд╕реЗрдЯ рдХреЗ рд╕рд╛рдеред

рд╣рд╛рдБ, рд╣рдо рдЖрдЗрд╡реА рдХреЗ рд╕рд╛рде рдпрд╣реА рдХрд░реЗрдВрдЧреЗ, рд░рдирдЯрд╛рдЗрдо i18n
рдЕрдкрдиреЗ рдРрдк рдХреЛ рдПрдХ рдмрд╛рд░ рдмрдВрдбрд▓ рдХрд░реЗрдВ, рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЕрдиреБрд╡рд╛рдж рд▓реЛрдб рдХрд░реЗрдВ (рдЖрдк рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЛ рдЖрд▓рд╕реА рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)

@ocombe рдХрд┐ред рд╣реИред рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдпред

рдпрд╣ рдореБрдЭреЗ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЦреБрд╢ рдХрд░рддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!

рдмрд╛рд╣рд░реА рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рдмрд┐рдирд╛ i18n рд╕реБрд╡рд┐рдзрд╛ рдореЗрд░реЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреЗрдХрд╛рд░ рд╣реИред

@ocombe рд╣реИрд▓реЛ рдУрд▓рд┐рд╡рд┐рдпрд░!
рдХреЛрдИ рдЕрдкрдбреЗрдЯреНрд╕?

рдзрдиреНрдпрд╡рд╛рдж!

рдЕрдЧрд░ рдРрд╕рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЖрдЗрд╡реА рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ рдПрдВрдЧреБрд▓рд░ 7 (рд╕рд┐рддрдВрдмрд░/рдЕрдХреНрдЯреВрдмрд░ 2018) рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИред

рдПрдВрдЧреБрд▓рд░ 7 рджреНрд╡рд╛рд░рд╛ рдпрд╣ рдореБрджреНрджрд╛ рджреЛ рд╕рд╛рд▓ рдкреБрд░рд╛рдирд╛ рдПрд▓рдУрдПрд▓ рд╣реЛрдЧрд╛ред
рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдЗрд╡реА рд╡рд╣ рдЪреАрдЬ рд░рд╣реА рд╣реИ рдЬрд┐рд╕рдиреЗ рдЗрд╕ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рджреЗрд░реА рдХреА рд╣реИ ...

@ocombe , рдпрд╣ рд╕реБрдирдХрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ред рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рд╡рд┐рд░рд╛рд╕рдд i18n рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИред рдЬреЗрдПрд╕ рдореЗрдВ рдЗрд╕реЗ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдиреЗ рд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд░рд▓ рдЪреАрдЬреЗрдВ рдХрд░рдирд╛ рдмреЗрд╣рдж рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

  • рдЧрддрд┐рд╢реАрд▓ рдШрдЯрдХ
  • рддреГрддреАрдп рдкрдХреНрд╖ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рдХреБрдЫ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдкрд╛рда рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИ
  • рдЧрддрд┐рд╢реАрд▓ рдкреБрд╖реНрдЯрд┐рдХрд░рдг рдореЛрдб рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ
  • рд╣рдорд╛рд░реА рдПрдкреАрдЖрдИ рддреНрд░реБрдЯрд┐ types рджреЗрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣рдореЗрдВ рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рдВрдЪрд╛рд▓рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрдард┐рди рд╣реЛрдЧрд╛ред
  • рдЬреИрд╕рд╛ рдХрд┐ рдХреЛрдгреАрдп рдЯреАрдо рд╕реБрдЭрд╛рд╡ рджреЗрддреА рд╣реИ, рд╣рдо TitleService рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдкрд╛рда рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ!

рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдВрдЧреБрд▓рд░ рдЯреАрдо рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯрддреА рд╣реИ ...

рд╣рд╛рдп @ vincentjames501 ,
рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдореЗрдВ рд╣рдордиреЗ рд╡рд╣реА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬреЛ рдЖрдк рдЕрднреА рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рдиреА рд╡рд╛рд▓рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рдкрд╣рд▓реЗ рдмрддрд╛рдП рдЧрдП i18n-polyfill рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛, рдФрд░ рдЕрдм рддрдХ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХрдорд╛рддреНрд░ рдХрдореА рд╣рдорд╛рд░реЗ рдРрдк рдХреЗ рдмрдВрдбрд▓реЛрдВ рдХрд╛ рдЖрдХрд╛рд░ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди рдЕрдиреБрд╡рд╛рдж рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдмрдВрдбрд▓ рдореЗрдВ рд╡реЗ рд╕рднреА рдЕрдВрджрд░ рд╣реИрдВ (рд╣рдордиреЗ рдмрдВрдбрд▓ рдХреЛ рдХреЗрд╡рд▓ рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЕрдиреБрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдирд┐рдХрд╛рд▓рд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рд╕рд┐рд░реНрдл рдЙрдкрджреНрд░рд╡ рд╣реИ рдХрд┐ рд╣рдо рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдЗрд╡реА рдХреЗ рдмрд╛рд╣рд░ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдЪреАрдпрд░реНрд╕,

рдореИрдВрдиреЗ рдПрдХ рдЕрдиреБрд╡рд╛рдж рдорд╛рдирдЪрд┐рддреНрд░ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдХреА Environment.ts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреБрдирдГ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдореБрджреНрджреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕рднреА рдмрдВрдбрд▓реЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХрдорд╛рддреНрд░ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдИрд╡реЗ рд╕рд╛рдЗрдЯ рдЕрд▓рдЧ рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рднрд╛рд╖рд╛ рдмрджрд▓рддрд╛ рд╣реИ рддреЛ рдореЗрд░реА рд╕рд╛рдЗрдЯ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддреА рдХрд┐ рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреБрд╢ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХреГрдд рд╣реИ рдпрд╛ рдирд╣реАрдВ ...

@ocombe рдХреЛрдгреАрдп 6 рдореЗрдВ рдХреЛрдИ рдЦрдмрд░?

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдХреЛрдгреАрдп v6 рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╣рдо рдЖрдЗрд╡реА рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ рдЬреЛ рдХрд┐ v7 рдХреЗ рд▓рд┐рдП рдпреЛрдЬрдирд╛рдмрджреНрдз рд╣реИред

@ocombe рдХреНрдпрд╛ рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рд▓реЙрдХ рдХрд░ рджреЗрдВ, рддрд╛рдХрд┐ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдиреЗ рдкрд░ рдХреЗрд╡рд▓ рдЯреАрдо рд╣реА рд╕рд╛рд░реНрдердХ рдЕрдкрдбреЗрдЯ рджреЗ рд╕рдХреЗ рдФрд░ рд╣рдо рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрдиреЛрдВ рд╕реЗ рдмрдЪреЗрдВ рдЬрд┐рдирдХрд╛ рдЖрдк рдЙрддреНрддрд░ рджреЗрддреЗ рд░рд╣рддреЗ рд╣реИрдВ?

рд╡рд░реНрддрдорд╛рди рдХреЛрдгреАрдп рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╣реИрдХ ng-template рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рджреГрд╢реНрдп рдмрдирд╛ рд░рд╣рд╛ рд╣реИ:

<ng-template #messagetotranslate i18n>This message should be translated</ng-template>

рдФрд░ рдлрд┐рд░ рдШрдЯрдХ ts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ:

@ViewChild('messagetotranslate') messagetotranslate: TemplateRef<any>;

createTranslatedMessage(): string {
  return this.messagetotranslate.createEmbeddedView({}).rootNodes[0].textContent;
}

createTranslatedMessage рд╡рд┐рдзрд┐ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╕рдВрджреЗрд╢ рд▓реМрдЯрд╛рддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЙрд╕ рд╕рдВрджреЗрд╢ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕реАрдПрд▓рдЖрдИ рдЕрдиреБрд╡рд╛рдж рдЙрдкрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдПрдХреНрд╕рдПрд▓рдПрдл рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╛рд╣рд░реА рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛! рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

export const routes: Routes = [
 {
  path: '',
  component: HomeComponent,
  data: {
   title: i18n('Home'),
   breadcrumb: i18n('Home')
  }
 }
]

рдпрджрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЬрд╛рд░реА рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдХреНрдпрд╛ рд╡рд░реНрддрдорд╛рди i18n api рд╕реЗ рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛? рдХреНрдпрд╛ рдЖрдк рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдореИрдВ рдЕрдкрдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЕрднреА i18n рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реВрдВ рдпрд╛ рдХреНрдпрд╛ рдореБрдЭреЗ рдирдП i18n рдПрдкреА рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдЬрдм рдПрдВрдЧреБрд▓рд░ 7 рдЬрд╛рд░реА рд╣реЛ рдЬрд╛рдП?

рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣рдореЗрдВ рд░рди-рдЯрд╛рдЗрдо рдФрд░ рдбрд╛рдпрдиреЗрдорд┐рдХ рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рди рд╕рдкреЛрд░реНрдЯ рдХрдм рдорд┐рд▓реЗрдЧрд╛?

рд░рдирдЯрд╛рдЗрдо рдЕрдиреБрд╡рд╛рдж рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рд▓рдп рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (рдЖрдЗрд╡реА рдХреЗ рд╕рд╛рде), рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рдХ рдкрдХреНрд╖ рдЕрднреА рддрдХ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред
рдореИрдВ рдЕрднреА ICU рдХреЗ рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдореИрдВрдиреЗ рдЕрднреА рддрдХ (рд╕реЗрд╡рд╛) рдЧрддрд┐рд╢реАрд▓ рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЛ рдХреЛрдб рдХрд░рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдпрд╣ рдЕрдЧрд▓реА рдмрд╛рдд рд╣реИ рдЬреЛ рдореИрдВ рдЖрдИрд╕реАрдпреВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж рдХрд░реВрдВрдЧрд╛ред

@ vincentjames501 рдХреНрдпрд╛ рд╣рдо рдЖрдИрд╕реАрдпреВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде i18n-polyfills рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП

@ocombe , рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рд░рдирдЯрд╛рдЗрдо рдмрдирд╛рдо рдЧрддрд┐рд╢реАрд▓ рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд╢рд╛рдпрдж рдХреЛрдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рдВрдкреНрд░рджрд╛рдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВ рдЗрд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ:

  • рд░рдирдЯрд╛рдЗрдо: рдЕрдиреБрд╡рд╛рдж рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╣рд▓ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рдирд╣реАрдВ (рдЬреИрд╕реЗ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ)ред рдпрд╣ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрд╡рд╛рджреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ (рдЯреЗрдореНрдкрд▓реЗрдЯ, рдпрд╛ рдХреЛрдб рдореЗрдВ)
  • рдбрд╛рдпрдирд╛рдорд┐рдХ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рд╡рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдЗрд╕реЗ рдмрд┐рд▓реНрдб рдЯрд╛рдЗрдо рдкрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдПрдХ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП "рдЗрди рдХреЛрдб" рдЕрдиреБрд╡рд╛рджреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЖрдИрд╕реАрдпреВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдПрдХ рдЪрд░ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЕрднреА рднреА рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдорд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рд╣реИред

рдореИрдВрдиреЗ рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ i18n рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╣рдо рд░рд┐рд▓реАрдЬ рдХреЗ рдХрд░реАрдм рдкрд╣реБрдВрдЪ рд░рд╣реЗ рд╣реИрдВ, рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдгреАрдп 7 рдореЗрдВ рдЕрдВрддрд┐рдо рд╣реЛрдЧрд╛? рдпрд╛ рдореБрдЭреЗ рдЕрдиреБрд╡рд╛рдж рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

@andrei-tatar i18n рдХреЛрдгреАрдп 2 рдХреЗ рдмрд╛рдж рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреЗрд╡рд▓ рдбрд╛рдЙрдирд╕рд╛рдЗрдбреНрд╕:

  • рдХреЛрдИ рдХреЛрдб рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВ (рдпрд╣ рд╕рдорд╕реНрдпрд╛) -> рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ i18n-polyfill рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
  • рдпрджрд┐ рдЖрдк рдПрдУрдЯреА (рдЕрдиреБрд╢рдВрд╕рд┐рдд) рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдРрдк рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛
  • рдЪреВрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдРрдк рдЕрд▓рдЧ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рднрд╛рд╖рд╛ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛

рдкрд┐рдЫрд▓реЗ рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп @ngx-translate рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдВрдЧреБрд▓рд░ рдХреЗ рдмрд┐рд▓реНрдЯ рдЗрди i18n рд╕реЗ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдмрд╛рдж рдХреЗ рдЕрдкрдбреЗрдЯ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдкреЙрд▓реАрдлрд┐рд▓ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдореЗрдВ рдХреЛрдИ рд╕рдордп рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ рд╕рдВрднрд╡рдд: рдХреЛрдИ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

@ocombe

рд╣рдо рдХреЛрдгреАрдп i18n рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╢рд░реНрдд рдСрдкрд░реЗрдЯрд░ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ

https://github.com/shobhit12345

рд╣рдо рд╕рднреА рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ngSwitch рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо i18n-рдЯреИрдЧ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЙрдиреНрд╣реЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗред

рдЫрд┐рдкрд╛рдирд╛рдкреНрд░рджрд░реНрд╢рдирдЗрддрд┐рд╣рд╛рд╕

рд▓рд╛рдкрддрд╛ рдЧрддрд┐рд╢реАрд▓ рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдереЛрдбрд╝рд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдкрд░ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдорд╛рддреНрд░рд╛ рдореЗрдВ рдкрд╛рдареНрдп рдХреЛ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдЗрд╕ рддрд░рд╣ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВред рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реЛрдирд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рд╣реИ,
рдФрд░ рдлрд┐рд░ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ngFor рдФрд░ ngSwitch рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ,
рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

рдЯреА

рд╕рдВрджреЗрд╢ = ['рдпрд╣ рдкрд╣рд▓рд╛ рд╕рдВрджреЗрд╢ рд╣реИ', 'рдпрд╣ рджреВрд╕рд░рд╛ рд╕рдВрджреЗрд╢ рд╣реИ']

рдПрдЪрдЯреАрдПрдордПрд▓


i18n="@@firstMesssage">рдпрд╣ рдкрд╣рд▓рд╛ рд╕рдВрджреЗрд╢ рд╣реИ
i18n="@@secondMesssage">рдпрд╣ рджреВрд╕рд░рд╛ рд╕рдВрджреЗрд╢ рд╣реИ

рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИ - рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/angular/angular/issues/11405#issuecomment-415731284 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AGwM6jcWIpwtGxhkH1fwnVXNagRxmMnoks5uT-LxgaJpZM4J2pkr
.

рдЕрдЧрд░ рдРрд╕рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЖрдЗрд╡реА рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ рдПрдВрдЧреБрд▓рд░ 7 (рд╕рд┐рддрдВрдмрд░/рдЕрдХреНрдЯреВрдмрд░ 2018) рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИред

рдЕрдХреНрдЯреВрдмрд░ рдЖ рдЧрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдХреНрдЯреВрдмрд░ рдХреЗ рдЕрдВрдд рддрдХ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд╣реЛрдВрдЧреА?

@lizzymendivil https://is-angular-ivy-ready.firebaseapp.com рдХреЗ рдЕрдиреБрд╕рд╛рд░ Ivy 65% тАЛтАЛрдкреВрд░реНрдг рд╣реИ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ 30 рджрд┐рдиреЛрдВ рдореЗрдВ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ

рд╣рд╛рдВ, рдЖрдЗрд╡реА рдПрдХ рдорд╣реАрдиреЗ рдореЗрдВ рдЦрддреНрдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

@ocombe рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЗрд╕реЗ рд▓реЙрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдХреЗрд╡рд▓ рдЖрдк рд╣реА рдЕрдкрдбреЗрдЯ рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХреЗрдВред рдпрд╣ рд╕рднреА "рдХрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?" рдХреА рд╕рднреА рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИред рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@ocombe рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдЗрд╡реА рдЕрдм рд▓рдЧрднрдЧ 94% рдкрд░ рд╣реИ, рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рд▓ рдХреЗ рдЕрдВрдд рддрдХ рддреИрдпрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдореБрдЭреЗ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ред рдлреАрдЪрд░ рд░реЗрдбреА рдФрд░ рдмрдЧ рдлреНрд░реА (= рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп) рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИред рд╣рдо рдЕрднреА рдЬреНрдпрд╛рджрд╛рддрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред

@ocombe рдХреНрдпрд╛ рд╣рдо рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ i18n рдХреЛрдгреАрдп 8 рд╕реЗ рдкрд╣рд▓реЗ рдЖрдпрд╛ рдерд╛?

рдореБрдЭреЗ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ред рдлреАрдЪрд░ рд░реЗрдбреА рдФрд░ рдмрдЧ рдлреНрд░реА (= рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп) рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИред рд╣рдо рдЕрднреА рдЬреНрдпрд╛рджрд╛рддрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдареАрдХ рд╣реИ, рд╢реАрдШреНрд░ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреАред

рдХреЛрдИ рднреА рдЕрдкрдбреЗрдЯ @ocombe рдХрд┐ рдЬрдм рддрдХ рд╣рдореЗрдВ рдЙрдореНрдореАрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП (рд╡рд░реНрд╖ рдХреЗ рдЕрдВрдд рдореЗрдВ рдореИрдВ рдкрд┐рдЫрд▓реА рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ) "рдХреЛрдб рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рди" рднрд╛рдЧ "рдЯреЗрдореНрдкрд▓реЗрдЯ рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рди" рдХреЗ рд╕рд╛рде рдПрдВрдЧреБрд▓рд░ рдХреЗ рд╕рд╛рде I18N рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ? рд╣рдордиреЗ рдПрдирдЬреАрдПрдХреНрд╕-рдЯреНрд░рд╛рдВрд╕рд▓реЗрдЯ-рдкреЙрд▓реАрдлрд┐рд▓ рдХреЛ рдПрдВрдЧреБрд▓рд░ I18n рдлреАрдЪрд░ рдХреЗ рд╕рд╛рде рдХреНрд▓рдм рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ https://github.com/biesbjerg/ngx-translate-extract CLI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореМрдЬреВрджрд╛ xlf рдлрд╝рд╛рдЗрд▓ рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП xlf рд╕рдкреЛрд░реНрдЯ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред .

рдзрдиреНрдпрд╡рд╛рдж !

@Abekonge

рд╣рдо рд╕рднреА рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ngSwitch рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ i18n-рдЯреИрдЧ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИ - рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

рд╕рд▓рд╛рд╣ рдХреЗ рд▓рд┐рдпреЗ рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИред рдореЗрд░рд╛ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЕрднреА рднреА рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╕рд░рдгреА рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХрд╛ "рдмрд╣реБрдд" рд╣реИ, рдЬреИрд╕реЗ 10 рдпрд╛ рдЕрдзрд┐рдХ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдмрд╣реБрдд рднрд╛рд░реА рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрддрдиреЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВ рдирд╣реАрдВред рдпрджрд┐ рдпрд╣ рд╕рдВрджреЗрд╢ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╣рдо рдЫреЛрдЯреЗ i18n рдШрдЯрдХ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рд╕реНрд╡рд┐рдЪ рдФрд░ i18n рдЯреИрдЧ рд╣реЛрддреЗ рд╣реИрдВред

рдбреЗрд╡рд┐рдб

рдбреЗрди 23. рдЬрдирд╡рд░реАред 2019 рдХреЗрдПрд▓ред 19.24 рд╕реНрдХреНрд░реЗрд╡ рдПрдВрдбреНрд░рдпреВ рдмрд┐рд╕рд╛рдбрд╛ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com :

@Abekonge

рд╣рдо рд╕рднреА рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ngSwitch рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ i18n-рдЯреИрдЧ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИ - рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

рд╕рд▓рд╛рд╣ рдХреЗ рд▓рд┐рдпреЗ рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИред рдореЗрд░рд╛ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЕрднреА рднреА рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╕рд░рдгреА рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХрд╛ "рдмрд╣реБрдд" рд╣реИ, рдЬреИрд╕реЗ 10 рдпрд╛ рдЕрдзрд┐рдХ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдмрд╣реБрдд рднрд╛рд░реА рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВред

рд╡реИрд▓рд┐рдбреЗрдЯрд░ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ i18n-polifills рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреИрд╕реЗ рдХрд░реЗрдВред рдореИрдВ i18n рд╕реЗрд╡рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреБрдкреНрдд рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВред

// рдХрдВрдкреЛрдирдиреЗрдЯ рдореЗрдВ
this.crForm= this.fb.group({
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо: [''],
рдИ-рдкрд╛рд╕рд╡рд░реНрдб: [''],
}, {рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛: рдирдпрд╛ AcValidator(this.i18n).validate()}
);

// рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛

рдЖрдпрд╛рдд {AbstractControl, ValidationErrors, FormGroup, FormControl} '@angular/forms' рд╕реЗ;
{I18n } рдХреЛ '@ngx-translate/i18n-polyfill' рд╕реЗ рдЗрдВрдкреЛрд░реНрдЯ рдХрд░реЗрдВ;
рдирд┐рд░реНрдпрд╛рдд рд╡рд░реНрдЧ AcValidator{
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ (i18n: I18n)
{

}
validate() {       
    return (group: FormGroup): createAccountError => {
        if (group) {
            this.i18n("test");
}}}

рдиреАрдЪреЗ рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИ

рддреНрд░реБрдЯрд┐ рддреНрд░реБрдЯрд┐: рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ (рд╡рд╛рджреЗ рдореЗрдВ): рд▓реЗрдЦрди рддреНрд░реБрдЯрд┐: i18n рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдирд╣реАрдВ рд╣реИ
рд▓реЗрдЦрди рддреНрд░реБрдЯрд┐: i18n рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ
FormGroup.eval рдкрд░ [рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ] (acc-validator.ts:9)
FormGroup.AbstractControl._runValidator рдкрд░ (forms.js:3433)
FormGroup.AbstractControl.updateValueAndValidity рдкрд░ (forms.js:3387)
рдирдП рдлреЙрд░реНрдордЧреНрд░реБрдк рдкрд░ (forms.js:4326)
FormBuilder.group рдкрд░ (forms.js:7864)

@ocombe

.ts рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХреЙрдиреНрд╕реНрдЯ рдХреЗ рд╕рд╛рде i18n-polyfills рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ

рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдХреЙрдиреНрд╕реНрдЯ рдЧреНрд▓реЙрд╕реЗрдореЙрдбрд▓ = () => [
{
рд╢реАрд░реНрд╖рдХ: 'рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛',
рд╕рдХреНрд░рд┐рдп: рд╕рдЪ,
рдЖрдВрдХрдбрд╝реЗ: [

        [
            {
                title: 'test data',
                data: "test data."
            },
            {
                title: 'test data',
                data: "test data"
            },
            {
                title: 'test data',
                data: "test data"
            },
            {
                title: 'test data',
                data: "test data."
            },
            {
                title: 'Past Due',
                data: "test data."
            }

]]}];


{VAR_SELECT, рдЪреБрдиреЗрдВ, рдореЗрдбрд┐рдХрд▓ {рдореЗрдбрд┐рдХрд▓} рдбреЗрдВрдЯрд▓ {рдбреЗрдВрдЯрд▓} рдореЗрдбрд┐рдХрд▓ рдПрдВрдб рдбреЗрдВрдЯрд▓ {рдореЗрдбрд┐рдХрд▓ рдПрдВрдб рдбреЗрдВрдЯрд▓} рдХреИрдЯрд╛рд╕реНрдЯреНрд░реЛрдлрд┐рдХ рдПрдВрдб рдбреЗрдВрдЯрд▓ {рдХреИрдЯрд╛рд╕реНрдЯреНрд░реЙрдлрд┐рдХ рдПрдВрдб рдбреЗрдВрдЯрд▓} рдХреИрдЯрд╛рд╕реНрдЯреНрд░реЛрдлрд┐рдХ {рдХреИрдЯрд╛рд╕реНрдЯреНрд░реЙрдлрд┐рдХ}}
{VAR_SELECT, рдЪреБрдиреЗрдВ, рдореЗрдбрд┐рдХрд▓ {рдореЗрдбрд┐рдХрд▓} рдбреЗрдВрдЯрд▓ {рдбреЗрдВрдЯрд▓} рдореЗрдбрд┐рдХрд▓ ### рдФрд░ рдбреЗрдВрдЯрд▓ {рдореЗрдбрд┐рдХрд▓ рдФрд░ рдбреЗрдВрдЯрд▓}
рд╡рд┐рдкрддреНрддрд┐рдкреВрд░реНрдг ### рдФрд░ рджрдВрдд рдЪрд┐рдХрд┐рддреНрд╕рд╛{рд╡рд┐рдкрддреНрддрд┐рдкреВрд░реНрдг рдФрд░ рджрдВрдд рдЪрд┐рдХрд┐рддреНрд╕рд╛} рд╡рд┐рдкрддреНрддрд┐рдкреВрд░реНрдг {рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА} }

рдЬрдм рдореИрдВ рд╡рд┐рд╢реЗрд╖ рдЪрд░рд┐рддреНрд░ рдХреЗ рд╕рд╛рде рдЖрдИрд╕реАрдпреВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред

@ocombe i18n-polyfills рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреНрд░реЗрдбрдХреНрд░рдВрдм рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓реЗрдВ?

рдирд┐рд░реНрдпрд╛рдд рд╕реНрдерд┐рд░рд╛рдВрдХ рдорд╛рд░реНрдЧ: рдорд╛рд░реНрдЧ = [
{
рдкрде: '',
рдШрдЯрдХ: рд╣реЛрдордХрдВрдкреЛрдиреЗрдВрдЯ,
рдЖрдВрдХрдбрд╝реЗ: {
рд╢реАрд░реНрд╖рдХ: 'рдШрд░',
рдмреНрд░реЗрдбрдХреНрд░рдВрдм: 'рд╣реЛрдо'
}
}
]

@ocombe

.ts рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХреЙрдиреНрд╕реНрдЯ рдХреЗ рд╕рд╛рде i18n-polyfills рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ

рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдХреЙрдиреНрд╕реНрдЯ рдЧреНрд▓реЙрд╕реЗрдореЙрдбрд▓ = () => [
{
рд╢реАрд░реНрд╖рдХ: 'рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛',
рд╕рдХреНрд░рд┐рдп: рд╕рдЪ,
рдЖрдВрдХрдбрд╝реЗ: [

        [
            {
                title: 'test data',
                data: "test data."
            },
            {
                title: 'test data',
                data: "test data"
            },
            {
                title: 'test data',
                data: "test data"
            },
            {
                title: 'test data',
                data: "test data."
            },
            {
                title: 'Past Due',
                data: "test data."
            }

]]}];

рдЖрдк рдЗрд╕ рддрд░рд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
{
рдбреЗрдЯрд╛: 'рдЯреЗрд╕реНрдЯ рдбреЗрдЯрд╛',
рд╢реАрд░реНрд╖рдХ: this.i18n ({рдорд╛рди: 'рдирд╛рдо', рдЖрдИрдбреА: 'рдирд╛рдо'}),
}
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ I18n рдкреЙрд▓реАрдлрд┐рд▓ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВ
рдирд┐рдЬреА i18n: I18n
ts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдЙрди ts рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ngx-extractor рдФрд░ xliffmerge рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред https://www.npmjs.com/package/ngx-i18nsupport

@ рдЬрдиреНрди рд╣рд░рдЬреВ
рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, xlf рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред

рдпрд╣рд╛рдБ рдореЗрд░реА рдЕрдиреБрд╡рд╛рдж рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ:
"translate-i18n": "ng xi18n --output-path locale && ngx-extractor -i src/**/*.ts projects/**/*.ts -f xlf -o src/locale/messages.xlf && xliffmerge --profile xliffmerge.json fi en",

рдФрд░ рдпрд╣рд╛рдБ рд╣реИ xliffmerge.json

{
  "xliffmergeOptions": {
    "srcDir": "src/locale",
    "genDir": "src/locale",
    "i18nFile": "messages.xlf",
    "defaultLanguage": "en",
    "useSourceAsTarget": true
  }
}

@ рдЬрдиреНрди рд╣рд░рдЬреВ
рд╣рд╛рдБ, рдореИрдВ рдПрдХ рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ xlf рдлрд╝рд╛рдЗрд▓ рдореЗрдВ .ts рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВред

рд▓реЗрдХрд┐рди рдХреЙрдиреНрд╕ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ .ts рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╣реИ

рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдХреЙрдиреНрд╕реНрдЯ рдЧреНрд▓реЙрд╕реЗрдореЙрдбрд▓ = () => [
{
}

рдореИрдВ рдШрдЯрдХ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрдм рдореИрдВ рдХреЙрдиреНрд╕реНрдЯ рдХреЗ рд╕рд╛рде i18n рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдорд╛рди рдирд╣реАрдВ рдирд┐рдХрд╛рд▓ рд░рд╣рд╛ рд╣реИред

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдкреНрд░рджрд╛рддрд╛ рдЬреИрд╕реЗ рдХреЙрдиреНрд╕реНрдЯ рд╡реИрд▓реНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

{
    provide: glossayModel,
    useFactory: () => glossayModel()
}

рдХреЛрдб рддреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдмрд┐рдВрджреБ рдорд┐рд▓ рдЬрд╛рдПред

рдмреНрд░реЗрдбрдХреНрд░рдВрдм рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХреИрд╕реЗ рдХрд░реЗрдВ

рд╕реНрдерд┐рд░рд╛рдВрдХ рдорд╛рд░реНрдЧ: рдорд╛рд░реНрдЧ = [
{
рдкрде: './enroll-new.component',
рдШрдЯрдХ: EnrollNewComponent,
рдЖрдВрдХрдбрд╝реЗ: {
рдмреНрд░реЗрдбрдХреНрд░рдВрдм: 'рдирд╛рдорд╛рдВрдХрди'
},
}
]

рдХреНрдпрд╛ рдЖрдк рд▓реЛрдЧ рдЗрд╕ рдереНрд░реЗрдб рдХреЛ i18n-polyfill рдпрд╛ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдереНрд░реЗрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ i18n-polyfill go рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИ, рддреЛ рдЙрд╕ рд░реЗрдкреЛ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдЙрдард╛рдПрдВред
@ocombe рд╢рд╛рдпрдж рдЖрдк рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рд▓реЙрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдмрд╣реБрдд рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдм рдХреБрдЫ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд i18n рд╕рдорд░реНрдерди рдХреЛ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХрд┐рд╕ рдХреЛрдгреАрдп рд╕рдВрд╕реНрдХрд░рдг рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ?

рд╣рд╛рдБ, рдЕрднреА рдХреЗ рд▓рд┐рдП рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред
рд╣рдо рдПрдХ рдСрдкреНрдЯ-рдЗрди рдмреАрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ v8 рдХреЗ рд╕рд╛рде ivy рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд░рдирдЯрд╛рдЗрдо i18n рдЧреВрдЧрд▓ рдХреНрд▓реЛрдЬрд░ (рдЧреВрдЧрд▓ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ) рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдЧрд╛ рдЬреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рдбреАрдмрдЧ рдХрд░рдиреЗ рджреЗрдЧрд╛ (рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рд╣реИ)ред рдЕрдиреНрдп рд╕рднреА рдХреЗ рд▓рд┐рдП рдЖрдк i18n рдХреЗ рд╕рд╛рде ivy рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рд▓реЗрдХрд┐рди рдЖрдк рдЕрдиреБрд╡рд╛рдж рд▓реЛрдб рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗред рдРрдк рдРрдк рдХреЛ рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдореВрд▓ рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдЪрд▓реЗрдЧрд╛ред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд░рдирдЯрд╛рдЗрдо рд╕реЗрд╡рд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдЕрдиреБрд╡рд╛рджрд┐рдд рдкрд╛рда рд▓реМрдЯрд╛рддреА рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдо рд╕рднреА рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрдЧреНрд╕ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдВ рд░рд┐рд▓реАрдЬ рдХреЗ рдмрд╛рдж рддрдХ рд╣реА рд╕реАрдорд┐рдд рд░рд╣реЗрдВрдЧреАред v8 рдХреЗ рдЖрдиреЗ рдХреЗ рдмрд╛рдж рд╣рдо рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдХрд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рдмрд╛рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╕рдорд╛рдЪрд╛рд░ рд╣реЛрдиреЗ рдкрд░ рдореИрдВ рдПрдХ рдЕрдкрдбреЗрдЯ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдФрд░ рдЗрд╕ рдереНрд░реЗрдб рдХреЛ рдЕрдирд▓реЙрдХ рдХрд░реВрдВрдЧрд╛ред

рд╣рдо рдЬрд┐рд╕ рдирдП $localize рдЯреИрдЧ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

const name = 'World';
$localize `Hello ${name}:name!`;

рдФрд░ рдлрд┐рд░ Hello {$name}! рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╡рд╛рдж рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рд╕рдВрдХрд▓рди-рд╕рдордп (рдпрд╛ рд░рди-рдЯрд╛рдЗрдо) рдкрд░ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдЕрдм рдЙрдкрд▓рдмреНрдз рд╣реИ (рдпрджрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рд╣реИ)ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

lsim picture lsim  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

igorzg picture igorzg  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gugamm picture gugamm  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

alippai picture alippai  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

wfalkwallace picture wfalkwallace  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ