Норвежские специальные символы не отображаются правильно - PullRequest
0 голосов
/ 08 сентября 2018

Я разработал простое приложение, которое использует переносимый объект для перевода слов с английского на норвежский.

no.po (переносной объект)

msgid "Hello world!"
msgstr "Hei Verden!"

msgid "Date Of Birth"
msgstr "Fødselsdato"

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is needed for a given request.
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });


    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
        .AddViewLocalization();

    services.AddPortableObjectLocalization();

    services.Configure<RequestLocalizationOptions>(
        opts =>
        {
            var supportedCultures = new List<CultureInfo>
            {
        new CultureInfo("en-US"),
        new CultureInfo("en"),
        new CultureInfo("fr-FR"),
        new CultureInfo("fr"),
        new CultureInfo("no"),
        new CultureInfo("nb-NO"),
            };

            opts.DefaultRequestCulture = new RequestCulture("en-US");
            opts.SupportedCultures = supportedCultures;
            opts.SupportedUICultures = supportedCultures;
        });
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseStaticFiles();
    app.UseCookiePolicy();
    app.UseRequestLocalization();
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

View

    @using Microsoft.AspNetCore.Mvc.Localization
    @inject IViewLocalizer Localizer

    @{
        ViewData["Title"] = "About";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }

    <h2>@ViewData["Title"].</h2>
    <h3>@ViewData["Message"]</h3>

    <p>Use this area to provide additional information.</p>

    <p>@Localizer["Hello world!"]</p>
    <p>@Localizer["Date Of Birth"]</p>

**_Layout.cshtml**

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" http-equiv="Content-Type" content="text/html" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>@ViewData["Title"] - SuveWebLocale</title>

        <environment include="Development">
            <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
            <link rel="stylesheet"
                  href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
            <link rel="stylesheet" href="~/css/site.css" />
            <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
            <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
        </environment>
        <environment exclude="Development">
            <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css"
                  asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
                  asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
            <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
            <link rel="stylesheet"
                  href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
            <link rel="stylesheet" href="~/css/site.css" />
            <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
            <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
        </environment>
    </head>
    <body>
        <nav class="navbar navbar-inverse navbar-fixed-top">
            <div class="container">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                        <span class="sr-only">Toggle navigation</span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    <a asp-area="" asp-controller="Home" asp-action="Index" class="navbar-brand">SuveWebLocale</a>
                </div>
                <div class="navbar-collapse collapse">
                    <ul class="nav navbar-nav">
                        <li><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
                        <li><a asp-area="" asp-controller="Home" asp-action="About">About</a></li>
                        <li><a asp-area="" asp-controller="Home" asp-action="Contact">Contact</a></li>
                    </ul>
                </div>
            </div>
        </nav>

        <partial name="_CookieConsentPartial" />

        <div class="container body-content">
            @RenderBody()
            <hr />
            <footer>
                <p>&copy; 2018 - SuveWebLocale</p>
            </footer>
        </div>

        @*<environment include="Development">
            <script src="~/lib/jquery/dist/jquery.js"></script>
            <script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
            <script src="~/js/site.js" asp-append-version="true"></script>
        </environment>
        <environment exclude="Development">
            <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.3.1.min.js"
                    asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
                    asp-fallback-test="window.jQuery"
                    crossorigin="anonymous"
                    integrity="sha384-tsQFqpEReu7ZLhBV2VZlAu7zcOV+rXbYlF2cqB8txI/8aZajjp4Bqd+V6D5IgvKT">
            </script>
            <script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/bootstrap.min.js"
                    asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
                    asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
                    crossorigin="anonymous"
                    integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa">
            </script>
            <script src="~/js/site.min.js" asp-append-version="true"></script>
        </environment>*@

        @RenderSection("Scripts", required: false)
    </body>
    </html>

Фактическая выработка

enter image description here

Как вы можете видеть на картинке выше,

F dselsdato не кодируется должным образом. Я не знаю, что было причиной этого. Если я что-то пропустил в своем коде, пожалуйста, посоветуйте мне достичь ожидаемого.

Ожидаемый результат должен быть Fødselsdato

Спасибо.

1 Ответ

0 голосов
/ 10 сентября 2018

Я нашел способ решить проблему. Чтобы запустить отображение символов международного языка, нам нужно проверить, находится ли наш файл в формате UTF-8 или нет. По умолчанию он будет в формате ANSI . Нам нужно преобразовать его из ANSI в UTF-8 , используя любые текстовые редакторы. Я покажу, как я это исправил.

Откройте файл переносимого объекта (po), который содержит тексты локализации в Блокнот ++ и перейдите на вкладку Кодировка и проверьте формат. Если он не в формате UTF-8 , преобразуйте его в UTF-8 , как показано ниже.

enter image description here

Сохраните файл и запустите приложение, вы увидите, что все символы отлично отображаются в браузерах.

...