如果首选语言无法加载,angular-translate不会尝试使用后备语言

时间:2014-04-05 13:57:40

标签: angularjs angular-translate

使用angular-translate本地化我的Angular应用程序时,如果首选语言(通过静态文件加载器)无法加载或因任何原因不存在,则不会尝试使用回退语言。

$translateProvider.useStaticFilesLoader({
    prefix: 'locale-',
    suffix: '.json'
});
$translateProvider
    .preferredLanguage('ja')
    .fallbackLanguage('en');

plnkr可用:http://plnkr.co/edit/tHrBeY0Ur0rhp0xNuWpA?p=preview

如果存在空的locale-ja.json文件,则正确加载回退。 正如所指出的那样可能是库错误。有没有人找到解决方法?

2 个答案:

答案 0 :(得分:3)

FallbackLanguge函数有另一个目的 - 如果转换表没有特定的键,将使用后备语言的转换。 如果要指定默认语言,可以在registerAvailableLanguageKeys函数中使用通配符:

<ControlTemplate x:Key="EditLine">
    <StackPanel  VerticalAlignment="Center">
        <TextBox Text="{Binding RowData.Row.Value}"
                 Margin="2"
                 Visibility="{Binding RowData.Row.ParamType, Converter={StaticResource ValueTypeToVisibilityConverter}, ConverterParameter='TextBox'}" />
        <CheckBox Visibility="{Binding RowData.Row.ParamType, Converter={StaticResource ValueTypeToVisibilityConverter}, ConverterParameter='CheckBox'}"
                  IsChecked="{Binding RowData.Row.Value}"
                  VerticalAlignment="Center"
                  HorizontalAlignment="Center" />
    </StackPanel>
</ControlTemplate>

在此示例中,“en”是默认语言。如果首选语言不存在,它将加载。

答案 1 :(得分:0)

目前遇到了同样的问题,我能解决的唯一方法是添加$translateProvider.use()选项。所以它看起来像这样:

 $translateProvider
    .preferredLanguage('ja')
    .use('ja')
    .fallbackLanguage('en');