# Localizations for field name and group name

**URL:** <https://forum.litium.com/t/localizations-for-field-name-and-group-name/550>\
**Category:** Questions\
**Tags:** litium-7\
**Created:** [February 4, 2019, 1:38pm UTC](https://forum.litium.com/t/localizations-for-field-name-and-group-name/550 "2019-02-04T13:38:50Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![jonas.olsson](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.litium.com/jonas.olsson/32/177_2.png) [@jonas.olsson](https://forum.litium.com/u/jonas.olsson)\
**Post date:** [February 4, 2019, 1:38pm UTC](https://forum.litium.com/t/localizations-for-field-name-and-group-name/550/1 "2019-02-04T13:38:50Z")

</div>

Hi!

How do I set name for fields or field groups generated with code?

I managed to add a new field on a website template using Litium.Accelerator.Definitions.Websites.AcceleratorWebsiteFieldDefinitionSetup  
but the name of the field in backoffice is “fielddefinition.websitearea.cookieconsentpage.name”  
How do i set this name? I tried with this

```
            new FieldDefinition<WebsiteArea>(AcceleratorWebsiteFieldNameConstants.CookieConsentPage, SystemFieldTypeConstants.Pointer)
            {
                Option = new PointerOption { EntityType = PointerTypeConstants.WebsitesPage },
                Localizations = {
                    ["en-US"] = { Name = "Cookie Consent Page", Description = "" },
                    ["sv-SE"] = { Name = "Sida om cookies", Description = "" }
                }
            }

```

Same problem with field group on template using Litium.Accelerator.Definitions.Websites.AcceleratorWebsiteTemplateSetup  
where the name in backoffice is “fieldtemplate.websitearea.acceleratorwebsite.fieldgroup.pages.name” for this code:

```
                new FieldTemplateFieldGroup()
                {
                    Id = "Pages",
                    Collapsed = false,
                    Localizations =
                    {
                        ["en-US"] = { Name = "Pages" },
                        ["sv-SE"] = { Name = "Sidor" }
                    },
                    Fields =
                    {
                        AcceleratorWebsiteFieldNameConstants.CookieConsentPage
                    }
                }

```

![image](https://canada1.discourse-cdn.com/flex030/uploads/litium/original/1X/f2d07e07ec052bdacf751e36827eeb1adcb98b42.png)

Litium version: 7.1

---

<div class="post-metadata">

**Author:** ![PontvsXlent](https://avatars.discourse-cdn.com/v4/letter/p/a3d4f5/32.png) [@PontvsXlent](https://forum.litium.com/u/PontvsXlent)\
**Post date:** [February 4, 2019, 2:00pm UTC](https://forum.litium.com/t/localizations-for-field-name-and-group-name/550/2 "2019-02-04T14:00:23Z")

</div>

Litium.Accelerator.MVC/Site/Resources/Administration/Administration.resx  
Add this:

\<data name=“fieldtemplate.websitearea.acceleratorwebsite.fieldgroup.pages.name”\>  
\<value\>Pages\</value\>  
\</data\>

---

<div class="post-metadata">

**Author:** ![steve.redstorm](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.litium.com/steve.redstorm/32/14_2.png) [@steve.redstorm](https://forum.litium.com/u/steve.redstorm)\
**Post date:** [February 4, 2019, 2:00pm UTC](https://forum.litium.com/t/localizations-for-field-name-and-group-name/550/3 "2019-02-04T14:00:51Z")

</div>

[https://docs.litium.com/documentation/architecture/field-framework](https://docs.litium.com/documentation/architecture/field-framework)

---

<div class="post-metadata">

**Author:** ![jonas.olsson](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.litium.com/jonas.olsson/32/177_2.png) [@jonas.olsson](https://forum.litium.com/u/jonas.olsson)\
**Post date:** [February 4, 2019, 2:08pm UTC](https://forum.litium.com/t/localizations-for-field-name-and-group-name/550/4 "2019-02-04T14:08:50Z")

</div>

Thanks, I tried to do as your link says but it still don’t work, can you see anything wrong in my code example above? Or do I need to add names both in code with Localizations and in Administration.resx?

---

<div class="post-metadata">

**Author:** ![Spotonkastebo](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.litium.com/spotonkastebo/32/717_2.png) [@Spotonkastebo](https://forum.litium.com/u/Spotonkastebo)\
**Post date:** [February 4, 2019, 2:13pm UTC](https://forum.litium.com/t/localizations-for-field-name-and-group-name/550/5 "2019-02-04T14:13:01Z")

</div>

Note that this one works first time code is run after you added field to the code if you use the accelerator.  
The accelerator doesn’t update fields already created.

---

<div class="post-metadata">

**Author:** ![Spotonkastebo](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.litium.com/spotonkastebo/32/717_2.png) [@Spotonkastebo](https://forum.litium.com/u/Spotonkastebo)\
**Post date:** [February 4, 2019, 2:17pm UTC](https://forum.litium.com/t/localizations-for-field-name-and-group-name/550/6 "2019-02-04T14:17:37Z")

</div>

We change InitFields to update the field names at startup

```
private void InitFields(IEnumerable<FieldDefinition> fields)
    {
        // NOTE: Change to update field definitions from resource files. 
        foreach (var item in fields)
        {
            var currentField = _fieldDefinitionService.Get(item.AreaType, item.Id); 

            if (IsAlreadyExecuted<FieldDefinition>(item.Id, item.AreaType.Name))
            {
                if (currentField != null)
                {
                    currentField = currentField.MakeWritableClone();
                    _fieldFrameworkSetupLocalizationService.Localize(currentField);
                    _fieldDefinitionService.Update(currentField);
                    SetAlreadyExecuted<FieldDefinition>(item.Id, item.AreaType.Name);
                }

                continue;
            }

            if (currentField == null)
            {
                _fieldFrameworkSetupLocalizationService.Localize(item);
                _fieldDefinitionService.Create(item);
                SetAlreadyExecuted<FieldDefinition>(item.Id, item.AreaType.Name);
            }

            SetAlreadyExecuted<FieldDefinition>(item.Id, item.AreaType.Name);
        }
    }
```

---

<div class="post-metadata">

**Author:** ![jonas.olsson](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.litium.com/jonas.olsson/32/177_2.png) [@jonas.olsson](https://forum.litium.com/u/jonas.olsson)\
**Post date:** [February 4, 2019, 2:20pm UTC](https://forum.litium.com/t/localizations-for-field-name-and-group-name/550/8 "2019-02-04T14:20:42Z")

</div>

Ok, thanks. Yes, that’s what I assumed, I already tried deleting field in backoffice, then it was created again but with wrong name again. Will have a look at your example with InitFields.

---

<div class="post-metadata">

**Author:** ![Spotonkastebo](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.litium.com/spotonkastebo/32/717_2.png) [@Spotonkastebo](https://forum.litium.com/u/Spotonkastebo)\
**Post date:** [February 4, 2019, 2:29pm UTC](https://forum.litium.com/t/localizations-for-field-name-and-group-name/550/9 "2019-02-04T14:29:41Z")

</div>

the change is only to always apply localization. it doesnt sound like that is the issue for you when removed field is created with wrong name.

---

<div class="post-metadata">

**Author:** ![patric.forsgard](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.litium.com/patric.forsgard/32/10_2.png) [@patric.forsgard](https://forum.litium.com/u/patric.forsgard)\
**Post date:** [February 4, 2019, 2:42pm UTC](https://forum.litium.com/t/localizations-for-field-name-and-group-name/550/10 "2019-02-04T14:42:10Z")

</div>

`The`\_fieldFrameworkSetupLocalizationService` is using the translations from the resource files to localize the strings. If the string is missing from the resource file it will put the key as the value instead. It’s the missing strings that will make the string-keys to be written out in the above example.

As @Spotonkastebo pointing out the `InitFIelds` in the `Litium.Accelerator.Definitions.DefinitionSetup` is the method that is executed in the startup of application and adding the fields if they not already exists. If you want the definition always to be executed (even if they are changed or removed) you should comment out/remove the `IsAlreadyExecuted` checks.

---

<div class="post-metadata">

**Author:** ![jonas.olsson](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.litium.com/jonas.olsson/32/177_2.png) [@jonas.olsson](https://forum.litium.com/u/jonas.olsson)\
**Post date:** [February 5, 2019, 8:05am UTC](https://forum.litium.com/t/localizations-for-field-name-and-group-name/550/11 "2019-02-05T08:05:08Z")

</div>

I can’t get it to work, tried with modification of code from @Spotonkastebo to always add or update fields (see below) but still get name like “fielddefinition.websitearea.cookieconsentpage.name”

```
    private void InitFields(IEnumerable<FieldDefinition> fields)
    {
        foreach (var item in fields)
        {
            var currentField = _fieldDefinitionService.Get(item.AreaType, item.Id);

            if (currentField != null)
            {
                currentField = currentField.MakeWritableClone();
                _fieldFrameworkSetupLocalizationService.Localize(currentField);
                _fieldDefinitionService.Update(currentField);
            }
            else
            {
                _fieldFrameworkSetupLocalizationService.Localize(item);
                _fieldDefinitionService.Create(item);
            }

            SetAlreadyExecuted<FieldDefinition>(item.Id, item.AreaType.Name);
        }
    }

```

I also tried with another id of page “cookiepage” instead of “cookieconsentpage” to make sure the field was not added before or cached somewhere, but my new field gets name “fielddefinition.websitearea.cookiepage.name”

```
            new FieldDefinition<WebsiteArea>(AcceleratorWebsiteFieldNameConstants.CookiePage, SystemFieldTypeConstants.Pointer)
            {
                Option = new PointerOption { EntityType = PointerTypeConstants.WebsitesPage },
                Localizations = {
                    ["en-US"] = { Name = "Cookie Page", Description = "" },
                    ["sv-SE"] = { Name = "Sida om cookies", Description = "" }
                }
            }
```

---

<div class="post-metadata">

**Author:** ![patric.forsgard](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.litium.com/patric.forsgard/32/10_2.png) [@patric.forsgard](https://forum.litium.com/u/patric.forsgard)\
**Post date:** [February 5, 2019, 8:08am UTC](https://forum.litium.com/t/localizations-for-field-name-and-group-name/550/12 "2019-02-05T08:08:15Z")

</div>

Have you added the resource string with key `fielddefinition.websitearea.cookieconsentpage.name`?

If you not want the translations from the resource file you should not call the `_fieldFrameworkSetupLocalizationService.Localize(currentField);`.

---

<div class="post-metadata">

**Author:** ![Spotonkastebo](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.litium.com/spotonkastebo/32/717_2.png) [@Spotonkastebo](https://forum.litium.com/u/Spotonkastebo)\
**Post date:** [February 5, 2019, 8:38am UTC](https://forum.litium.com/t/localizations-for-field-name-and-group-name/550/13 "2019-02-05T08:38:19Z")

</div>

1. You need to add the translation to the resourcefile
2. Make sure the resource file have namesuffix corresponding to the culture you use.  
Mytranslations.resx  
Mytranslations.sv-se.resx
3. Make sure you don’t have wrong buildproperties on the resourcefiles
4. Double-check that you have spelled exactly correct in the resource file. I think it is important to use lowercase letter

fielddefinition.websitearea.cookieconsentpage.name  
fielddefinition.websitearea.cookieconsentpage.description

---

<div class="post-metadata">

**Author:** ![jonas.olsson](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.litium.com/jonas.olsson/32/177_2.png) [@jonas.olsson](https://forum.litium.com/u/jonas.olsson)\
**Post date:** [February 5, 2019, 10:23am UTC](https://forum.litium.com/t/localizations-for-field-name-and-group-name/550/14 "2019-02-05T10:23:35Z")

</div>

Thanks,

couldn’t get it to work with Localizations and without \_fieldFrameworkSetupLocalizationService.Localize(currentField);  
but now it works when using resource files. To summarize:

I added this to AcceleratorWebsiteFieldDefinitionSetup.cs

```
new FieldDefinition<WebsiteArea>(AcceleratorWebsiteFieldNameConstants.CookiePage, SystemFieldTypeConstants.Pointer)
{
    Option = new PointerOption { EntityType = PointerTypeConstants.WebsitesPage }
},

```

I added these to Administration.resx and Administration.sv-se.resx

`fielddefinition.websitearea.cookiepage.name
fielddefinition.websitearea.cookiepage.description`

with this code in DefinitionSetup.cs

```
private void InitFields(IEnumerable<FieldDefinition> fields)
{
    foreach (var item in fields)
    {
        var currentField = _fieldDefinitionService.Get(item.AreaType, item.Id);

        if (currentField != null)
        {
            currentField = currentField.MakeWritableClone();
            _fieldFrameworkSetupLocalizationService.Localize(currentField);
            _fieldDefinitionService.Update(currentField);
        }
        else
        {
            _fieldFrameworkSetupLocalizationService.Localize(item);
            _fieldDefinitionService.Create(item);
        }

        SetAlreadyExecuted<FieldDefinition>(item.Id, item.AreaType.Name);
    }
}
```
