> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Liquid söz dizimini kullanma

> Liquid etiketleri, filtreler, koşullar ve döngülerle e-posta, push, SMS, uygulama içi ve Live Activity içeriğini kişiselleştirin — OneSignal'in etiketler, özellikler, özel veriler ve Data Feeds gibi veri kaynakları tarafından desteklenir.

Liquid, OneSignal tarafından e-posta, push, SMS, uygulama içi ve Live Activities dahil olmak üzere kanallar genelinde mesajları kişiselleştirmek için desteklenen bir şablonlama dilidir. Mesaj içeriğini dinamik olarak özelleştirmek için etiketler, filtreler ve koşullar kullanır.

Liquid söz dizimi hakkında daha fazla bilgi edinmek için [resmi Liquid belgelerine](https://shopify.github.io/liquid/basics/introduction/) bakın.

***

## Temel söz dizimi

Liquid iki ana söz dizimi yapısı kullanır:

1. **Çıktı Etiketleri**: `{{ ... }}` — Bir değişken veya nesneden veriyi görüntüler.
2. **Mantık Etiketleri**: `{% ... %}` — Koşullu ifadeleri veya döngüleri yürütür.

***

## Koşullar

### Operatörler

* `==`, `!=`, `>`, `<`, `>=`, `<=`
* `and`, `or`
* `contains` (string veya dizi)

```text liquid theme={null}
{% if true or false and false %}
  This is true.
{% endif %}
```

### `if`, `elsif`, `else`

```text liquid theme={null}
{%- assign userLang = subscription.language -%}
{% if userLang == "es" -%}
Hola {{ first_name }}!
{%- elsif userLang == "fr" -%}
Bonjour {{ first_name }}!
{%- else -%}
Hello {{ first_name }}!
{%- endif %}
```

### `unless`

```text liquid theme={null}
{% unless level == "1" %}
  Great job getting past the first level!
{% endunless %}
```

***

## Filtreler

Verilerin nasıl görüntüleneceğini ayarlamak için `{{ variable | filter }}` kullanarak filtreler uygulayın.

### `default`

Özellik boşsa veya mevcut değilse varsayılan bir değer atayın.

```text liquid theme={null}
Hello {{ first_name | default: "there" }}.
```

### `date`

Tarih filtresi bir zaman damgasını başka bir tarih formatına dönüştürür. Bu söz diziminin formatı [strftime](https://strftime.net/) ile aynıdır. Giriş, Ruby'nin [Time.parse](https://ruby-doc.org/stdlib-2.4.1/libdoc/time/rdoc/Time.html) ile aynı formatı kullanır.

Tarihleri etiketlerle saniye cinsinden unix zaman damgası olarak ayarlayın. Bu, hem liquid söz dizimi kişiselleştirmesinin hem de [Time Operators](./time-operators) ile segmentasyonun kullanılmasına izin verir. Örneğin, bir etiket şöyle görünebilir: `bill_due : 1687968776`

```text liquid theme={null}
{{ bill_due | date: "%a, %b %d, %y" }}
{{ "now" | date: "%Y-%m-%d %H:%M" }}
```

```text Result theme={null}
Wed, Jun 28, 23
```

```text liquid theme={null}
{{ bill_due | date: "%Y" }}
```

```text Result theme={null}
2023
```

Tarih biçimlendirme, iyi biçimlendirilmiş tarihler içeriyorsa string'ler üzerinde çalışır.

```text liquid theme={null}
{{ "March 14, 2016" | date: "%b %d, %y" }}
```

```text Result theme={null}
Mar 14, 16
```

Geçerli zamanı almak için tarih filtresiyle birlikte özel `now` (veya `today`) kelimesini iletin.

```text liquid theme={null}
This message was sent at {{ "now" | date: "%Y-%m-%d %H:%M" }}.
```

```text Result theme={null}
This message was sent at 2022-11-02 14:39.
```

<Info>
  Geçerli zaman, mesajın alıcıya gönderildiği zamana göre mesajda render edilecektir. Mesajı test ediyorsanız, test mesajının gönderildiği zamanı geçerli zaman olarak göreceksiniz.
</Info>

### `capitalize`

Bu filtre, bir string'in ilk karakterini büyük harf yapar ve kalan karakterleri küçük harfe dönüştürür.

```text liquid theme={null}
{{ "my GREAT title" | capitalize }}
```

```text Result theme={null}
My great title
```

### `round`

Bu filtre bir sayıyı en yakın tam sayıya veya bir sayı argüman olarak iletilirse o sayıdaki ondalık basamak sayısına yuvarlar.

```text liquid theme={null}
{{ 1.2 | round }}
  {{ 2.7 | round }}
{{ 183.357 | round: 2 }}
```

```text Result theme={null}
1
3
183.36
```

### `pluralize`

Bu filtre, verilen bir sayıya göre bir string'in tekil veya çoğul formunu döndürür. Sayı tam sayı olmalı ve string olarak sağlanabilir. Bir string'in hem tekil hem de çoğul formları sağlanmalıdır.

```text liquid theme={null}
{{ 1 | pluralize: "singular", "plural" }}
{{ 2 | pluralize: "singular", "plural" }}
1 {{ 1 | pluralize: "person", "people" }}
2 {{ 2 | pluralize: "person", "people" }}
2 {{ "2" | pluralize: "person", "people" }}
```

```text Result theme={null}
singular
plural
1 person
2 people
2 people
```

***

## Yineleme

### `for` döngüleri

Bir kod bloğunu tekrar tekrar yürütür. Bir `for` döngüsü içinde kullanılabilen özelliklerin tam listesi için [Liquid `for` döngüsü belgelerine](https://shopify.github.io/liquid/tags/iteration/) bakın.

```text liquid theme={null}
{% for product in message.custom_data.products %}
  - {{ product.name }}
  {% else %}
    Sorry, we're sold out of all products.
  {% endfor %}
```

```json Request Body theme={null}
{
  "app_id": "YOUR_APP_ID",
  "template_id": "YOUR_TEMPLATE_ID",
  "custom_data": {
    "products": [
      { "name": "Sweater" },
      { "name": "Hat" },
      { "name": "Shirt" }
    ]
  }
}
```

```text Result theme={null}
- Sweater
- Hat
- Shirt

(message.custom_data.products boşsa)
Üzgünüz, tüm ürünlerimiz tükendi.
```

<Warning>
  Güçlü ve esnek olmasına rağmen, liquid söz diziminde `for` döngülerinin kullanımı bazı nadir durumlarda zayıf bildirim teslimat performansına yol açabilir. `for` döngülerinin kullanımına dikkat edin. Ayrıca birkaç Push Kanal alanında `for` döngülerinin kullanımını engellediğimizi unutmayın: `contents`, `headings`, `subtitle`, `apns_alert` ve `url`
</Warning>

### `limit` & `offset`

Döngüyü belirtilen sayıda yineleme ile sınırlar. Örneğin, bir mesajda yalnızca 4 ürün göstermek istiyorsanız, gösterilen ürün sayısını belirlemek için Limits ve Offsets kullanabilirsiniz.

```text Data theme={null}
great_numbers = [1,2,3,4,5,6]
```

```text liquid theme={null}
{% for number in great_numbers limit:2 %}
  {{ number }}
{% endfor %}
```

```text Result theme={null}
1 2
```

Döngüyü belirtilen dizinde başlatmak için bir offset değeri ekleyin:

```text Data theme={null}
great_numbers = [1,2,3,4,5,6]
```

```text liquid theme={null}
{% for number in great_numbers limit: 3 %}
  {{ number }}
{% endfor %}

{% for number in great_numbers limit: 3 offset: 3 %}
  {{ number }}
{% endfor %}
```

```text Result theme={null}
1 2 3
4 5 6
```

### `where`

Yalnızca belirli bir özellik değerine sahip nesneleri içeren bir dizi oluşturur veya varsayılan olarak herhangi bir doğru değer.

Bu örnekte, bir ürün listeniz olduğunu ve mutfak ürünlerinizi ayrı olarak göstermek istediğinizi varsayalım. `where` kullanarak, yalnızca `kitchen` `type`'ına sahip ürünleri içeren bir dizi oluşturabilirsiniz.

```text Data theme={null}
products = [
  {name:"Vacuum", type:"electronics"},
  {name:"Spatula", type:"kitchen"},
  {name:"Television", type:"electronics"},
  {name:"Garlic press", type:"kitchen"}
]
```

```text liquid theme={null}
All products:
{% for product in products %}
- {{ product.name }}
{% endfor %}

{% assign kitchen_products = products | where: "type", "kitchen" %}

Kitchen products:
{% for product in kitchen_products %}
- {{ product.name }}
{% endfor %}
```

```text Result theme={null}
All products:
  - Vacuum
  - Spatula
  - Television
  - Garlic press

Kitchen products:
- Spatula
- Garlic press
```

***

## String Manipülasyonu

Mesajlarda etiket değerlerinin veya satır içi string'lerin nasıl görüntüleneceğini ayarlamak için string filtreleri uygulayın.

| Komut           | Açıklama                                                                  | Örnek                                                    | Örnek Çıktı |
| --------------- | ------------------------------------------------------------------------- | -------------------------------------------------------- | ----------- |
| `replace`       | Bir alt string'i başka bir string ile değiştirir.                         | `{{ 'hello world' \| replace: 'world', 'there' }}`       | hello there |
| `capitalize`    | Bir string'in ilk harfini büyük harf yapar.                               | `{{ 'hello' \| capitalize }}`                            | Hello       |
| `upcase`        | Bir string'i büyük harfe dönüştürür.                                      | `{{ 'hello' \| upcase }}`                                | HELLO       |
| `downcase`      | Bir string'i küçük harfe dönüştürür.                                      | `{{ 'HELLO' \| downcase }}`                              | hello       |
| `strip`         | Bir string'den baştaki ve sondaki boşlukları kaldırır.                    | `{{ ' hello ' \| strip }}`                               | hello       |
| `strip_html`    | Bir string'den tüm HTML etiketlerini kaldırır.                            | `{{ '<p>hello</p>' \| strip_html }}`                     | hello       |
| `truncate`      | Bir string'i belirtilen uzunlukta kısaltır, gerekirse üç nokta (…) ekler. | `{{ 'This is a long sentence' \| truncate: 10 }}`        | This is a…  |
| `truncatewords` | Belirli sayıda kelimeden sonra bir string'i keser.                        | `{{ 'This is a long sentence' \| truncatewords: 2 }}`    | This is…    |
| `replace_first` | Bir alt string'in ilk oluşumunu değiştirir.                               | `{{ 'hello world' \| replace_first: 'world', 'there' }}` | hello there |
| `prepend`       | Başka bir string'in başına bir string ekler.                              | `{{ 'world' \| prepend: 'hello ' }}`                     | hello world |
| `append`        | Başka bir string'in sonuna bir string ekler.                              | `{{ 'hello' \| append: ' world' }}`                      | hello world |
| `lstrip`        | Bir string'den baştaki boşlukları kaldırır.                               | `{{ ' hello' \| lstrip }}`                               | hello       |
| `rstrip`        | Bir string'den sondaki boşlukları kaldırır.                               | `{{ 'hello ' \| rstrip }}`                               | hello       |

***

## SSS

### Değiştirme neden çalışmıyor?

* Uygulama İçi Mesajlar özellik değiştirmeyi desteklemez.
* "Send Test Message" kullanılırken etiket değiştirme çalışmaz.
* Etiket anahtarları alfasayısal olmalı veya \_ ve - kullanmalıdır (nokta veya boşluk yok).
* Değiştirme önizleme modunda görünmez — test etmek için gerçek bir mesaj gönderin.

### `default` mi yoksa `if/else` mi kullanmalıyım?

Yalnızca değişken değerinin bir geri dönüş değerine ihtiyacı varsa ve çevreleyen metin aynı kalıyorsa **`default` filtresini** kullanın.

```text liquid theme={null}
Hello {{ name | default: "there" }}!
```

```text Result (name = "Jon") theme={null}
Hello Jon!
```

```text Result (name boşsa) theme={null}
Hello there!
```

Çevreleyen metin, noktalama işaretleri veya cümle yapısının da değişkenin var olup olmadığına göre değişmesi gerektiğinde **`if/else` koşullu mantığını** kullanın.

```text liquid theme={null}
{% if name %}{{ name }}, shop your favorites!{% else %}Shop your favorites!{% endif %}
```

```text Result (name = "Jon") theme={null}
Jon, shop your favorites!
```

```text Result (name boşsa) theme={null}
Shop your favorites!
```

<Warning>
  Cümle yapısı değiştiğinde `default` kullanmayın. Örneğin, `{{ name | default: "Shop your favorites" }}, shop your favorites` ifadesi, isim boş olduğunda "Shop your favorites, shop your favorites" şeklinde işlenecektir. Geri dönüş değeri yalnızca değişkenden fazlasını değiştiriyorsa `if/else` kullanın.
</Warning>

### Boşluk ve yeni satırlar nasıl kontrol edilir?

Çevredeki boşlukları kırpmak için tire kullanın: `{{- ... -}}`, `{%- ... -%}`.
Daha fazla ayrıntı için [Boşluk kontrolü](https://shopify.github.io/liquid/basics/whitespace/)'ne bakın.

### Kullanıcı tarafından oluşturulan içerik nasıl işlenir?

Liquid ayrıştırmasını önlemek için kullanıcı tarafından oluşturulan metni `{% raw %}` ve `{% endraw %}` içine sarın. ["raw" söz dizimi](https://shopify.dev/docs/api/liquid/tags/raw)'ne bakın.

```json theme={null}
{
  "contents": {
    "en": "{% raw %} Your user-generated content with invalid characters like {{ {% endraw %}"
  }
}
```

***

## İlgili sayfalar

<Columns cols={2}>
  <Card title="Mesaj kişiselleştirme" icon="wand-magic-sparkles" href="./message-personalization">
    Liquid, Data Feeds ve özel etkinlikler dahil tüm kişiselleştirme seçeneklerine genel bakış.
  </Card>

  <Card title="Data Feeds" icon="database" href="./data-feeds">
    Gönderim zamanında API'lerinizden mesajlara gerçek zamanlı veri çekin.
  </Card>

  <Card title="Etiketler" icon="tag" href="./add-user-data-tags">
    Segmentasyon ve Liquid kişiselleştirme için kullanıcılara anahtar-değer çiftleri depolayın.
  </Card>

  <Card title="Şablonlar" icon="file-lines" href="./templates">
    Liquid kişiselleştirmesi yerleşik yeniden kullanılabilir mesaj şablonları oluşturun.
  </Card>
</Columns>
