Browse Source

Feature/set up language localization for Regional Market Cluster Risks (#5145)

* Set up language localization for Regional Market Cluster Risks

* Update changelog
pull/5182/merge
rohit 20 hours ago
committed by GitHub
parent
commit
7c4cf2ca0c
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 8
      CHANGELOG.md
  2. 10
      apps/api/src/app/portfolio/portfolio.service.ts
  3. 10
      apps/api/src/app/user/user.service.ts
  4. 45
      apps/api/src/models/rules/regional-market-cluster-risk/asia-pacific.ts
  5. 45
      apps/api/src/models/rules/regional-market-cluster-risk/emerging-markets.ts
  6. 45
      apps/api/src/models/rules/regional-market-cluster-risk/europe.ts
  7. 45
      apps/api/src/models/rules/regional-market-cluster-risk/japan.ts
  8. 45
      apps/api/src/models/rules/regional-market-cluster-risk/north-america.ts
  9. 72
      apps/client/src/app/pages/i18n/i18n-page.html

8
CHANGELOG.md

@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
### Added
- Set up the language localization for the static portfolio analysis rule: _Regional Market Cluster Risks_ (Asia-Pacific)
- Set up the language localization for the static portfolio analysis rule: _Regional Market Cluster Risks_ (Emerging Markets)
- Set up the language localization for the static portfolio analysis rule: _Regional Market Cluster Risks_ (Europe)
- Set up the language localization for the static portfolio analysis rule: _Regional Market Cluster Risks_ (Japan)
- Set up the language localization for the static portfolio analysis rule: _Regional Market Cluster Risks_ (North America)
### Changed
- Improved the language localization for Catalan (`ca`)

10
apps/api/src/app/portfolio/portfolio.service.ts

@ -1272,26 +1272,36 @@ export class PortfolioService {
[
new RegionalMarketClusterRiskAsiaPacific(
this.exchangeRateDataService,
this.i18nService,
userSettings.language,
marketsAdvancedTotalInBaseCurrency,
marketsAdvanced.asiaPacific.valueInBaseCurrency
),
new RegionalMarketClusterRiskEmergingMarkets(
this.exchangeRateDataService,
this.i18nService,
userSettings.language,
marketsAdvancedTotalInBaseCurrency,
marketsAdvanced.emergingMarkets.valueInBaseCurrency
),
new RegionalMarketClusterRiskEurope(
this.exchangeRateDataService,
this.i18nService,
userSettings.language,
marketsAdvancedTotalInBaseCurrency,
marketsAdvanced.europe.valueInBaseCurrency
),
new RegionalMarketClusterRiskJapan(
this.exchangeRateDataService,
this.i18nService,
userSettings.language,
marketsAdvancedTotalInBaseCurrency,
marketsAdvanced.japan.valueInBaseCurrency
),
new RegionalMarketClusterRiskNorthAmerica(
this.exchangeRateDataService,
this.i18nService,
userSettings.language,
marketsAdvancedTotalInBaseCurrency,
marketsAdvanced.northAmerica.valueInBaseCurrency
)

10
apps/api/src/app/user/user.service.ts

@ -329,28 +329,38 @@ export class UserService {
).getSettings(user.settings.settings),
RegionalMarketClusterRiskAsiaPacific:
new RegionalMarketClusterRiskAsiaPacific(
undefined,
undefined,
undefined,
undefined,
undefined
).getSettings(user.settings.settings),
RegionalMarketClusterRiskEmergingMarkets:
new RegionalMarketClusterRiskEmergingMarkets(
undefined,
undefined,
undefined,
undefined,
undefined
).getSettings(user.settings.settings),
RegionalMarketClusterRiskEurope: new RegionalMarketClusterRiskEurope(
undefined,
undefined,
undefined,
undefined,
undefined
).getSettings(user.settings.settings),
RegionalMarketClusterRiskJapan: new RegionalMarketClusterRiskJapan(
undefined,
undefined,
undefined,
undefined,
undefined
).getSettings(user.settings.settings),
RegionalMarketClusterRiskNorthAmerica:
new RegionalMarketClusterRiskNorthAmerica(
undefined,
undefined,
undefined,
undefined,
undefined

45
apps/api/src/models/rules/regional-market-cluster-risk/asia-pacific.ts

@ -1,5 +1,6 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { UserSettings } from '@ghostfolio/common/interfaces';
import { Settings } from './interfaces/rule-settings.interface';
@ -10,10 +11,13 @@ export class RegionalMarketClusterRiskAsiaPacific extends Rule<Settings> {
public constructor(
protected exchangeRateDataService: ExchangeRateDataService,
private i18nService: I18nService,
languageCode: string,
currentValueInBaseCurrency: number,
asiaPacificValueInBaseCurrency: number
) {
super(exchangeRateDataService, {
languageCode,
key: RegionalMarketClusterRiskAsiaPacific.name
});
@ -28,26 +32,40 @@ export class RegionalMarketClusterRiskAsiaPacific extends Rule<Settings> {
if (asiaPacificMarketValueRatio > ruleSettings.thresholdMax) {
return {
evaluation: `The Asia-Pacific market contribution of your current investment (${(asiaPacificMarketValueRatio * 100).toPrecision(3)}%) exceeds ${(
ruleSettings.thresholdMax * 100
).toPrecision(3)}%`,
evaluation: this.i18nService.getTranslation({
id: 'rule.regionalMarketClusterRiskAsiaPacific.false.max',
languageCode: this.getLanguageCode(),
placeholders: {
thresholdMax: (ruleSettings.thresholdMax * 100).toPrecision(3),
valueRatio: (asiaPacificMarketValueRatio * 100).toPrecision(3)
}
}),
value: false
};
} else if (asiaPacificMarketValueRatio < ruleSettings.thresholdMin) {
return {
evaluation: `The Asia-Pacific market contribution of your current investment (${(asiaPacificMarketValueRatio * 100).toPrecision(3)}%) is below ${(
ruleSettings.thresholdMin * 100
).toPrecision(3)}%`,
evaluation: this.i18nService.getTranslation({
id: 'rule.regionalMarketClusterRiskAsiaPacific.false.min',
languageCode: this.getLanguageCode(),
placeholders: {
thresholdMin: (ruleSettings.thresholdMin * 100).toPrecision(3),
valueRatio: (asiaPacificMarketValueRatio * 100).toPrecision(3)
}
}),
value: false
};
}
return {
evaluation: `The Asia-Pacific market contribution of your current investment (${(asiaPacificMarketValueRatio * 100).toPrecision(3)}%) is within the range of ${(
ruleSettings.thresholdMin * 100
).toPrecision(
3
)}% and ${(ruleSettings.thresholdMax * 100).toPrecision(3)}%`,
evaluation: this.i18nService.getTranslation({
id: 'rule.regionalMarketClusterRiskAsiaPacific.true',
languageCode: this.getLanguageCode(),
placeholders: {
thresholdMax: (ruleSettings.thresholdMax * 100).toPrecision(3),
thresholdMin: (ruleSettings.thresholdMin * 100).toPrecision(3),
valueRatio: (asiaPacificMarketValueRatio * 100).toPrecision(3)
}
}),
value: true
};
}
@ -70,7 +88,10 @@ export class RegionalMarketClusterRiskAsiaPacific extends Rule<Settings> {
}
public getName() {
return 'Asia-Pacific';
return this.i18nService.getTranslation({
id: 'rule.regionalMarketClusterRiskAsiaPacific',
languageCode: this.getLanguageCode()
});
}
public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings {

45
apps/api/src/models/rules/regional-market-cluster-risk/emerging-markets.ts

@ -1,5 +1,6 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { UserSettings } from '@ghostfolio/common/interfaces';
import { Settings } from './interfaces/rule-settings.interface';
@ -10,10 +11,13 @@ export class RegionalMarketClusterRiskEmergingMarkets extends Rule<Settings> {
public constructor(
protected exchangeRateDataService: ExchangeRateDataService,
private i18nService: I18nService,
languageCode: string,
currentValueInBaseCurrency: number,
emergingMarketsValueInBaseCurrency: number
) {
super(exchangeRateDataService, {
languageCode,
key: RegionalMarketClusterRiskEmergingMarkets.name
});
@ -30,26 +34,40 @@ export class RegionalMarketClusterRiskEmergingMarkets extends Rule<Settings> {
if (emergingMarketsValueRatio > ruleSettings.thresholdMax) {
return {
evaluation: `The Emerging Markets contribution of your current investment (${(emergingMarketsValueRatio * 100).toPrecision(3)}%) exceeds ${(
ruleSettings.thresholdMax * 100
).toPrecision(3)}%`,
evaluation: this.i18nService.getTranslation({
id: 'rule.regionalMarketClusterRiskEmergingMarkets.false.max',
languageCode: this.getLanguageCode(),
placeholders: {
thresholdMax: (ruleSettings.thresholdMax * 100).toPrecision(3),
valueRatio: (emergingMarketsValueRatio * 100).toPrecision(3)
}
}),
value: false
};
} else if (emergingMarketsValueRatio < ruleSettings.thresholdMin) {
return {
evaluation: `The Emerging Markets contribution of your current investment (${(emergingMarketsValueRatio * 100).toPrecision(3)}%) is below ${(
ruleSettings.thresholdMin * 100
).toPrecision(3)}%`,
evaluation: this.i18nService.getTranslation({
id: 'rule.regionalMarketClusterRiskEmergingMarkets.false.min',
languageCode: this.getLanguageCode(),
placeholders: {
thresholdMin: (ruleSettings.thresholdMin * 100).toPrecision(3),
valueRatio: (emergingMarketsValueRatio * 100).toPrecision(3)
}
}),
value: false
};
}
return {
evaluation: `The Emerging Markets contribution of your current investment (${(emergingMarketsValueRatio * 100).toPrecision(3)}%) is within the range of ${(
ruleSettings.thresholdMin * 100
).toPrecision(
3
)}% and ${(ruleSettings.thresholdMax * 100).toPrecision(3)}%`,
evaluation: this.i18nService.getTranslation({
id: 'rule.regionalMarketClusterRiskEmergingMarkets.true',
languageCode: this.getLanguageCode(),
placeholders: {
thresholdMax: (ruleSettings.thresholdMax * 100).toPrecision(3),
thresholdMin: (ruleSettings.thresholdMin * 100).toPrecision(3),
valueRatio: (emergingMarketsValueRatio * 100).toPrecision(3)
}
}),
value: true
};
}
@ -72,7 +90,10 @@ export class RegionalMarketClusterRiskEmergingMarkets extends Rule<Settings> {
}
public getName() {
return 'Emerging Markets';
return this.i18nService.getTranslation({
id: 'rule.regionalMarketClusterRiskEmergingMarkets',
languageCode: this.getLanguageCode()
});
}
public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings {

45
apps/api/src/models/rules/regional-market-cluster-risk/europe.ts

@ -1,5 +1,6 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { UserSettings } from '@ghostfolio/common/interfaces';
import { Settings } from './interfaces/rule-settings.interface';
@ -10,10 +11,13 @@ export class RegionalMarketClusterRiskEurope extends Rule<Settings> {
public constructor(
protected exchangeRateDataService: ExchangeRateDataService,
private i18nService: I18nService,
languageCode: string,
currentValueInBaseCurrency: number,
europeValueInBaseCurrency: number
) {
super(exchangeRateDataService, {
languageCode,
key: RegionalMarketClusterRiskEurope.name
});
@ -28,26 +32,40 @@ export class RegionalMarketClusterRiskEurope extends Rule<Settings> {
if (europeMarketValueRatio > ruleSettings.thresholdMax) {
return {
evaluation: `The Europe market contribution of your current investment (${(europeMarketValueRatio * 100).toPrecision(3)}%) exceeds ${(
ruleSettings.thresholdMax * 100
).toPrecision(3)}%`,
evaluation: this.i18nService.getTranslation({
id: 'rule.regionalMarketClusterRiskEurope.false.max',
languageCode: this.getLanguageCode(),
placeholders: {
thresholdMax: (ruleSettings.thresholdMax * 100).toPrecision(3),
valueRatio: (europeMarketValueRatio * 100).toPrecision(3)
}
}),
value: false
};
} else if (europeMarketValueRatio < ruleSettings.thresholdMin) {
return {
evaluation: `The Europe market contribution of your current investment (${(europeMarketValueRatio * 100).toPrecision(3)}%) is below ${(
ruleSettings.thresholdMin * 100
).toPrecision(3)}%`,
evaluation: this.i18nService.getTranslation({
id: 'rule.regionalMarketClusterRiskEurope.false.min',
languageCode: this.getLanguageCode(),
placeholders: {
thresholdMin: (ruleSettings.thresholdMin * 100).toPrecision(3),
valueRatio: (europeMarketValueRatio * 100).toPrecision(3)
}
}),
value: false
};
}
return {
evaluation: `The Europe market contribution of your current investment (${(europeMarketValueRatio * 100).toPrecision(3)}%) is within the range of ${(
ruleSettings.thresholdMin * 100
).toPrecision(
3
)}% and ${(ruleSettings.thresholdMax * 100).toPrecision(3)}%`,
evaluation: this.i18nService.getTranslation({
id: 'rule.regionalMarketClusterRiskEurope.true',
languageCode: this.getLanguageCode(),
placeholders: {
thresholdMax: (ruleSettings.thresholdMax * 100).toPrecision(3),
thresholdMin: (ruleSettings.thresholdMin * 100).toPrecision(3),
valueRatio: (europeMarketValueRatio * 100).toPrecision(3)
}
}),
value: true
};
}
@ -70,7 +88,10 @@ export class RegionalMarketClusterRiskEurope extends Rule<Settings> {
}
public getName() {
return 'Europe';
return this.i18nService.getTranslation({
id: 'rule.regionalMarketClusterRiskEurope',
languageCode: this.getLanguageCode()
});
}
public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings {

45
apps/api/src/models/rules/regional-market-cluster-risk/japan.ts

@ -1,5 +1,6 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { UserSettings } from '@ghostfolio/common/interfaces';
import { Settings } from './interfaces/rule-settings.interface';
@ -10,10 +11,13 @@ export class RegionalMarketClusterRiskJapan extends Rule<Settings> {
public constructor(
protected exchangeRateDataService: ExchangeRateDataService,
private i18nService: I18nService,
languageCode: string,
currentValueInBaseCurrency: number,
japanValueInBaseCurrency: number
) {
super(exchangeRateDataService, {
languageCode,
key: RegionalMarketClusterRiskJapan.name
});
@ -28,26 +32,40 @@ export class RegionalMarketClusterRiskJapan extends Rule<Settings> {
if (japanMarketValueRatio > ruleSettings.thresholdMax) {
return {
evaluation: `The Japan market contribution of your current investment (${(japanMarketValueRatio * 100).toPrecision(3)}%) exceeds ${(
ruleSettings.thresholdMax * 100
).toPrecision(3)}%`,
evaluation: this.i18nService.getTranslation({
id: 'rule.regionalMarketClusterRiskJapan.false.max',
languageCode: this.getLanguageCode(),
placeholders: {
thresholdMax: (ruleSettings.thresholdMax * 100).toPrecision(3),
valueRatio: (japanMarketValueRatio * 100).toPrecision(3)
}
}),
value: false
};
} else if (japanMarketValueRatio < ruleSettings.thresholdMin) {
return {
evaluation: `The Japan market contribution of your current investment (${(japanMarketValueRatio * 100).toPrecision(3)}%) is below ${(
ruleSettings.thresholdMin * 100
).toPrecision(3)}%`,
evaluation: this.i18nService.getTranslation({
id: 'rule.regionalMarketClusterRiskJapan.false.min',
languageCode: this.getLanguageCode(),
placeholders: {
thresholdMin: (ruleSettings.thresholdMin * 100).toPrecision(3),
valueRatio: (japanMarketValueRatio * 100).toPrecision(3)
}
}),
value: false
};
}
return {
evaluation: `The Japan market contribution of your current investment (${(japanMarketValueRatio * 100).toPrecision(3)}%) is within the range of ${(
ruleSettings.thresholdMin * 100
).toPrecision(
3
)}% and ${(ruleSettings.thresholdMax * 100).toPrecision(3)}%`,
evaluation: this.i18nService.getTranslation({
id: 'rule.regionalMarketClusterRiskJapan.true',
languageCode: this.getLanguageCode(),
placeholders: {
thresholdMax: (ruleSettings.thresholdMax * 100).toPrecision(3),
thresholdMin: (ruleSettings.thresholdMin * 100).toPrecision(3),
valueRatio: (japanMarketValueRatio * 100).toPrecision(3)
}
}),
value: true
};
}
@ -70,7 +88,10 @@ export class RegionalMarketClusterRiskJapan extends Rule<Settings> {
}
public getName() {
return 'Japan';
return this.i18nService.getTranslation({
id: 'rule.regionalMarketClusterRiskJapan',
languageCode: this.getLanguageCode()
});
}
public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings {

45
apps/api/src/models/rules/regional-market-cluster-risk/north-america.ts

@ -1,5 +1,6 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { UserSettings } from '@ghostfolio/common/interfaces';
import { Settings } from './interfaces/rule-settings.interface';
@ -10,10 +11,13 @@ export class RegionalMarketClusterRiskNorthAmerica extends Rule<Settings> {
public constructor(
protected exchangeRateDataService: ExchangeRateDataService,
private i18nService: I18nService,
languageCode: string,
currentValueInBaseCurrency: number,
northAmericaValueInBaseCurrency: number
) {
super(exchangeRateDataService, {
languageCode,
key: RegionalMarketClusterRiskNorthAmerica.name
});
@ -28,26 +32,40 @@ export class RegionalMarketClusterRiskNorthAmerica extends Rule<Settings> {
if (northAmericaMarketValueRatio > ruleSettings.thresholdMax) {
return {
evaluation: `The North America market contribution of your current investment (${(northAmericaMarketValueRatio * 100).toPrecision(3)}%) exceeds ${(
ruleSettings.thresholdMax * 100
).toPrecision(3)}%`,
evaluation: this.i18nService.getTranslation({
id: 'rule.regionalMarketClusterRiskNorthAmerica.false.max',
languageCode: this.getLanguageCode(),
placeholders: {
thresholdMax: (ruleSettings.thresholdMax * 100).toPrecision(3),
valueRatio: (northAmericaMarketValueRatio * 100).toPrecision(3)
}
}),
value: false
};
} else if (northAmericaMarketValueRatio < ruleSettings.thresholdMin) {
return {
evaluation: `The North America market contribution of your current investment (${(northAmericaMarketValueRatio * 100).toPrecision(3)}%) is below ${(
ruleSettings.thresholdMin * 100
).toPrecision(3)}%`,
evaluation: this.i18nService.getTranslation({
id: 'rule.regionalMarketClusterRiskNorthAmerica.false.min',
languageCode: this.getLanguageCode(),
placeholders: {
thresholdMin: (ruleSettings.thresholdMin * 100).toPrecision(3),
valueRatio: (northAmericaMarketValueRatio * 100).toPrecision(3)
}
}),
value: false
};
}
return {
evaluation: `The North America market contribution of your current investment (${(northAmericaMarketValueRatio * 100).toPrecision(3)}%) is within the range of ${(
ruleSettings.thresholdMin * 100
).toPrecision(
3
)}% and ${(ruleSettings.thresholdMax * 100).toPrecision(3)}%`,
evaluation: this.i18nService.getTranslation({
id: 'rule.regionalMarketClusterRiskNorthAmerica.true',
languageCode: this.getLanguageCode(),
placeholders: {
thresholdMax: (ruleSettings.thresholdMax * 100).toPrecision(3),
thresholdMin: (ruleSettings.thresholdMin * 100).toPrecision(3),
valueRatio: (northAmericaMarketValueRatio * 100).toPrecision(3)
}
}),
value: true
};
}
@ -70,7 +88,10 @@ export class RegionalMarketClusterRiskNorthAmerica extends Rule<Settings> {
}
public getName() {
return 'North America';
return this.i18nService.getTranslation({
id: 'rule.regionalMarketClusterRiskNorthAmerica',
languageCode: this.getLanguageCode()
});
}
public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings {

72
apps/client/src/app/pages/i18n/i18n-page.html

@ -149,6 +149,78 @@
<li i18n="@@rule.regionalMarketClusterRisk.category">
Regional Market Cluster Risks
</li>
<li i18n="@@rule.regionalMarketClusterRiskAsiaPacific">Asia-Pacific</li>
<li i18n="@@rule.regionalMarketClusterRiskAsiaPacific.false.max">
The Asia-Pacific market contribution of your current investment
($&#123;valueRatio&#125;%) exceeds $&#123;thresholdMax&#125;%
</li>
<li i18n="@@rule.regionalMarketClusterRiskAsiaPacific.false.min">
The Asia-Pacific market contribution of your current investment
($&#123;valueRatio&#125;%) is below $&#123;thresholdMin&#125;%
</li>
<li i18n="@@rule.regionalMarketClusterRiskAsiaPacific.true">
The Asia-Pacific market contribution of your current investment
($&#123;valueRatio&#125;%) is within the range of
$&#123;thresholdMin&#125;% and $&#123;thresholdMax&#125;%
</li>
<li i18n="@@rule.regionalMarketClusterRiskEmergingMarkets">
Emerging Markets
</li>
<li i18n="@@rule.regionalMarketClusterRiskEmergingMarkets.false.max">
The Emerging Markets contribution of your current investment
($&#123;valueRatio&#125;%) exceeds $&#123;thresholdMax&#125;%
</li>
<li i18n="@@rule.regionalMarketClusterRiskEmergingMarkets.false.min">
The Emerging Markets contribution of your current investment
($&#123;valueRatio&#125;%) is below $&#123;thresholdMin&#125;%
</li>
<li i18n="@@rule.regionalMarketClusterRiskEmergingMarkets.true">
The Emerging Markets contribution of your current investment
($&#123;valueRatio&#125;%) is within the range of
$&#123;thresholdMin&#125;% and $&#123;thresholdMax&#125;%
</li>
<li i18n="@@rule.regionalMarketClusterRiskEurope">Europe</li>
<li i18n="@@rule.regionalMarketClusterRiskEurope.false.max">
The Europe market contribution of your current investment
($&#123;valueRatio&#125;%) exceeds $&#123;thresholdMax&#125;%
</li>
<li i18n="@@rule.regionalMarketClusterRiskEurope.false.min">
The Europe market contribution of your current investment
($&#123;valueRatio&#125;%) is below $&#123;thresholdMin&#125;%
</li>
<li i18n="@@rule.regionalMarketClusterRiskEurope.true">
The Europe market contribution of your current investment
($&#123;valueRatio&#125;%) is within the range of
$&#123;thresholdMin&#125;% and $&#123;thresholdMax&#125;%
</li>
<li i18n="@@rule.regionalMarketClusterRiskJapan">Japan</li>
<li i18n="@@rule.regionalMarketClusterRiskJapan.false.max">
The Japan market contribution of your current investment
($&#123;valueRatio&#125;%) exceeds $&#123;thresholdMax&#125;%
</li>
<li i18n="@@rule.regionalMarketClusterRiskJapan.false.min">
The Japan market contribution of your current investment
($&#123;valueRatio&#125;%) is below $&#123;thresholdMin&#125;%
</li>
<li i18n="@@rule.regionalMarketClusterRiskJapan.true">
The Japan market contribution of your current investment
($&#123;valueRatio&#125;%) is within the range of
$&#123;thresholdMin&#125;% and $&#123;thresholdMax&#125;%
</li>
<li i18n="@@rule.regionalMarketClusterRiskNorthAmerica">North America</li>
<li i18n="@@rule.regionalMarketClusterRiskNorthAmerica.false.max">
The North America market contribution of your current investment
($&#123;valueRatio&#125;%) exceeds $&#123;thresholdMax&#125;%
</li>
<li i18n="@@rule.regionalMarketClusterRiskNorthAmerica.false.min">
The North America market contribution of your current investment
($&#123;valueRatio&#125;%) is below $&#123;thresholdMin&#125;%
</li>
<li i18n="@@rule.regionalMarketClusterRiskNorthAmerica.true">
The North America market contribution of your current investment
($&#123;valueRatio&#125;%) is within the range of
$&#123;thresholdMin&#125;% and $&#123;thresholdMax&#125;%
</li>
<li i18n="@@slogan">Open Source Wealth Management Software</li>
</ul>
</div>

Loading…
Cancel
Save