[{"data":1,"prerenderedAt":883},["ShallowReactive",2],{"search-de":3,"content-de-examples\u002Fmultilingual-email":4,"surround-de-\u002Fexamples\u002Fmultilingual-email":874},[],{"id":5,"title":6,"body":7,"description":13,"extension":868,"meta":869,"navigation":114,"path":870,"seo":871,"stem":872,"__hash__":873},"content_de\u002F4.examples\u002F6.multilingual-email.md","Mehrsprachige E-Mails",{"type":8,"value":9,"toc":861},"minimark",[10,14,19,22,63,66,70,76,295,299,315,342,369,378,384,438,454,458,461,819,831,835,857],[11,12,13],"p",{},"Versenden Sie E-Mails in der bevorzugten Sprache der Empfänger — mithilfe von Template-Übersetzungen.",[15,16,18],"h2",{"id":17},"reihenfolge-der-sprachauflösung","Reihenfolge der Sprachauflösung",[11,20,21],{},"Owlat ermittelt die Sprache für jede E-Mail in dieser Reihenfolge:",[23,24,25,37,43,53],"ol",{},[26,27,28,36],"li",{},[29,30,31,32],"strong",{},"Expliziter Parameter ",[33,34,35],"code",{},"language"," in der Sendeanfrage",[26,38,39,42],{},[29,40,41],{},"Bevorzugte Sprache des Kontakts",", gespeichert im Kontaktdatensatz",[26,44,45,48,49,52],{},[29,46,47],{},"Standardsprache des Templates",", gewählt beim Anlegen des Templates (und bei Marketing-Templates später in den ",[29,50,51],{},"Einstellungen"," änderbar)",[26,54,55,58,59,62],{},[29,56,57],{},"Fallback-Standard"," (",[33,60,61],{},"en",")",[11,64,65],{},"Je nach Bedarf können Sie die Sprache auf unterschiedlichen Ebenen steuern.",[15,67,69],{"id":68},"option-1-explizite-sprache-pro-anfrage","Option 1: Explizite Sprache pro Anfrage",[11,71,72,73,75],{},"Übergeben Sie ",[33,74,35],{}," direkt, wenn Sie das Gebietsschema des Benutzers kennen:",[77,78,79,217],"code-group",{},[80,81,87],"pre",{"className":82,"code":83,"filename":84,"language":85,"meta":86,"style":86},"language-typescript shiki shiki-themes github-light github-dark-dimmed","import { Owlat } from '@owlat\u002Fsdk-js'\n\nconst owlat = new Owlat('lm_live_...')\n\nawait owlat.transactional.send({\n  slug: 'welcome',\n  email: 'mira@acme.io',\n  dataVariables: { firstName: 'Mira' },\n  language: 'de',\n})\n","TypeScript","typescript","",[33,88,89,109,116,145,150,165,177,188,200,211],{"__ignoreMap":86},[90,91,94,98,102,105],"span",{"class":92,"line":93},"line",1,[90,95,97],{"class":96},"s7YZ4","import",[90,99,101],{"class":100},"sYgZi"," { Owlat } ",[90,103,104],{"class":96},"from",[90,106,108],{"class":107},"s-HuK"," '@owlat\u002Fsdk-js'\n",[90,110,112],{"class":92,"line":111},2,[90,113,115],{"emptyLinePlaceholder":114},true,"\n",[90,117,119,122,126,129,132,136,139,142],{"class":92,"line":118},3,[90,120,121],{"class":96},"const",[90,123,125],{"class":124},"sviXB"," owlat",[90,127,128],{"class":96}," =",[90,130,131],{"class":96}," new",[90,133,135],{"class":134},"sPO5f"," Owlat",[90,137,138],{"class":100},"(",[90,140,141],{"class":107},"'lm_live_...'",[90,143,144],{"class":100},")\n",[90,146,148],{"class":92,"line":147},4,[90,149,115],{"emptyLinePlaceholder":114},[90,151,153,156,159,162],{"class":92,"line":152},5,[90,154,155],{"class":96},"await",[90,157,158],{"class":100}," owlat.transactional.",[90,160,161],{"class":134},"send",[90,163,164],{"class":100},"({\n",[90,166,168,171,174],{"class":92,"line":167},6,[90,169,170],{"class":100},"  slug: ",[90,172,173],{"class":107},"'welcome'",[90,175,176],{"class":100},",\n",[90,178,180,183,186],{"class":92,"line":179},7,[90,181,182],{"class":100},"  email: ",[90,184,185],{"class":107},"'mira@acme.io'",[90,187,176],{"class":100},[90,189,191,194,197],{"class":92,"line":190},8,[90,192,193],{"class":100},"  dataVariables: { firstName: ",[90,195,196],{"class":107},"'Mira'",[90,198,199],{"class":100}," },\n",[90,201,203,206,209],{"class":92,"line":202},9,[90,204,205],{"class":100},"  language: ",[90,207,208],{"class":107},"'de'",[90,210,176],{"class":100},[90,212,214],{"class":92,"line":213},10,[90,215,216],{"class":100},"})\n",[80,218,223],{"className":219,"code":220,"filename":221,"language":222,"meta":86,"style":86},"language-sh shiki shiki-themes github-light github-dark-dimmed","curl -X POST https:\u002F\u002Fyour-deployment.convex.site\u002Fapi\u002Fv1\u002Ftransactional \\\n  -H \"Authorization: Bearer lm_live_...\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"slug\": \"welcome\",\n    \"email\": \"mira@acme.io\",\n    \"dataVariables\": { \"firstName\": \"Mira\" },\n    \"language\": \"de\"\n  }'\n","curl","sh",[33,224,225,243,253,262,270,275,280,285,290],{"__ignoreMap":86},[90,226,227,230,233,236,239],{"class":92,"line":93},[90,228,221],{"class":229},"sOLd2",[90,231,232],{"class":124}," -X",[90,234,235],{"class":107}," POST",[90,237,238],{"class":107}," https:\u002F\u002Fyour-deployment.convex.site\u002Fapi\u002Fv1\u002Ftransactional",[90,240,242],{"class":241},"s74oq"," \\\n",[90,244,245,248,251],{"class":92,"line":111},[90,246,247],{"class":124},"  -H",[90,249,250],{"class":107}," \"Authorization: Bearer lm_live_...\"",[90,252,242],{"class":241},[90,254,255,257,260],{"class":92,"line":118},[90,256,247],{"class":124},[90,258,259],{"class":107}," \"Content-Type: application\u002Fjson\"",[90,261,242],{"class":241},[90,263,264,267],{"class":92,"line":147},[90,265,266],{"class":124},"  -d",[90,268,269],{"class":107}," '{\n",[90,271,272],{"class":92,"line":152},[90,273,274],{"class":107},"    \"slug\": \"welcome\",\n",[90,276,277],{"class":92,"line":167},[90,278,279],{"class":107},"    \"email\": \"mira@acme.io\",\n",[90,281,282],{"class":92,"line":179},[90,283,284],{"class":107},"    \"dataVariables\": { \"firstName\": \"Mira\" },\n",[90,286,287],{"class":92,"line":190},[90,288,289],{"class":107},"    \"language\": \"de\"\n",[90,291,292],{"class":92,"line":202},[90,293,294],{"class":107},"  }'\n",[15,296,298],{"id":297},"option-2-gespeicherte-kontaktpräferenz","Option 2: Gespeicherte Kontaktpräferenz",[11,300,301,302,305,306,308,309,314],{},"Jeder Kontakt kann eine gespeicherte ",[29,303,304],{},"Sprach","-Präferenz besitzen. Wenn Sie ohne expliziten ",[33,307,35],{},"-Parameter senden, greift die Auflösung auf diesen Wert zurück (siehe die ",[310,311,313],"a",{"href":312},"#language-resolution-order","Reihenfolge der Auflösung"," oben).",[11,316,317,318,321,322,325,326,329,330,333,334,337,338,341],{},"Die Sprache eines Kontakts ist ",[29,319,320],{},"nicht"," Teil der Create-API — ",[33,323,324],{},"owlat.contacts.create({ ... })"," (und das zugrunde liegende ",[33,327,328],{},"POST \u002Fapi\u002Fv1\u002Fcontacts",") akzeptieren nur ",[33,331,332],{},"email",", ",[33,335,336],{},"firstName"," und ",[33,339,340],{},"lastName",". Die gespeicherte Sprache setzen Sie auf eine von zwei Arten:",[343,344,345,355],"ul",{},[26,346,347,350,351,354],{},[29,348,349],{},"Dashboard"," — den Kontakt bearbeiten und das Feld ",[29,352,353],{},"Sprache"," setzen.",[26,356,357,360,361,365,366,368],{},[29,358,359],{},"CSV-Import"," — beim ",[310,362,364],{"href":363},"\u002Fguide\u002Fimporting-contacts","Importieren von Kontakten"," eine Spalte ",[33,367,35],{}," mitliefern.",[11,370,371,372,374,375,377],{},"Ein transaktionaler Versand speichert die ",[33,373,35],{}," der Anfrage ",[29,376,320],{}," am Kontakt — auch dann nicht, wenn der Versand einen brandneuen Kontakt anlegt. Die Sprache der Anfrage wird nur im Sendedatensatz festgehalten; ein neuer Kontakt wird ohne gespeicherte Sprachpräferenz angelegt.",[11,379,380,381,383],{},"Sobald ein Kontakt eine gespeicherte Sprache hat, können Sie ",[33,382,35],{}," weglassen und die Auflösung darauf zurückgreifen lassen:",[80,385,387],{"className":82,"code":386,"language":85,"meta":86,"style":86},"\u002F\u002F No language param — the resolver uses the contact's stored preference,\n\u002F\u002F then the template default, then 'en'.\nawait owlat.transactional.send({\n  slug: 'welcome',\n  email: 'mira@acme.io',\n  dataVariables: { firstName: 'Mira' },\n})\n",[33,388,389,395,400,410,418,426,434],{"__ignoreMap":86},[90,390,391],{"class":92,"line":93},[90,392,394],{"class":393},"sDN9O","\u002F\u002F No language param — the resolver uses the contact's stored preference,\n",[90,396,397],{"class":92,"line":111},[90,398,399],{"class":393},"\u002F\u002F then the template default, then 'en'.\n",[90,401,402,404,406,408],{"class":92,"line":118},[90,403,155],{"class":96},[90,405,158],{"class":100},[90,407,161],{"class":134},[90,409,164],{"class":100},[90,411,412,414,416],{"class":92,"line":147},[90,413,170],{"class":100},[90,415,173],{"class":107},[90,417,176],{"class":100},[90,419,420,422,424],{"class":92,"line":152},[90,421,182],{"class":100},[90,423,185],{"class":107},[90,425,176],{"class":100},[90,427,428,430,432],{"class":92,"line":167},[90,429,193],{"class":100},[90,431,196],{"class":107},[90,433,199],{"class":100},[90,435,436],{"class":92,"line":179},[90,437,216],{"class":100},[439,440,443],"callout",{"title":441,"type":442},"Im Zweifel explizit übergeben","tip",[11,444,445,446,448,449,453],{},"Wenn Ihre Anwendung das Gebietsschema der Empfänger ohnehin kennt (aus Ihrem eigenen Benutzerdatensatz), ist es am berechenbarsten, ",[33,447,35],{}," bei jedem Versand mitzugeben — siehe ",[310,450,452],{"href":451},"#option-1-explicit-language-per-request","Option 1",". Die gespeicherte Präferenz eignet sich am besten, wenn die Sprache innerhalb von Owlat verwaltet wird (Dashboard oder Import).",[15,455,457],{"id":456},"vollständiges-beispiel-gebietsschema-aus-ihrer-datenbank-lesen","Vollständiges Beispiel: Gebietsschema aus Ihrer Datenbank lesen",[11,459,460],{},"Ein vollständiger Handler, der die Gebietsschema-Präferenz des Benutzers liest und in der richtigen Sprache versendet:",[80,462,464],{"className":82,"code":463,"language":85,"meta":86,"style":86},"import { Hono } from 'hono'\nimport { Owlat } from '@owlat\u002Fsdk-js'\n\nconst app = new Hono()\nconst owlat = new Owlat(process.env.OWLAT_API_KEY!)\n\napp.post('\u002Fapi\u002Fsend-notification', async (c) => {\n  const { userId, templateSlug, variables } = await c.req.json()\n\n  \u002F\u002F 1. Look up user locale from your database\n  const user = await db.users.findUnique({\n    where: { id: userId },\n    select: { email: true, firstName: true, locale: true },\n  })\n\n  if (!user) return c.json({ error: 'User not found' }, 404)\n\n  \u002F\u002F 2. Send with the user's preferred language\n  const result = await owlat.transactional.send({\n    slug: templateSlug,\n    email: user.email,\n    dataVariables: {\n      firstName: user.firstName,\n      ...variables,\n    },\n    language: user.locale ?? undefined,\n  })\n\n  return c.json({ messageId: result.transactionalEmailId })\n})\n",[33,465,466,478,488,492,509,532,536,569,607,611,616,636,642,663,669,674,709,714,720,738,744,750,756,762,771,777,791,796,801,814],{"__ignoreMap":86},[90,467,468,470,473,475],{"class":92,"line":93},[90,469,97],{"class":96},[90,471,472],{"class":100}," { Hono } ",[90,474,104],{"class":96},[90,476,477],{"class":107}," 'hono'\n",[90,479,480,482,484,486],{"class":92,"line":111},[90,481,97],{"class":96},[90,483,101],{"class":100},[90,485,104],{"class":96},[90,487,108],{"class":107},[90,489,490],{"class":92,"line":118},[90,491,115],{"emptyLinePlaceholder":114},[90,493,494,496,499,501,503,506],{"class":92,"line":147},[90,495,121],{"class":96},[90,497,498],{"class":124}," app",[90,500,128],{"class":96},[90,502,131],{"class":96},[90,504,505],{"class":134}," Hono",[90,507,508],{"class":100},"()\n",[90,510,511,513,515,517,519,521,524,527,530],{"class":92,"line":152},[90,512,121],{"class":96},[90,514,125],{"class":124},[90,516,128],{"class":96},[90,518,131],{"class":96},[90,520,135],{"class":134},[90,522,523],{"class":100},"(process.env.",[90,525,526],{"class":124},"OWLAT_API_KEY",[90,528,529],{"class":96},"!",[90,531,144],{"class":100},[90,533,534],{"class":92,"line":167},[90,535,115],{"emptyLinePlaceholder":114},[90,537,538,541,544,546,549,551,554,556,560,563,566],{"class":92,"line":179},[90,539,540],{"class":100},"app.",[90,542,543],{"class":134},"post",[90,545,138],{"class":100},[90,547,548],{"class":107},"'\u002Fapi\u002Fsend-notification'",[90,550,333],{"class":100},[90,552,553],{"class":96},"async",[90,555,58],{"class":100},[90,557,559],{"class":558},"stnAF","c",[90,561,562],{"class":100},") ",[90,564,565],{"class":96},"=>",[90,567,568],{"class":100}," {\n",[90,570,571,574,577,580,582,585,587,590,593,596,599,602,605],{"class":92,"line":190},[90,572,573],{"class":96},"  const",[90,575,576],{"class":100}," { ",[90,578,579],{"class":124},"userId",[90,581,333],{"class":100},[90,583,584],{"class":124},"templateSlug",[90,586,333],{"class":100},[90,588,589],{"class":124},"variables",[90,591,592],{"class":100}," } ",[90,594,595],{"class":96},"=",[90,597,598],{"class":96}," await",[90,600,601],{"class":100}," c.req.",[90,603,604],{"class":134},"json",[90,606,508],{"class":100},[90,608,609],{"class":92,"line":202},[90,610,115],{"emptyLinePlaceholder":114},[90,612,613],{"class":92,"line":213},[90,614,615],{"class":393},"  \u002F\u002F 1. Look up user locale from your database\n",[90,617,619,621,624,626,628,631,634],{"class":92,"line":618},11,[90,620,573],{"class":96},[90,622,623],{"class":124}," user",[90,625,128],{"class":96},[90,627,598],{"class":96},[90,629,630],{"class":100}," db.users.",[90,632,633],{"class":134},"findUnique",[90,635,164],{"class":100},[90,637,639],{"class":92,"line":638},12,[90,640,641],{"class":100},"    where: { id: userId },\n",[90,643,645,648,651,654,656,659,661],{"class":92,"line":644},13,[90,646,647],{"class":100},"    select: { email: ",[90,649,650],{"class":124},"true",[90,652,653],{"class":100},", firstName: ",[90,655,650],{"class":124},[90,657,658],{"class":100},", locale: ",[90,660,650],{"class":124},[90,662,199],{"class":100},[90,664,666],{"class":92,"line":665},14,[90,667,668],{"class":100},"  })\n",[90,670,672],{"class":92,"line":671},15,[90,673,115],{"emptyLinePlaceholder":114},[90,675,677,680,682,684,687,690,693,695,698,701,704,707],{"class":92,"line":676},16,[90,678,679],{"class":96},"  if",[90,681,58],{"class":100},[90,683,529],{"class":96},[90,685,686],{"class":100},"user) ",[90,688,689],{"class":96},"return",[90,691,692],{"class":100}," c.",[90,694,604],{"class":134},[90,696,697],{"class":100},"({ error: ",[90,699,700],{"class":107},"'User not found'",[90,702,703],{"class":100}," }, ",[90,705,706],{"class":124},"404",[90,708,144],{"class":100},[90,710,712],{"class":92,"line":711},17,[90,713,115],{"emptyLinePlaceholder":114},[90,715,717],{"class":92,"line":716},18,[90,718,719],{"class":393},"  \u002F\u002F 2. Send with the user's preferred language\n",[90,721,723,725,728,730,732,734,736],{"class":92,"line":722},19,[90,724,573],{"class":96},[90,726,727],{"class":124}," result",[90,729,128],{"class":96},[90,731,598],{"class":96},[90,733,158],{"class":100},[90,735,161],{"class":134},[90,737,164],{"class":100},[90,739,741],{"class":92,"line":740},20,[90,742,743],{"class":100},"    slug: templateSlug,\n",[90,745,747],{"class":92,"line":746},21,[90,748,749],{"class":100},"    email: user.email,\n",[90,751,753],{"class":92,"line":752},22,[90,754,755],{"class":100},"    dataVariables: {\n",[90,757,759],{"class":92,"line":758},23,[90,760,761],{"class":100},"      firstName: user.firstName,\n",[90,763,765,768],{"class":92,"line":764},24,[90,766,767],{"class":96},"      ...",[90,769,770],{"class":100},"variables,\n",[90,772,774],{"class":92,"line":773},25,[90,775,776],{"class":100},"    },\n",[90,778,780,783,786,789],{"class":92,"line":779},26,[90,781,782],{"class":100},"    language: user.locale ",[90,784,785],{"class":96},"??",[90,787,788],{"class":124}," undefined",[90,790,176],{"class":100},[90,792,794],{"class":92,"line":793},27,[90,795,668],{"class":100},[90,797,799],{"class":92,"line":798},28,[90,800,115],{"emptyLinePlaceholder":114},[90,802,804,807,809,811],{"class":92,"line":803},29,[90,805,806],{"class":96},"  return",[90,808,692],{"class":100},[90,810,604],{"class":134},[90,812,813],{"class":100},"({ messageId: result.transactionalEmailId })\n",[90,815,817],{"class":92,"line":816},30,[90,818,216],{"class":100},[439,820,823],{"title":821,"type":822},"Unterstützte Sprachen","info",[11,824,825,826,830],{},"Sie müssen die Übersetzungen für jede Sprache vor dem Versand im Owlat-Dashboard anlegen. Existiert für eine angeforderte Sprache keine Übersetzung, wird die Standardsprache des Templates verwendet. Eine Anleitung zur Einrichtung finden Sie unter ",[310,827,829],{"href":828},"\u002Fguide\u002Ftranslations","Übersetzungen",".",[15,832,834],{"id":833},"nächste-schritte","Nächste Schritte",[343,836,837,843,850],{},[26,838,839,842],{},[310,840,841],{"href":828},"Leitfaden zu Übersetzungen"," — Übersetzungen zu Ihren Templates hinzufügen",[26,844,845,849],{},[310,846,848],{"href":847},"\u002Fapi\u002Ftransactional","Referenz zur Transactional-API"," — Details zur Sprachauflösung",[26,851,852,856],{},[310,853,855],{"href":854},"\u002Fexamples\u002Fwelcome-email","Willkommens-E-Mail"," — grundlegendes Muster für transaktionalen Versand",[858,859,860],"style",{},"html pre.shiki code .s7YZ4, html code.shiki .s7YZ4{--shiki-default:#D73A49;--shiki-dark:#F47067}html pre.shiki code .sYgZi, html code.shiki .sYgZi{--shiki-default:#24292E;--shiki-dark:#ADBAC7}html pre.shiki code .s-HuK, html code.shiki .s-HuK{--shiki-default:#032F62;--shiki-dark:#96D0FF}html pre.shiki code .sviXB, html code.shiki .sviXB{--shiki-default:#005CC5;--shiki-dark:#6CB6FF}html pre.shiki code .sPO5f, html code.shiki .sPO5f{--shiki-default:#6F42C1;--shiki-dark:#DCBDFB}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sOLd2, html code.shiki .sOLd2{--shiki-default:#6F42C1;--shiki-dark:#F69D50}html pre.shiki code .s74oq, html code.shiki .s74oq{--shiki-default:#005CC5;--shiki-dark:#F47067}html pre.shiki code .sDN9O, html code.shiki .sDN9O{--shiki-default:#6A737D;--shiki-dark:#768390}html pre.shiki code .stnAF, html code.shiki .stnAF{--shiki-default:#E36209;--shiki-dark:#F69D50}",{"title":86,"searchDepth":111,"depth":111,"links":862},[863,864,865,866,867],{"id":17,"depth":111,"text":18},{"id":68,"depth":111,"text":69},{"id":297,"depth":111,"text":298},{"id":456,"depth":111,"text":457},{"id":833,"depth":111,"text":834},"md",{},"\u002Fexamples\u002Fmultilingual-email",{"title":6,"description":13},"4.examples\u002F6.multilingual-email","N9MQpk3xmZ6DRzLgoGhgM63EJOmAMUeLvcmDzPdzHkA",[875,879],{"title":876,"path":877,"stem":878,"children":-1},"Webhook-Handler","\u002Fexamples\u002Fwebhook-handler","4.examples\u002F5.webhook-handler",{"title":880,"path":881,"stem":882,"children":-1},"Vision","\u002Fvision","5.vision\u002F0.index",1786915111043]