# Localization

Wisej.NET fully supports localization using .NET and Visual Studio standard localization features.

{% file src="../.gitbook/assets/wisej.localization.zip" caption="Download Wisej.Localization.zip" %}

## Localizing the UI

All top-level controls in Wisej.NET support UI localization.

To enable localization features for a `Form`, `Page`, `UserControl`, or `Desktop` component:

1. In design mode, set the `Localizable` property to true
2. Once enabled, you can switch languages in the designer

Use the `Language` dropdown property to select the language for localization:

![Language selection dropdown](https://553579532-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MF1D11gPs_az3xaKusw%2Fuploads%2Fgit-blob-663d269dfed65bbb35198106579a78d761a755a9%2Fimage.png?alt=media)

UI localization allows changing multiple properties per language switch, commonly:

* Size
* Location
* Text
* Colors
* Images

## Localizing the System

Wisej.NET supports full localization of system resources including:

* `MessageBox` buttons
* Calendar control labels (month/day names)
* Standard numeric, percentage and currency formatting/parsing

### Built-in Formats

* **Numeric, Percentage, Date, and Currency**

  Handled automatically for all supported languages worldwide.
* **Date Labels: Months and Day Names**

  Handled automatically for all supported languages worldwide.
* **System Resources**

  Wisej.NET system resources are localized in:

  * English
  * German
  * French
  * Italian
  * Turkish
  * Spanish
  * Portuguese

  For other languages, create a `Resources-[LANG].resx` file in either:

  * Root project folder
  * `/Resources` folder

  Add localization labels as needed. See [How to: Create a Localized Resource File](https://msdn.microsoft.com/en-us/library/aa992030\(v=vs.100\).aspx).

  | Label       | Description                                        | Default Value |
  | ----------- | -------------------------------------------------- | ------------- |
  | $Ok         | OK Button in MessageBox/system dialogs             | OK            |
  | $Cancel     | Cancel Button in MessageBox/system dialogs         | Cancel        |
  | $Yes        | Yes Button in MessageBox/system dialogs            | Yes           |
  | $No         | No Button in MessageBox/system dialogs             | No            |
  | $Retry      | Retry Button in MessageBox/system dialogs          | Retry         |
  | $Ignore     | Ignore Button in MessageBox/system dialogs         | Ignore        |
  | $Abort      | Abort Button in MessageBox/system dialogs          | Abort         |
  | $Next year  | Next-year navigation tooltip in calendar controls  | Next Year     |
  | $Next month | Next-month navigation tooltip in calendar controls | Next Month    |
  | $Last year  | Last-year navigation tooltip in calendar controls  | Last Year     |
  | $Last month | Last-month navigation tooltip in calendar controls | Last Month    |
  | $Offline    | Offline connectivity loss notification             | Offline       |

## Localizing Resources

Beyond system localization, you'll likely need to localize application resources (strings, images, etc.).

Create `.resx` files as needed using the approach above. See [How to: Create a Localized Resource File](https://msdn.microsoft.com/en-us/library/aa992030\(v=vs.100\).aspx).

Use the [`ResourceManager`](https://msdn.microsoft.com/en-us/library/system.resources.resourcemanager\(v=vs.110\).aspx) class to retrieve localized values. Wisej.NET handles thread culture switching for client requests.

{% tabs %}
{% tab title="C#" %}

```csharp
var RS = new ResourceManager("Localization.Resources", this.GetType().Assembly);
var title = RS.GetString("Title");
```

{% endtab %}

{% tab title="VB.NET" %}

```visual-basic
Dim RS as ResourceManager = new ResourceManager("Localization.Resources", Me.GetType().Assembly)
Dim title as String = RS.GetString("Title")
```

{% endtab %}
{% endtabs %}

## Detecting/Switching Browser Language

Wisej.NET automatically detects browser language and switches application/system resources accordingly.

You can force a specific language for the application (user session) by:

1. Setting the `culture` property in `Default.json` (default is "auto"). See [Configuration](https://docs.wisej.com/docs/concepts/configuration).
2. Using one of these methods:
   * Assign `Application.CurrentCulture` property
   * Add `lang` URL parameter (e.g., <http://localhost/myapp?lang=de> for German)

When current culture changes from the session's initial culture, Wisej.NET raises the `Application.CultureChanged` event.

{% hint style="warning" %}
Designer-localized controls update **only** at creation. No built-in mechanism exists to change already-created controls. To update existing controls either:

* Re-create the container and call `InitializeControl`
* Write custom code to reapply resources
  {% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.wisej.com/docs/concepts/localization.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
