{"id":481,"date":"2021-01-09T12:23:46","date_gmt":"2021-01-09T12:23:46","guid":{"rendered":"http:\/\/fredborg.org\/?p=481"},"modified":"2021-01-09T12:23:48","modified_gmt":"2021-01-09T12:23:48","slug":"xliff-translation-tool","status":"publish","type":"post","link":"https:\/\/fredborg.org\/?p=481","title":{"rendered":"Xliff Translation Tool"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Handling translations in Business Central can be very time consuming, so to help you a little bit I will share with you the way that I handle translations in AL &#x1f60a;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">First off you will need to install the Visual Studio Code extension called XLIFF Sync, this is a great tool which allows you easily to keep all your Xliff files in sync.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/image-1024x329.png\" alt=\"\" class=\"wp-image-482\" width=\"540\" height=\"173\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/image-1024x329.png 1024w, https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/image-300x97.png 300w, https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/image-768x247.png 768w, https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/image.png 1088w\" sizes=\"auto, (max-width: 540px) 100vw, 540px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">To use this tool simply press F1 or CTRL+SHIFT+P and here you will have the ability to create a new Xliff file for any language based on your existing xliff file.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/image-1.png\" alt=\"\" class=\"wp-image-483\" width=\"488\" height=\"49\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/image-1.png 900w, https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/image-1-300x30.png 300w, https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/image-1-768x78.png 768w\" sizes=\"auto, (max-width: 488px) 100vw, 488px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Once you add new fields, actions etc. and you wish to add the new translations to your xliff files you can run the command <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/image-2.png\" alt=\"\" class=\"wp-image-484\" width=\"499\" height=\"58\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/image-2.png 983w, https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/image-2-300x35.png 300w, https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/image-2-768x90.png 768w\" sizes=\"auto, (max-width: 499px) 100vw, 499px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">This will update all your xliff files with the new translations, which you can then translate in the xliff file. However sometimes we would like to use the translations from the base application, or from another xliff file &#x1f914;, to help you with this I have created some simple PowerShell scripts to make it easier, you can find all the source code here <a href=\"https:\/\/dev.azure.com\/dfredborg\/Business%20Central\/_git\/Xlifftranslation?path=%2FXliffTranslationTool.ps1&amp;version=GBmain\" target=\"_blank\" rel=\"noreferrer noopener\">XliffTranslationTool.ps1 &#8211; Repos (azure.com)<\/a> everything is provided as is, and you can do with it what you like &#x1f937;&#x200d;&#x2642;&#xfe0f;. The fist function is called UpdateTranslationsBasedOnAnotherXliffFile and looks as follows:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\nfunction UpdateTranslationsBasedOnAnotherXliffFile\n{\n    Param (\n        &#x5B;Parameter(ValueFromPipelineByPropertyName=$True)]\n        $baseXliff = &#039;&#039;,\n        &#x5B;Parameter(ValueFromPipelineByPropertyName=$True)]\n        $targetXliff = &#039;&#039;,\n        &#x5B;Parameter(ValueFromPipelineByPropertyName=$True)]\n        $output = &#039;&#039;\n\n    )\n    &#x5B;System.Xml.XmlDocument]$file = new-object System.Xml.XmlDocument\n\n    &#x5B;XML]$units = Get-Content $baseXliff\n\n    $hashBase = @{}\n\n\n     ForEach ($unit in $units.xliff.file.body.group.&#039;trans-unit&#039;) \n     {\n         if(-not $hashBase.ContainsKey($unit.source))\n         {\n            $hashBase.Add($unit.source,$unit.target.InnerText) \n         \n          }\n\n     }\n\n    &#x5B;System.Xml.XmlDocument]$file = new-object System.Xml.XmlDocument\n\n    &#x5B;XML]$units = Get-Content $targetXliff\n\n\n     ForEach ($unit in $units.xliff.file.body.group.&#039;trans-unit&#039;) \n     {\n     \n        if($unit.target.State -eq &quot;needs-translation&quot;)\n        {\n            if($hashBase.ContainsKey($unit.source))\n            {\n                $target = $hashBase.Item($unit.source);\n                $unit.target.InnerText = $target; \n                $unit.target.State = &quot;&quot;;              \n            }\n            \n        }             \n\n     }\n\n     $units.Save($output)\n\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">This function takes three parameters, the first which points to the xliff file from which you wish to copy your translations from, the second is your own xliff file, and the last is where you would like to place the newly merged translation file the call could look something like this:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\nUpdateTranslationsBasedOnAnotherXliffFile -baseXliff &quot;C:\\temp\\Base Application.da-DK.xlf&quot; -targetXliff &quot;C:\\Users\\denni\\Documents\\AL\\ALProject1\\Translations\\ALProject1.da-DK.xlf&quot; -output &quot;C:\\Temp\\Out\\ALProject1.da-DK.xlf&quot;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The next function is called ExportTranslationsToCSV and this will export all your translations into a CSV file with two columns the source and the target, this takes two parameters the first is your Xliff file and the second is the location where you wish to create your csv file:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\nfunction ExportTranslationsToCSV\n{\n    Param (\n        &#x5B;Parameter(ValueFromPipelineByPropertyName=$True)]\n        $FromXliff = &#039;&#039;,\n        &#x5B;Parameter(ValueFromPipelineByPropertyName=$True)]\n        $output = &#039;&#039;\n    )\n    \n    &#x5B;System.Xml.XmlDocument]$file = new-object System.Xml.XmlDocument\n\n    &#x5B;XML]$units = Get-Content $FromXliff\n\n    $hashBase = @{}\n\n\n    $out = ForEach ($unit in $units.xliff.file.body.group.&#039;trans-unit&#039;) \n        {\n\n            $target = $unit.target.ToString();     \n\n            if($target -eq &quot;target&quot;)\n                {\n                    $target = $unit.target.InnerText;\n                }\n\n            New-Object -TypeName PSObject -Property @{\n                Source = $unit.source\n                Target = $target;\n\n              } | Select-Object Source,Target\n         \n        }\n\n    $out | Export-Csv $output -Encoding UTF8 -Delimiter &#039;;&#039; -NoTypeInformation\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">This could be called with something like this:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\nExportTranslationsToCSV -FromXliff &quot;C:\\Temp\\Out\\ALProject1.da-DK.xlf&quot; -output C:\\temp\\test.csv \n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The last function is called ImportToXliffFromCSV and this function will create a new xliff file based on a CSV and your own xliff file, it takes the following parameters the out put where you wish your new xliff file to be created, from csv which will be your csv file holding the translations and target which is your current xliff file:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\nfunction ImportToXliffFromCSV\n{\n\n    Param (\n            &#x5B;Parameter(ValueFromPipelineByPropertyName=$True)]\n            $output = &#039;&#039;,\n            &#x5B;Parameter(ValueFromPipelineByPropertyName=$True)]\n            $FromCSV = &#039;&#039;,        \n            &#x5B;Parameter(ValueFromPipelineByPropertyName=$True)]\n            $targetXliff = &#039;&#039;\n          )\n    \n    $imported = import-csv -Delimiter &#039;;&#039; -Path $FromCSV\n\n    $hashBase = @{}\n    \n     ForEach ($item in $imported) \n     {\n         if(-not $hashBase.ContainsKey($item.source))\n             {\n                $hashBase.Add($item.source,$item.target) \n             }\n\n     }\n\n    &#x5B;System.Xml.XmlDocument]$file = new-object System.Xml.XmlDocument\n\n    &#x5B;XML]$units = Get-Content $targetXliff\n\n\n     ForEach ($unit in $units.xliff.file.body.group.&#039;trans-unit&#039;) \n     {\n\n      if($unit.target.State -eq &quot;needs-translation&quot;)\n        {\n            if($hashBase.ContainsKey($unit.source))\n                {          \n                    $target = $hashBase.Item($unit.source);\n                    $unit.target.InnerText = $target; \n                    $unit.target.State = &quot;&quot;;               \n                }         \n        }            \n\n     }\n\n    $units.Save($output)\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The function could be called with something like this:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\nImportToXliffFromCSV -output &quot;C:\\Temp\\Out\\ALProject1.da-DK.xlf&quot; -FromCSV &#039;C:\\temp\\test.csv&#039; -targetXliff &quot;C:\\Temp\\Out\\ALProject1.da-DK.xlf&quot;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">And that is it, I will give you a much more inadept look and demo in the video below, and since everything is written in PowerShell you could also use this tool in your pipelines; where you for example could let your pipeline create the CSV fil and upload or send it to your customers for them to translate it, and then your pipeline could also import the CSV file from a webservice which holds the translated CSV file, but I will leave that part to you to play with &#x1f609;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And until next time stay safe &#x1f637;&#x1f489;<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\"  id=\"_ytid_29835\"  width=\"1140\" height=\"641\"  data-origwidth=\"1140\" data-origheight=\"641\" src=\"https:\/\/www.youtube.com\/embed\/2qakoqbSeMU?enablejsapi=1&#038;autoplay=0&#038;cc_load_policy=0&#038;cc_lang_pref=&#038;iv_load_policy=1&#038;loop=0&#038;rel=1&#038;fs=1&#038;playsinline=0&#038;autohide=2&#038;theme=dark&#038;color=red&#038;controls=1&#038;disablekb=0&#038;\" class=\"__youtube_prefs__  epyt-is-override  no-lazyload\" title=\"YouTube player\"  allow=\"fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen data-no-lazy=\"1\" data-skipgform_ajax_framebjll=\"\"><\/iframe>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Handling translations in Business Central can be very time consuming, so to help you a little bit I will share&#8230; <a class=\"read-more\" href=\"https:\/\/fredborg.org\/?p=481\" rel=\"nofollow\"> Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":488,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-481","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","shapla-grid-item"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Xliff Translation Tool - Fredborg<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fredborg.org\/?p=481\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Xliff Translation Tool - Fredborg\" \/>\n<meta property=\"og:description\" content=\"Handling translations in Business Central can be very time consuming, so to help you a little bit I will share... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fredborg.org\/?p=481\" \/>\n<meta property=\"og:site_name\" content=\"Fredborg\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-09T12:23:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-01-09T12:23:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/XLIFF-Translations-tool.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1365\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"dfredborg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dfredborg\" \/>\n<meta name=\"twitter:site\" content=\"@dfredborg\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"dfredborg\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fredborg.org\/?p=481#article\",\"isPartOf\":{\"@id\":\"https:\/\/fredborg.org\/?p=481\"},\"author\":{\"name\":\"dfredborg\",\"@id\":\"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d\"},\"headline\":\"Xliff Translation Tool\",\"datePublished\":\"2021-01-09T12:23:46+00:00\",\"dateModified\":\"2021-01-09T12:23:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fredborg.org\/?p=481\"},\"wordCount\":510,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d\"},\"image\":{\"@id\":\"https:\/\/fredborg.org\/?p=481#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/XLIFF-Translations-tool.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fredborg.org\/?p=481#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fredborg.org\/?p=481\",\"url\":\"https:\/\/fredborg.org\/?p=481\",\"name\":\"Xliff Translation Tool - Fredborg\",\"isPartOf\":{\"@id\":\"https:\/\/fredborg.org\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fredborg.org\/?p=481#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fredborg.org\/?p=481#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/XLIFF-Translations-tool.png\",\"datePublished\":\"2021-01-09T12:23:46+00:00\",\"dateModified\":\"2021-01-09T12:23:48+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fredborg.org\/?p=481#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fredborg.org\/?p=481\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fredborg.org\/?p=481#primaryimage\",\"url\":\"https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/XLIFF-Translations-tool.png\",\"contentUrl\":\"https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/XLIFF-Translations-tool.png\",\"width\":1365,\"height\":768},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fredborg.org\/?p=481#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fredborg.org\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Xliff Translation Tool\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fredborg.org\/#website\",\"url\":\"https:\/\/fredborg.org\/\",\"name\":\"Fredborg\",\"description\":\"Business Central and Azure\",\"publisher\":{\"@id\":\"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fredborg.org\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d\",\"name\":\"dfredborg\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fredborg.org\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/06\/download.png\",\"contentUrl\":\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/06\/download.png\",\"width\":256,\"height\":256,\"caption\":\"dfredborg\"},\"logo\":{\"@id\":\"https:\/\/fredborg.org\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:fredborg.org\",\"https:\/\/www.linkedin.com\/in\/dfredborg\/\",\"https:\/\/x.com\/dfredborg\",\"https:\/\/www.youtube.com\/channel\/UCUNZglLDMjBlOK_T9JtI8UA\"],\"url\":\"https:\/\/fredborg.org\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Xliff Translation Tool - Fredborg","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fredborg.org\/?p=481","og_locale":"en_US","og_type":"article","og_title":"Xliff Translation Tool - Fredborg","og_description":"Handling translations in Business Central can be very time consuming, so to help you a little bit I will share... Read more","og_url":"https:\/\/fredborg.org\/?p=481","og_site_name":"Fredborg","article_published_time":"2021-01-09T12:23:46+00:00","article_modified_time":"2021-01-09T12:23:48+00:00","og_image":[{"width":1365,"height":768,"url":"https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/XLIFF-Translations-tool.png","type":"image\/png"}],"author":"dfredborg","twitter_card":"summary_large_image","twitter_creator":"@dfredborg","twitter_site":"@dfredborg","twitter_misc":{"Written by":"dfredborg","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fredborg.org\/?p=481#article","isPartOf":{"@id":"https:\/\/fredborg.org\/?p=481"},"author":{"name":"dfredborg","@id":"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d"},"headline":"Xliff Translation Tool","datePublished":"2021-01-09T12:23:46+00:00","dateModified":"2021-01-09T12:23:48+00:00","mainEntityOfPage":{"@id":"https:\/\/fredborg.org\/?p=481"},"wordCount":510,"commentCount":0,"publisher":{"@id":"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d"},"image":{"@id":"https:\/\/fredborg.org\/?p=481#primaryimage"},"thumbnailUrl":"https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/XLIFF-Translations-tool.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fredborg.org\/?p=481#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fredborg.org\/?p=481","url":"https:\/\/fredborg.org\/?p=481","name":"Xliff Translation Tool - Fredborg","isPartOf":{"@id":"https:\/\/fredborg.org\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fredborg.org\/?p=481#primaryimage"},"image":{"@id":"https:\/\/fredborg.org\/?p=481#primaryimage"},"thumbnailUrl":"https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/XLIFF-Translations-tool.png","datePublished":"2021-01-09T12:23:46+00:00","dateModified":"2021-01-09T12:23:48+00:00","breadcrumb":{"@id":"https:\/\/fredborg.org\/?p=481#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fredborg.org\/?p=481"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fredborg.org\/?p=481#primaryimage","url":"https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/XLIFF-Translations-tool.png","contentUrl":"https:\/\/fredborg.org\/wp-content\/uploads\/2021\/01\/XLIFF-Translations-tool.png","width":1365,"height":768},{"@type":"BreadcrumbList","@id":"https:\/\/fredborg.org\/?p=481#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fredborg.org\/"},{"@type":"ListItem","position":2,"name":"Xliff Translation Tool"}]},{"@type":"WebSite","@id":"https:\/\/fredborg.org\/#website","url":"https:\/\/fredborg.org\/","name":"Fredborg","description":"Business Central and Azure","publisher":{"@id":"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fredborg.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d","name":"dfredborg","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fredborg.org\/#\/schema\/person\/image\/","url":"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/06\/download.png","contentUrl":"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/06\/download.png","width":256,"height":256,"caption":"dfredborg"},"logo":{"@id":"https:\/\/fredborg.org\/#\/schema\/person\/image\/"},"sameAs":["https:fredborg.org","https:\/\/www.linkedin.com\/in\/dfredborg\/","https:\/\/x.com\/dfredborg","https:\/\/www.youtube.com\/channel\/UCUNZglLDMjBlOK_T9JtI8UA"],"url":"https:\/\/fredborg.org\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/posts\/481","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fredborg.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=481"}],"version-history":[{"count":4,"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/posts\/481\/revisions"}],"predecessor-version":[{"id":489,"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/posts\/481\/revisions\/489"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/media\/488"}],"wp:attachment":[{"href":"https:\/\/fredborg.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=481"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fredborg.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=481"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fredborg.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=481"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}