In ABP Framework, `text template` is a mixture of text blocks and control logic that can generate a `string` result. [Scriban](https://github.com/lunet-io/scriban) is used for the control logic and [Abp.Localization](Localization.md) is used to make content easily localizable. The generated string can be text of any kind, such as a web page, an e-mail content etc.
> **stored content**
```html
<ol>
{{~ for $i in 0..3 ~}}
<li>{{ L "WelcomeMessage" }}</li>
{{~ endfor ~}}
</ol>
```
> **result** (for en culture)
```
1. Welcome to the abp.io!
2. Welcome to the abp.io!
3. Welcome to the abp.io!
4. Welcome to the abp.io!
```
## Installation
It is suggested to use the [ABP CLI](CLI.md) to install this package.
### Using the ABP CLI
Open a command line window in the folder of the project (.csproj file) and type the following command:
````bash
abp add-package Volo.Abp.TextTemplating
````
### Manual Installation
If you want to manually install;
1. Add the [Volo.Abp.TextTemplating](https://www.nuget.org/packages/Volo.Abp.TextTemplating) NuGet package to your project:
````
Install-Package Volo.Abp.TextTemplating
````
2. Add the `AbpTextTemplatingModule` to the dependency list of your module:
````csharp
[DependsOn(
//...other dependencies
typeof(AbpTextTemplatingModule) //Add the new module dependency
)]
public class YourModule : AbpModule
{
}
````
## Logic
A Text Template is a combination of two object.
-`TemplateDefinition`
-`TemplateContent`
### Template Definition
Template Definition is an object that contains some information about your `Text Templates`. Template Definition object contains the following properties.
-`Name`*(string)*
-`IsLayout`*(boolean)*
-`Layout`*(string)* contains the <u>name of layout template</u>
You can localize your Text Templates by choosing two different method.
-`Inline Localization`
-`Multiple Content Localization`
### Inline Localization
Inline localized Text Templates is using only one content resource, and it is using the `Abp.Localization` to get content in different languages/cultures.