ब्लेज़र सर्वर साइड में सत्यापन संदेश (DataAnnotationsValidator) को स्थानीय कैसे करें


10

मैं वीएस 2019 के नवीनतम संस्करण में ब्लेज़र 3.1 का उपयोग कर रहा हूं।

अब तक मैं पृष्ठ लेबल (शीर्षक, तालिका फ़ील्ड आदि) को स्थानीय करने में सक्षम हूं।)

में ListEmployee.razorपेज मैं स्थानीय बनाना तालिका शीर्षक आदि में सक्षम हूँ और पर AddEmplyeeValidation.razorपेज मैं स्थानीय बनाना प्रपत्र लेबल करने में सक्षम हूँ, लेकिन मैं समस्या सत्यापन संदेश स्थानीयकृत है।

सत्यापन संदेश के लिए Employee.csसत्यापन संदेश इस फ़ाइल और Resources/Dataफ़ोल्डर में परिभाषित किया गया है, जैसा कि नाम से परिभाषित किया गया है Data.Employee.ar.resxऔर Data.Employee.ar.resxयह काम नहीं कर रहा है

System.ComponentModel.DataAnnotations का उपयोग करना;

नामस्थान BlazorSPA1.Data {सार्वजनिक वर्ग के कर्मचारी {[MaxLength (50)] सार्वजनिक स्ट्रिंग आईडी {प्राप्त करें; सेट; }

    [Required (ErrorMessage ="Name is RRRequired")]
    [StringLength(20, ErrorMessage = "Name is too long.")]
    public string Name { get; set; }

    [Required]
    [StringLength(20)]
    public string Department { get; set; }
    [MaxLength(100)]
    public string Designation { get; set; }
    [MaxLength(100)]
    public string Company { get; set; }
    [MaxLength(100)]
    public string City { get; set; }
}

}

मैं कर्मचारी के फॉर्म के लिए भाषा के आधार पर संसाधन फ़ाइलों से संदेश कैसे मान्य कर सकता हूं।

@page "/addemployeeValidation"
@inject NavigationManager NavigationManager
@inject IEmployeeService EmployeeService
@inject IStringLocalizer<AddEmployeeValidation> L

<h2>Create Employee</h2>
<hr />
<EditForm Model="@employee" OnValidSubmit="@CreateEmployee">
    <DataAnnotationsValidator />
    <ValidationSummary />
    <div class="row">
        <div class="col-md-8">
            <div class="form-group">
                <label for="Name" class="control-label">@L["Name"]</label>
                <input for="Name" class="form-control" @bind="@employee.Name" />
                <ValidationMessage For="@(()=> employee.Name)" />
            </div>
            <div class="form-group">
                <label for="Department" class="control-label">@L["Department"]</label>
                <input for="Department" class="form-control" @bind="@employee.Department" />
            </div>
            <div class="form-group">
                <label for="Designation" class="control-label">@L["Designation"]</label>
                <input for="Designation" class="form-control" @bind="@employee.Designation" />
            </div>
            <div class="form-group">
                <label for="Company" class="control-label">@L["Company"]</label>
                <input for="Company" class="form-control" @bind="@employee.Company" />
            </div>
            <div class="form-group">
                <label for="City" class="control-label">@L["City"]</label>
                <input for="City" class="form-control" @bind="@employee.City" />
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-md-4">
            <div class="form-group">
                <input type="submit" class="btn btn-primary" value="Save" />
                <input type="button" class="btn" @onclick="@Cancel" value="Cancel" />
            </div>
        </div>
    </div>
</EditForm>

@code {

    Employee employee = new Employee();

    protected async Task CreateEmployee()
    {
        await EmployeeService.CreateEmployee(employee);
        NavigationManager.NavigateTo("listemployees");
    }


    void Cancel()
    {
        NavigationManager.NavigateTo("listemployees");
    }
}   

