Localization Options for all Channels

2025/12/10 5:45 PM

We have a multilingual site in KX13 we're migrating to XbyK. We utilize the localization application extensively in KX13 for many different things. I know there is no localization application in XbyK, however, there are 3 options for us.

What I'd like to do is have an open discussion on:

  1. What option(s) have you used?
  2. Why did you choose that option?
  3. What worked?
  4. What didn't work?
  5. What might you do differently in the next project?

Environment

  • KX13 => Xperience by Kentico 30.11.2

  • .NET version: 9

  • Execution environment: [SaaS or Private cloud]

Answers

2025/12/10 6:58 PM

Happy to share my thoughts on this here (which I've probably shared in other channels many times)...

  1. Just because something was done a specific way in past versions of Kentico does not mean that's the best way, even if a team is very familiar and comfortable with that approach. Example: Custom Tables.

  2. Because there are multiple approaches I'd ask the following:

    1. What is the time cost today - example: implementation and training
    2. What is the time cost in the future - example: limitations in capabilities or scalability over time
    3. Going back to first principles, if I had never seen a solution to this problem before what is my intuition about solving it today given the approaches available.

I personally rank the options available, without knowing all the context of your project, stakeholders, future plans, etc...

  1. Content hub - if the localized data is used for marketing and customer experiences then it's content.
  2. 3rd party integration (or create your own) - if familiarity and consistency is workflow is priority, this provides it.
  3. .resx files - I think these are most important for code that creates UIs that need localized and are packaged up and reused, especially on the administration side of things.

This order could easily change based on context, you know... it depends 😅.

2025/12/11 8:01 AM

We have an implementation where we can register resx file(s) so the customer can see it's content in an admin listing page. These localization strings can then be overridden using resourcestring contentitems.

For exposing and using the resx and it's overrides we've implemented the ILocalizationService and IStringLocalizer, and even ResHelper.

2025/12/11 8:25 PM

Sean, all 5 of your points are why I'm asking (great minds think alike)! We don't want to do it like it was done before because there has to be a better way. We always look at time, money, and functionality (existing, future, deprecated, 3rd party). Thanks for the confirmation.

Roel, great idea, thanks for sharing! I'm interested in this statement "These localization strings can then be overridden using resourcestring contentitems." So are you using .resx files and Content Hub items?

2025/12/12 9:15 AM

Brenden, Yes we are using them both. Simply implement and override the LocalizationService, and check for existing ContentItems first. Implement an IStringLocalizer that uses your service.

We added an extra RegisterLocalizationResource in order to "tag" resx which should be displayed in a UI listing page. In this way editors can view their strings, and add customizations where needed.

Using contentitems only would also be possible in this situation, but that would not make sense. It will work though.

public class CustomLocalizationService(IContentQueryExecutor contentQueryExecutor) : LocalizationService, ILocalizationService
{
   public new string GetString(string stringKey, string culture = null, bool useDefaultCulture = true)
   {
       var res = GetResourceContent(stringKey, cultureToUse);
       return !string.IsNullOrEmpty(res) 
           ? res 
           : base.GetString(stringKey, cultureToUse, useDefaultCulture);   
   }
}

To response this discussion, you have to login first.