<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Revit Add-in with Multiple Language Forms based on Current UI Culture in Revit API Forum</title>
    <link>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12149053#M10529</link>
    <description>&lt;P&gt;Thank you, Geoff, for your travail and sorting out the confusion, and Luiz for your great support!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Edited and summarised for posterity:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://thebuildingcoder.typepad.com/blog/2023/08/resx-language-management-and-aps-devcons.html" target="_blank"&gt;https://thebuildingcoder.typepad.com/blog/2023/08/resx-language-management-and-aps-devcons.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Fri, 04 Aug 2023 11:37:30 GMT</pubDate>
    <dc:creator>jeremy_tammik</dc:creator>
    <dc:date>2023-08-04T11:37:30Z</dc:date>
    <item>
      <title>Revit Add-in with Multiple Language Forms based on Current UI Culture</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12136910#M10522</link>
      <description>&lt;P&gt;Hello community,&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am struggling to get my C# code correct to convert my user forms into each culture.&amp;nbsp; &amp;nbsp;I have tried for days, but I cannot get my labels to change languages when opening Revit in different language versions.&amp;nbsp; I can get my Ribbon Panel button to change languages using a RibbonResources.resx file in my App.cs, but my FormExport.resx files are not providing language translation values.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;public FormExport(Autodesk.Revit.DB.Document doc)&amp;nbsp;&lt;BR /&gt;{&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;CultureInfo cultureName = new CultureInfo(Thread.CurrentThread.CurrentUICulture.Name);&lt;BR /&gt;string cultureRef = cultureName.Name;&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureRef);&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureRef);&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;InitializeComponent();&lt;BR /&gt;familyDocument = doc;&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;// Get the localized label text from the resource .resx file&amp;nbsp;&amp;nbsp;&lt;BR /&gt;string localizedLabelText = GetLocalizedTextFromResource("lblFamilyName.Text");&lt;BR /&gt;string localizedHeaderText = GetLocalizedTextFromResource("lblHeader.Text");&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;// Set the label text with the localized value&lt;BR /&gt;lblFamilyName.Text = localizedLabelText;&lt;BR /&gt;lblHeader.Text = localizedHeaderText;&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;I have this function set below my form code :&lt;/STRONG&gt;&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;private string GetLocalizedTextFromResource(string key)&lt;BR /&gt;{&lt;BR /&gt;try&lt;BR /&gt;{&lt;BR /&gt;// Load the appropriate resource file based on the user's selected language&lt;BR /&gt;ResourceManager resourceManager = new ResourceManager("MyApp.FormExport", typeof(FormExport).Assembly);&lt;BR /&gt;CultureInfo currentCulture = Thread.CurrentThread.CurrentUICulture;&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;// Fetch the localized text for the given key from the resource&lt;BR /&gt;string localizedText = resourceManager.GetString(key, currentCulture);&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;// If the resource for the given key is not found in the selected culture,&lt;BR /&gt;// explicitly load the default resource (English) using CultureInfo.InvariantCulture&lt;BR /&gt;if (localizedText == null)&lt;BR /&gt;{&lt;BR /&gt;localizedText = resourceManager.GetString(key, CultureInfo.InvariantCulture);&lt;BR /&gt;}&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;// If the resource is still not found, return the key itself as a fallback&lt;BR /&gt;return localizedText ?? key;&lt;BR /&gt;}&lt;BR /&gt;catch (MissingManifestResourceException ex)&lt;BR /&gt;{&lt;BR /&gt;// Log the exception&lt;BR /&gt;Console.WriteLine($"Resource file not found. Exception: {ex.Message}");&lt;BR /&gt;return key; // Return the key itself as a fallback&lt;BR /&gt;}&lt;BR /&gt;}&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;My form .resx files are:&lt;/P&gt;&lt;P&gt;FormExport.resx&lt;/P&gt;&lt;P&gt;FormExport.en.resx&lt;/P&gt;&lt;P&gt;FormExport.fr.resx&lt;/P&gt;&lt;P&gt;.....(continued)&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you for any assistance you can provide.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Geoff&lt;/P&gt;</description>
      <pubDate>Sun, 30 Jul 2023 17:59:52 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12136910#M10522</guid>
      <dc:creator>GJennings-BM</dc:creator>
      <dc:date>2023-07-30T17:59:52Z</dc:date>
    </item>
    <item>
      <title>Re: Revit Add-in with Multiple Language Forms based on Current UI Culture</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12137003#M10523</link>
      <description>&lt;P&gt;You don't say what research you have performed to optimise your setup. Searching around a bit for things like &lt;STRONG&gt;&lt;EM&gt;resx&lt;/EM&gt;&lt;/STRONG&gt; and &lt;EM&gt;&lt;STRONG&gt;.NET&lt;/STRONG&gt;&lt;/EM&gt; leads me to lots of interesting recommendations like this one:&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://stackoverflow.com/questions/373388/best-way-to-implement-multi-language-globalization-in-large-net-project" target="_blank" rel="noopener"&gt;https://stackoverflow.com/questions/373388/best-way-to-implement-multi-language-globalization-in-large-net-project&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;It includes so much advice that it is impossible to guess what you may or may not already be adhering to...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 30 Jul 2023 19:33:14 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12137003#M10523</guid>
      <dc:creator>jeremy_tammik</dc:creator>
      <dc:date>2023-07-30T19:33:14Z</dc:date>
    </item>
    <item>
      <title>Re: Revit Add-in with Multiple Language Forms based on Current UI Culture</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12137054#M10524</link>
      <description>&lt;P&gt;Good evening and thank you Jeremy for your response.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am testing options mentioned in the link you sent.&amp;nbsp; Below is just a small list sites I have researched and tested against.&amp;nbsp; It has become very confusing since everyone seems to have a different method.&amp;nbsp; &amp;nbsp;I am simply building a C# .Net app for Revit under the Add-in tab.&amp;nbsp; I have five WinForms.&amp;nbsp; One is a primary WinForms and the other WinForms support secondary operations.&amp;nbsp; This is all been built in Visual Studio 2022 for Revit 2021-2024.&amp;nbsp; The app has been submitted to the app store for publishing.&amp;nbsp; Now, I just need to prepare the WinForms for a larger international base of users.&amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It should be extremely simple.&amp;nbsp; Again, I have my ribbon panel working for any language, but the translations of my WinForms are my challenge.&amp;nbsp; Beyond the sites listed below, I have spent hours reviewing YouTube videos, ChatGPT, reading manuals, and website blogs.&amp;nbsp; In visual studio, I have done the process of setting each form to 'Localizable' = true, then Language = "France, Spanish,...", customized the forms for .resx files.&amp;nbsp; I have tested with separate manual .resx files, and tons of programming methods.&amp;nbsp; Frustrating for something that is effectively a basic task.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am hoping someone can provide c# .net guidance showing the code requirements of a single form that references the appropriate .resx based upon the user's Revit language version.&amp;nbsp; &amp;nbsp;I currently have a 'Forms" folder for all of my WinForms and their associated .resx language files.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Create the Multilingual .bundle file&lt;/STRONG&gt;&lt;/P&gt;&lt;DIV&gt;&lt;A href="https://adndevblog.typepad.com/aec/2013/08/localized-applications-for-the-revit-exchange-store.html" target="_blank" rel="noopener"&gt;https://adndevblog.typepad.com/aec/2013/08/localized-applications-for-the-revit-exchange-store.html&lt;/A&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;STRONG&gt;All Language Revit Versions&lt;/STRONG&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;A href="https://help.autodesk.com/view/RVT/2020/ENU/?guid=GUID-BD09C1B4-5520-475D-BE7E-773642EEBD6C" target="_blank" rel="noopener"&gt;https://help.autodesk.com/view/RVT/2020/ENU/?guid=GUID-BD09C1B4-5520-475D-BE7E-773642EEBD6C&lt;/A&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;STRONG&gt;Language Tags&lt;/STRONG&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;A href="https://forums.autodesk.com/t5/revit-api-forum/localization-of-add-in-multilanguage/td-p/8936144" target="_blank" rel="noopener"&gt;https://forums.autodesk.com/t5/revit-api-forum/localization-of-add-in-multilanguage/td-p/8936144&lt;/A&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;STRONG&gt;Get Revit Language&lt;/STRONG&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;A href="https://www.revitapidocs.com/2015/2b1d8b80-a11c-2a57-63bd-6c0d67691879.htm" target="_blank" rel="noopener"&gt;https://www.revitapidocs.com/2015/2b1d8b80-a11c-2a57-63bd-6c0d67691879.htm&lt;/A&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;STRONG&gt;Family Content Localization&lt;/STRONG&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;A href="https://thebuildingcoder.typepad.com/blog/2013/02/content-localisation.html" target="_blank" rel="noopener"&gt;https://thebuildingcoder.typepad.com/blog/2013/02/content-localisation.html&lt;/A&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;STRONG&gt;Another Resource for Creating Resx files and Revit UI Culture&lt;/STRONG&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;A href="https://thebuildingcoder.typepad.com/blog/2017/02/multiple-language-resx-resource-files.html" target="_blank" rel="noopener"&gt;https://thebuildingcoder.typepad.com/blog/2017/02/multiple-language-resx-resource-files.html&lt;/A&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;STRONG&gt;Label Control for BuiltIn Parameter Languages&lt;/STRONG&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;A href="https://www.revitapidocs.com/2022/c38e7823-31b3-9bcd-5ab0-d353e0d39fa8.htm" target="_blank" rel="noopener"&gt;https://www.revitapidocs.com/2022/c38e7823-31b3-9bcd-5ab0-d353e0d39fa8.htm&lt;/A&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;STRONG&gt;Localize Ribbon&lt;/STRONG&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;A href="https://help.autodesk.com/view/RVT/2022/ENU/?guid=Revit_API_Revit_API_Developers_Guide_Introduction_Add_In_Integration_Localization_html" target="_blank" rel="noopener"&gt;https://help.autodesk.com/view/RVT/2022/ENU/?guid=Revit_API_Revit_API_Developers_Guide_Introduction_Add_In_Integration_Localization_html&lt;/A&gt;&lt;FONT color="#888888"&gt;&lt;BR /&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you. Geoff&lt;/P&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;</description>
      <pubDate>Sun, 30 Jul 2023 20:17:06 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12137054#M10524</guid>
      <dc:creator>GJennings-BM</dc:creator>
      <dc:date>2023-07-30T20:17:06Z</dc:date>
    </item>
    <item>
      <title>Re: Revit Add-in with Multiple Language Forms based on Current UI Culture</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12138470#M10525</link>
      <description>&lt;P&gt;I remember in another post that someone has a similar problem with Form and multi-language.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The &lt;STRONG&gt;&lt;EM&gt;.resx&lt;/EM&gt; &lt;/STRONG&gt;file should swap automatically when depending on the &lt;EM&gt;CultureInfo&lt;/EM&gt;, if the resource is now changed automatically probably your key language is different from the &lt;EM&gt;CultureInfo&lt;/EM&gt; in the application, like &lt;EM&gt;&lt;STRONG&gt;en&lt;/STRONG&gt; &lt;/EM&gt;is different from &lt;EM&gt;&lt;STRONG&gt;en-US&lt;/STRONG&gt;&lt;/EM&gt; and &lt;EM&gt;&lt;STRONG&gt;fr&lt;/STRONG&gt; &lt;/EM&gt;is different from &lt;EM&gt;&lt;STRONG&gt;fr-FR&lt;/STRONG&gt;&lt;/EM&gt;.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Just update your resource file name to match the same &lt;EM&gt;CultureInfo&lt;/EM&gt; that &lt;STRONG&gt;Revit&lt;/STRONG&gt; uses.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is a table with all the Langueges and keys: &lt;A href="https://github.com/ricaun/RevitAddin.ResourcesExample" target="_blank"&gt;https://github.com/ricaun/RevitAddin.ResourcesExample&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 31 Jul 2023 13:32:50 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12138470#M10525</guid>
      <dc:creator>ricaun</dc:creator>
      <dc:date>2023-07-31T13:32:50Z</dc:date>
    </item>
    <item>
      <title>Re: Revit Add-in with Multiple Language Forms based on Current UI Culture</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12140874#M10526</link>
      <description>&lt;P&gt;Thank you for your response and excellent quality video of your .resx management.&amp;nbsp; &amp;nbsp;Your methods will be useful on some other apps I plan to create.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I was finally successful at getting my C# Winforms to show in any UICulture languages!&amp;nbsp; I want to share this information with others:&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;RIBBON PANEL LOCALIZATION:&amp;nbsp;&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;I added a language switcher file based on&amp;nbsp;Andrey Bushman' sample file.&amp;nbsp; This has been modified to 'RVTLanguages.cs'.&amp;nbsp; The file was placed in my root folder below my C# project name.&lt;/P&gt;&lt;P&gt;In the same location, I also created three .resx files:&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;RibbonResources.resx&amp;nbsp; (empty and set to 'Internal')&lt;/P&gt;&lt;P&gt;RibbonResources.en-US.resx (all of my panel data - see image below)&lt;/P&gt;&lt;P&gt;RibbonResources.fr-FR.resx (my french translations)&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;To keep my panel button narrow and allow for wrapping of text, I created two lines in the .resx file&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Ribbon_EN_resx file.png" style="width: 600px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/1247669iA0738ECCA64CD1B9/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Ribbon_EN_resx file.png" alt="Ribbon_EN_resx file.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In my&lt;STRONG&gt;&amp;nbsp;App.cs :&lt;/STRONG&gt;&lt;/P&gt;&lt;LI-CODE lang="general"&gt;public Result OnStartup(UIControlledApplication application)
{
 #region READ AND SET THE LANGUAGE ENVIRONMENT USING THE RVTLanguages.cs file
 RVTLanguages.Cultures(application.ControlledApplication.Language);
 ResourceManager res_mng = new ResourceManager(typeof(RibbonResources));
 #endregion

RibbonPanel p = application.CreateRibbonPanel(RibbonResources.ResourceManager.GetString("PanelName"));  
               
string thisAssemblyPath = Assembly.GetExecutingAssembly().Location;
string buttonText1 = RibbonResources.ResourceManager.GetString("CommandName1");
string buttonText2 = RibbonResources.ResourceManager.GetString("CommandName2");

PushButtonData btnMyApp = new PushButtonData("btnMyApp", buttonText1 + "\n" + buttonText2, thisAssemblyPath, typeof(Command).FullName) 
{
  LargeImage = imgSrc,
  Image = imgSrcTB,
  LongDescription = RibbonResources.ResourceManager.GetString("CommandDescription"),   
  ToolTip = RibbonResources.ResourceManager.GetString("CommandToolTip") 
};

// set help file to reference .bundle file help.html
string helpFolder = Path.Combine(parentFolder, "help.html");
ContextualHelp contextHelp = new ContextualHelp(
ContextualHelpType.ChmFile, helpFolder); 
btnMyApp.SetContextualHelp(contextHelp);

p.AddItem(btnMyApp);&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This was all that was required for setting up a localized ribbon button.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Ribbon_EN_and_FR.png" style="width: 600px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/1247670i4B295806FB7B2BF4/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Ribbon_EN_and_FR.png" alt="Ribbon_EN_and_FR.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;CREATING THE LOCALIZED WINFORMS:&amp;nbsp;&amp;nbsp;&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;I created a folder called "&lt;STRONG&gt;Forms&lt;/STRONG&gt;" and then placed all of my WinForms under this folder.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;After my forms were created, I then manually created two new .resx files.&lt;/P&gt;&lt;P&gt;for example:&amp;nbsp; "MyForm.en-US.resx"&amp;nbsp; and "MyForm.fr-FR.resx"&lt;/P&gt;&lt;P&gt;These files were placed in the Forms folder along with my main WinForm.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In my Winform code&amp;nbsp; I did the following:&amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;MyForm.cs&lt;/STRONG&gt;&lt;/P&gt;&lt;LI-CODE lang="general"&gt;public sealed class UICultureSwitcher : IDisposable
{
    CultureInfo previous;
    public UICultureSwitcher()
    {
        CultureInfo culture = new CultureInfo(Thread
        .CurrentThread.CurrentCulture.Name);

        previous = Thread.CurrentThread.CurrentUICulture;
        Thread.CurrentThread.CurrentUICulture = culture;
     }
     void IDisposable.Dispose()
     {
         Thread.CurrentThread.CurrentUICulture = previous;
     }
}

public MyForm(Autodesk.Revit.DB.Document doc)  
{
      ResourceManager res_mng = new ResourceManager(typeof(MyForm));
      ResourceSet resourceSet = res_mng.GetResourceSet(Thread.CurrentThread.CurrentUICulture, true, true);

      InitializeComponent();
      familyDocument = doc;

      label1.Text = GetLocalizedTextFromResource("label1Text"); 
      label2.Text = GetLocalizedTextFromResource("label2.Text"); 
      label3.Text = GetLocalizedTextFromResource("label3.Text");
      label4.Text = GetLocalizedTextFromResource("label4.Text");
      ............
      &amp;lt;rest of code&amp;gt;
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Below I have a function that will collect the necessary language information in the .resx file.&lt;/P&gt;&lt;LI-CODE lang="general"&gt;private string GetLocalizedTextFromResource(string key)
{
    try
    {
     // Load the appropriate resource file based on the user's selected language
     ResourceManager resourceManager = new ResourceManager("MyApp.Forms.MyForm", typeof(MyForm).Assembly);
                CultureInfo currentCulture = Thread.CurrentThread.CurrentUICulture;

     // Fetch the localized text for the given key from the resource
     string localizedText = resourceManager.GetString(key, currentCulture);

     // If the resource for the given key is not found in the culture,
     // explicitly load the default resource (English) using CultureInfo.InvariantCulture
     if (localizedText == null)
        {
        localizedText = resourceManager.GetString(key, CultureInfo.InvariantCulture);
        }

       // If the resource is still not found, return the key itself as a fallback
       return localizedText ?? key;
  }
  catch (MissingManifestResourceException ex)
  {
       // Handle the exception if the resource file is not found
       // Log the exception
       Console.WriteLine($"Resource file not found. Exception: {ex.Message}");
       return key; // Return the key itself as a fallback
   }
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I then repeat the same methods for my other forms.&amp;nbsp; I have included screenshots of the end results.&amp;nbsp; Now, I am updating the datagrid based upon a similar workflow.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I truly hope this helps others.&amp;nbsp; This has been a very confusing journey.&amp;nbsp; Everything mentioned was done in Visual Studio 2022 and for Revit 2022-2024.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Kind regards,&lt;/P&gt;&lt;P&gt;Geoff Jennings&lt;/P&gt;</description>
      <pubDate>Tue, 01 Aug 2023 11:07:47 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12140874#M10526</guid>
      <dc:creator>GJennings-BM</dc:creator>
      <dc:date>2023-08-01T11:07:47Z</dc:date>
    </item>
    <item>
      <title>Re: Revit Add-in with Multiple Language Forms based on Current UI Culture</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12141056#M10527</link>
      <description>&lt;P&gt;Neat!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I believe setting the &lt;STRONG&gt;Thread.CurrentThread.CurrentUICulture&lt;/STRONG&gt; and &lt;STRONG&gt;Thread.CurrentThread.CurrentCulture&lt;/STRONG&gt; is not necessary to make multilanguage works, Revit already starts with the &lt;STRONG&gt;CultureInfo&lt;/STRONG&gt; correctly, the only reason to change should be to test if your Form is working in another &lt;STRONG&gt;CurrentUICulture&lt;/STRONG&gt; language. Using your class &lt;STRONG&gt;UICultureSwitcher&lt;/STRONG&gt; does the trick.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And why are you using &lt;STRONG&gt;CommandName1&lt;/STRONG&gt; and &lt;STRONG&gt;CommandName2&lt;/STRONG&gt; to create the second line, only one &lt;STRONG&gt;CommandName&lt;/STRONG&gt; with multiple lines should work, like your &lt;STRONG&gt;CommandDescription&lt;/STRONG&gt; that has multiple lines.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 01 Aug 2023 12:21:54 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12141056#M10527</guid>
      <dc:creator>ricaun</dc:creator>
      <dc:date>2023-08-01T12:21:54Z</dc:date>
    </item>
    <item>
      <title>Re: Revit Add-in with Multiple Language Forms based on Current UI Culture</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12141094#M10528</link>
      <description>&lt;P&gt;You are correct about the &lt;STRONG&gt;CommandName1&lt;/STRONG&gt; and &lt;STRONG&gt;CommandName2&lt;/STRONG&gt;.&amp;nbsp; I originally created the two strings before I did the multiline &lt;STRONG&gt;commandDescription&lt;/STRONG&gt;.&amp;nbsp; Previously, I had tried the "\r\n" method in the .resx file and it was making it part of a single full string versus giving me two lines of strings.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I change the .resx files for my Ribbon code and generated the Spanish version.&amp;nbsp; The single &lt;STRONG&gt;CommandName&lt;/STRONG&gt; with a shift+return allows for the multiple lines in the ribbon button.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Ribbon_ES.png" style="width: 600px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/1247719i28BC86606A7001C6/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Ribbon_ES.png" alt="Ribbon_ES.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;As for the language switcher, I have plans for expanding functionality for an upcoming Pro version of the app.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks again for your video and quick response.&amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 01 Aug 2023 12:39:50 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12141094#M10528</guid>
      <dc:creator>GJennings-BM</dc:creator>
      <dc:date>2023-08-01T12:39:50Z</dc:date>
    </item>
    <item>
      <title>Re: Revit Add-in with Multiple Language Forms based on Current UI Culture</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12149053#M10529</link>
      <description>&lt;P&gt;Thank you, Geoff, for your travail and sorting out the confusion, and Luiz for your great support!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Edited and summarised for posterity:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://thebuildingcoder.typepad.com/blog/2023/08/resx-language-management-and-aps-devcons.html" target="_blank"&gt;https://thebuildingcoder.typepad.com/blog/2023/08/resx-language-management-and-aps-devcons.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 04 Aug 2023 11:37:30 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12149053#M10529</guid>
      <dc:creator>jeremy_tammik</dc:creator>
      <dc:date>2023-08-04T11:37:30Z</dc:date>
    </item>
    <item>
      <title>Re: Revit Add-in with Multiple Language Forms based on Current UI Culture</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12361510#M10530</link>
      <description>&lt;P class="lia-align-left"&gt;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/9888344"&gt;@GJennings-BM&lt;/a&gt;&amp;nbsp; Many thanks for the helpful post!&amp;nbsp; I implemented your ribbon methodology in my Add-in and it's working quite well.&lt;BR /&gt;&lt;BR /&gt;Curious if you have any recommendations for handling unsupported languages?&amp;nbsp; For example, the user can set Revit to French (FRA), but at the moment my addin doesn't have a resource file for that language.&amp;nbsp; So RibbonResources.ResourceManager.GetString, just returns null until you switch to a supported language.&amp;nbsp; Is there a good way to make it fail over to an existing resource file?&lt;/P&gt;</description>
      <pubDate>Tue, 07 Nov 2023 23:47:28 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12361510#M10530</guid>
      <dc:creator>MattKincaid</dc:creator>
      <dc:date>2023-11-07T23:47:28Z</dc:date>
    </item>
    <item>
      <title>Re: Revit Add-in with Multiple Language Forms based on Current UI Culture</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12373041#M10531</link>
      <description>&lt;P&gt;Hello Matt,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You can set up an try-catch clause in your code. This way, if an .resx file is not found, it will default to a preferred language.&amp;nbsp; In the below example, I setup the failsafe to fr-FR.&amp;nbsp;&amp;nbsp;&lt;BR /&gt;=====&lt;/P&gt;&lt;P&gt;public sealed class UICultureSwitcher : IDisposable&lt;BR /&gt;{&lt;BR /&gt;CultureInfo previous;&lt;/P&gt;&lt;P&gt;public UICultureSwitcher(string cultureName)&lt;BR /&gt;{&lt;BR /&gt;CultureInfo culture = new CultureInfo(cultureName);&lt;/P&gt;&lt;P&gt;previous = Thread.CurrentThread.CurrentUICulture;&lt;BR /&gt;&lt;BR /&gt;try&lt;BR /&gt;{&lt;BR /&gt;// Attempt to load the resource file for the specified culture.&lt;BR /&gt;ResourceManager rm = new ResourceManager("YourAppNamespace.Resources.Labels", typeof(UICultureSwitcher).Assembly);&lt;BR /&gt;rm.GetString("SomeKey", culture); // Use a key from your resource file.&lt;BR /&gt;Thread.CurrentThread.CurrentUICulture = culture;&lt;BR /&gt;}&lt;BR /&gt;catch (MissingManifestResourceException)&lt;BR /&gt;{&lt;BR /&gt;// If the resource file for the specified culture is not found, fall back to fr-FR.&lt;BR /&gt;Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");&lt;BR /&gt;}&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;void IDisposable.Dispose()&lt;BR /&gt;{&lt;BR /&gt;Thread.CurrentThread.CurrentUICulture = previous;&lt;BR /&gt;}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;=====&lt;BR /&gt;I hope this helps.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Geoff&lt;/P&gt;</description>
      <pubDate>Mon, 13 Nov 2023 06:32:00 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/revit-add-in-with-multiple-language-forms-based-on-current-ui/m-p/12373041#M10531</guid>
      <dc:creator>GJennings-BM</dc:creator>
      <dc:date>2023-11-13T06:32:00Z</dc:date>
    </item>
  </channel>
</rss>