मैंने कुछ लेख पढ़े और कुछ चीजें आजमाईं लेकिन कुछ भी काम नहीं आया

Startup.cs` में कोड

Services.AddServerSideBlazor (विकल्प => विकल्प। डीटेल्डरर्स = सत्य);

    services.AddLocalization(options => options.ResourcesPath = "Resources");
    var supportedCultures = new List<CultureInfo> { new CultureInfo("en"), new CultureInfo("ar") };
    services.Configure<RequestLocalizationOptions>(options =>
    {
        options.DefaultRequestCulture = new Microsoft.AspNetCore.Localization.RequestCulture("en");
        options.SupportedUICultures = supportedCultures;
    });

मैं स्थानीयकरण के लिए निम्नलिखित उदाहरण का उपयोग कर रहा हूं, यह नहीं दिखाता है कि त्रुटि संदेश को स्थानीय कैसे बनाया जाए https://www.c-sharpcorner.com/article/localization-in-blazor-server/

रेफरी के लिए फ़ोल्डर संरचना छवि

यहां छवि विवरण दर्ज करें

अंग्रेजी संस्करण के लिए संसाधन फ़ाइल उदाहरण उसी तरह से है जैसे मेरे पास अरबी फ़ाइल भी है

यहां छवि विवरण दर्ज करें

स्क्रीनशॉट के नीचे आपको फील्ड का नाम रिसोर्स फाइल से खींचा जा रहा है, लेकिन वैलिडेशन मैसेज के लिए केवल अंग्रेजी में ही काम नहीं करना है

यहां छवि विवरण दर्ज करें

जवाबों:


7

यहां डेटा एनोटेशन त्रुटि संदेशों को स्थानीय बनाने के लिए मेरा समाधान है। मैं दो संसाधन फ़ाइलें बनाता हूं, एक फ़ील्ड के लिए और दूसरा त्रुटि संदेशों के लिए।

  • DisplayNameResource खेतों के स्थानीयकरण के लिए
  • ErrorMessageResource त्रुटि संदेशों को स्थानीय करने के लिए

यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें

देखने में मॉडल वर्ग उपयोग Displayक्षेत्र के नाम को स्थानीयकरण के लिए विशेषता। विशेषता ResourceTypeपर संसाधन फ़ाइल उपयोग संपत्ति निर्दिष्ट करने के लिए Display:

[Display(Name = "Address", ResourceType = typeof(DisplayNameResource))]

और सत्यापन विशेषताओं का उपयोग ErrorMessageResourceNameऔर ErrorMessageResourceTypeसंसाधन फ़ाइल को निर्दिष्ट करने के लिए:

[Required(ErrorMessageResourceName = "RequiredError", ErrorMessageResourceType = typeof(ErrorMessageResource))]

यहाँ पूरा उदाहरण है:

public class SomeViewModel
{
    [Display(Name = "Address", ResourceType = typeof(DisplayNameResource))]
    [Required(ErrorMessageResourceName = "RequiredError", ErrorMessageResourceType = typeof(ErrorMessageResource))]
    [StringLength(256, ErrorMessageResourceName = "MaxLengthError", ErrorMessageResourceType = typeof(ErrorMessageResource))]
    public string Address { get; set; }

    [Display(Name = "Phone", ResourceType = typeof(DisplayNameResource))]
    [Required(ErrorMessageResourceName = "RequiredError", ErrorMessageResourceType = typeof(ErrorMessageResource))]
    [RegularExpression("^09([0-9]{9})$", ErrorMessageResourceName = "PhoneLengthError", ErrorMessageResourceType = typeof(ErrorMessageResource))]
    public string Phone { get; set; }

    [Display(Name = "Password", ResourceType = typeof(DisplayNameResource))]
    [Required(ErrorMessageResourceName = "RequiredError", ErrorMessageResourceType = typeof(ErrorMessageResource))]
    [StringLength(50, MinimumLength = 6, ErrorMessageResourceType = typeof(ErrorMessageResource), ErrorMessageResourceName = "MinxMaxLengthError")]
    public string Password { get; set; }

    [Display(Name = "ConfirmPassword", ResourceType = typeof(DisplayNameResource))]
    [Required(ErrorMessageResourceName = "RequiredError", ErrorMessageResourceType = typeof(ErrorMessageResource))]
    [StringLength(50, MinimumLength = 6, ErrorMessageResourceType = typeof(ErrorMessageResource), ErrorMessageResourceName = "MinxMaxLengthError")]
    [Compare("Password", ErrorMessageResourceName = "PasswordConfirmMisMatch", ErrorMessageResourceType = typeof(ErrorMessageResource))]
    public string ConfirmPassword { get; set; }
}

के लिए त्रुटि संदेश MaxLengthErrorहै {0} cannot be longer than {1} character, इसलिए {0}इसे स्थानीयकृत नाम के {1}साथ बदल दिया जाएगा और इसे 256आपके द्वारा विशेषता पर प्रतिस्थापित किया जाएगा[StringLength(256,...


1
मैं यह कोशिश करूँगा कि ऐसा लगता है कि यह काम करना चाहिए .. मैं सराहना करता हूं कि क्या आप इसे गितुब पर पोस्ट कर सकते हैं क्योंकि इस तरह का या प्रश्न अक्सर उठाया जाएगा और बहुभाषी विकल्प की बड़ी संख्या है ..
लर्निंग

1
@Learning मैं पूरा उदाहरण github पर डालूँगा।
मोहसेन इस्माइलपुर

यह मेरे जैसे बहुत से प्रोग्रामर के लिए बहुत मददगार होगा क्योंकि ब्लेज़ोर मेरे संदर्भ में बहुत अधिक उदाहरण नहीं है ...
लर्निंग

1

यह पहले पूछा गया है:

Blazor में ViewModel स्थानीयकरण कैसे जोड़ें?

मैंने सुझाव दिया कि फ्लुएंटवैलिडेशन का उपयोग करना बेहतर दृष्टिकोण होगा। यहाँ मेरे गितुब रेपो की एक कड़ी है जो दर्शाती है कि यह कैसे काम कर सकता है:

https://github.com/conficient/BlazorValidationLocalization


मेरे मन में इस तरह का समाधान था, लेकिन यह प्रत्येक के लिए दो मोडल फाइलें होंगी और अगर परियोजना बड़ी है तो इसे प्रबंधित करना मुश्किल हो जाएगा, हां यह एक काम है और काम को आसान बना देता है ...
लर्निंग

"दो मोडल फ़ाइलों" से आपका क्या मतलब है, यह बिल्कुल सुनिश्चित नहीं है। आप अभी भी फ़्लुएंक्विलेजेशन के साथ रेक्स का उपयोग कर सकते हैं। देखें fluentvalidation.net/localization
क्वैंगो

-1

मैंने यह कोशिश नहीं की!

Asp.net कोर के ऑफिशियल डॉक्स में स्थानीयकरण करने का तरीका है, DataAnnotations हो सकता है कि आपको वहां कुछ सुराग मिलें


मैं asp.net कोर के लिए नया हूँ, मैंने अलग-अलग चीज़ों की कोशिश की, लेकिन इस सवाल को पोस्ट करने से पहले मैंने काम नहीं किया, मैंने खुद के लिए उदाहरण देखकर समाधान की कोशिश की, अलग-अलग चीज़ों की कोशिश की, लेकिन यह मेरे मामले के लिए काम नहीं करता ... यह थोड़ा मुश्किल है मैं asp.net MVC में कोई अनुभव नहीं के साथ asp.net वेबफॉर्म बैकग्राउंड से हूं ... इसलिए मेरा ध्यान केवल asp.net कोर रेजर पृष्ठों की ओर है .. आइए देखें
लर्निंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.