Aug 10 2017 07:37 AM - edited Aug 10 2017 11:21 PM
Introduction
As setting up Service Manager 2016 Self-Service Portal we wanted to add Estonian localization to the new HTML Self-Service Portal as we had done with the old one. Without too much hassle we figured out how language files are added and where the files are so the next steps were to translate the new localization file and make a minor adjustment to "Company" title to make it change with localization.
Steps to add a new localization
Step 1: Create the missing localization file to the following folder on you SSP IIS server
In our case we created the following file: SelfServicePortalResources.et.resx
C:\inetpub\wwwroot\SelfServicePortal\App_GlobalResources\
Step 2: Add the missing localization by adding a line to _Layout.cshtml file in the following folder
C:\inetpub\wwwroot\SelfServicePortal\Views\Shared\
You can choose your own position but I set Estonian as first on the list and either delete the ones that you don't need or comment them out with <!-- comment --> tags.
<ul class="lang_menu hidden" data-select-lang=@currentCulture> <li value="et-EE">Eesti</li> <li value="en-US">English</li>
<!-- <li value="fr-FR">français</li>
<li value="de-DE">Deutsch</li>
<li value ""> ..etc.. </li> -->
</ul>
That's pretty much it if you don't want to change the "Company" title when changing the localization.
Step 3(optional): When you also want to make localization changes to change the "Company" title you need to make a tiny change to _Layout.cshtml file in the following folder
C:\inetpub\wwwroot\SelfServicePortal\Views\Shared\
You need to change the following line from
<div class="col span_15 logo">@System.Web.Configuration.WebConfigurationManager.AppSettings["CompanyName"]</div>
to
<div class="col span_15 logo">@Resources.SelfServicePortalResources.PageTitle</div>
This change will make your "Company" title information come from the active localization file instead of console defined "Company" name.
<data name="PageTitle" xml:space="preserve"> <value>Localized "Company" title</value> </data>
Restrictions
I know that Service Manager 2012 that was built on SharePoint 2010 supported only a specific set of languages but I would think that the new portal supports more.
Resources (in attachments)
Attached a .zip archive with translation files for Service Manager 2016 and if anyone is still looking for this a Service Manager 2012 localization. If you don't want to download a ready file you can alternatively copy-paste the SM16 code from Spoilers! below.
<?xml version="1.0" encoding="utf-8"?> <root> <!-- Microsoft ResX Schema Version 2.0 The primary goals of this format is to allow a simple XML format that is mostly human readable. The generation and parsing of the various data types are done through the TypeConverter classes associated with the data types. Example: ... ado.net/XML headers & schema ... <resheader name="resmimetype">text/microsoft-resx</resheader> <resheader name="version">2.0</resheader> <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> <value>[base64 mime encoded serialized .NET Framework object]</value> </data> <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> <comment>This is a comment</comment> </data> There are any number of "resheader" rows that contain simple name/value pairs. Each data row contains a name, and value. The row also contains a type or mimetype. Type corresponds to a .NET class that support text/value conversion through the TypeConverter architecture. Classes that don't support this are serialized and stored with the mimetype set. The mimetype is used for serialized objects, and tells the ResXResourceReader how to depersist the object. This is currently not extensible. For a given mimetype the value must be set accordingly: Note - application/x-microsoft.net.object.binary.base64 is the format that the ResXResourceWriter will generate, however the reader can read any of the formats listed below. mimetype: application/x-microsoft.net.object.binary.base64 value : The object must be serialized with : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter : and then encoded with base64 encoding. mimetype: application/x-microsoft.net.object.soap.base64 value : The object must be serialized with : System.Runtime.Serialization.Formatters.Soap.SoapFormatter : and then encoded with base64 encoding. mimetype: application/x-microsoft.net.object.bytearray.base64 value : The object must be serialized into a byte array : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> <xsd:element name="root" msdata:IsDataSet="true"> <xsd:complexType> <xsd:choice maxOccurs="unbounded"> <xsd:element name="metadata"> <xsd:complexType> <xsd:sequence> <xsd:element name="value" type="xsd:string" minOccurs="0" /> </xsd:sequence> <xsd:attribute name="name" use="required" type="xsd:string" /> <xsd:attribute name="type" type="xsd:string" /> <xsd:attribute name="mimetype" type="xsd:string" /> <xsd:attribute ref="xml:space" /> </xsd:complexType> </xsd:element> <xsd:element name="assembly"> <xsd:complexType> <xsd:attribute name="alias" type="xsd:string" /> <xsd:attribute name="name" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="data"> <xsd:complexType> <xsd:sequence> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> <xsd:attribute ref="xml:space" /> </xsd:complexType> </xsd:element> <xsd:element name="resheader"> <xsd:complexType> <xsd:sequence> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> </xsd:choice> </xsd:complexType> </xsd:element> </xsd:schema> <resheader name="resmimetype"> <value>text/microsoft-resx</value> </resheader> <resheader name="version"> <value>2.0</value> </resheader> <resheader name="reader"> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </resheader> <resheader name="writer"> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </resheader> <data name="SoftwareCatalog1" xml:space="preserve"> <value>Tarkvara kataloog</value> </data> <data name="ActionLog" xml:space="preserve"> <value>Logi</value> </data> <data name="ActivateRequest" xml:space="preserve"> <value>Aktiivsed pöördumised</value> </data> <data name="Active" xml:space="preserve"> <value>Aktiivne</value> </data> <data name="Activities" xml:space="preserve"> <value>Tegevused</value> </data> <data name="ActivityImplementor" xml:space="preserve"> <value>Tegevuse teostaja</value> </data> <data name="AddComments" xml:space="preserve"> <value>Lisa kommentaar..</value> </data> <data name="All" xml:space="preserve"> <value>Kõik</value> </data> <data name="Announcements" xml:space="preserve"> <value>Aktiivsed teated</value> </data> <data name="ApprovalStatus" xml:space="preserve"> <value>Kinnitamise staatus</value> </data> <data name="Approve" xml:space="preserve"> <value>Kinnita</value> </data> <data name="AssociatedWI" xml:space="preserve"> <value>Seotud pöördumine</value> </data> <data name="AttachFile" xml:space="preserve"> <value>Lisa fail</value> </data> <data name="AttachFiles" xml:space="preserve"> <value>Lisa failid</value> </data> <data name="AvailableRequests" xml:space="preserve"> <value>Pöördumis vormid</value> </data> <data name="Cancel" xml:space="preserve"> <value>Tühista</value> </data> <data name="CancelRequest" xml:space="preserve"> <value>Tühista pöördumine</value> </data> <data name="Closed" xml:space="preserve"> <value>Suletud</value> </data> <data name="ContactUs" xml:space="preserve"> <value>Võta meiega ühendust</value> </data> <data name="CostInformation" xml:space="preserve"> <value>Maksumus</value> </data> <data name="CreatedDate" xml:space="preserve"> <value>Koostamise kuupäev</value> </data> <data name="Description" xml:space="preserve"> <value>Kirjeldus</value> </data> <data name="Details" xml:space="preserve"> <value>Detailid</value> </data> <data name="ExpiryDate" xml:space="preserve"> <value>Aegumise kuupäev</value> </data> <data name="ExternalContent" xml:space="preserve"> <value>Väline sisu</value> </data> <data name="FavHelpArticles" xml:space="preserve"> <value>Lemmik juhendid</value> </data> <data name="Favorites" xml:space="preserve"> <value>Lemmikud</value> </data> <data name="FavouriteThis" xml:space="preserve"> <value>Lisa lemmikuks</value> </data> <data name="FindByKeywords" xml:space="preserve"> <value>Otsi märksõna</value> </data> <data name="GenericRequest" xml:space="preserve"> <value>Ei leia lahendust kataloogist?</value> </data> <data name="HelpArticles" xml:space="preserve"> <value>Juhendid</value> </data> <data name="Home" xml:space="preserve"> <value>Esileht</value> </data> <data name="ID" xml:space="preserve"> <value>ID</value> </data> <data name="InProgress" xml:space="preserve"> <value>Edenenemisel</value> </data> <data name="Instructions" xml:space="preserve"> <value>Juhised</value> </data> <data name="InternalContent" xml:space="preserve"> <value>Kohalik sisu</value> </data> <data name="LastModified" xml:space="preserve"> <value>Viimati muudetud</value> </data> <data name="LastUpdated" xml:space="preserve"> <value>Viimati uuendatud</value> </data> <data name="Loading" xml:space="preserve"> <value>Ole kannatlik...</value> </data> <data name="ManualActivity" xml:space="preserve"> <value>Manuaalsed tegevused</value> </data> <data name="MarkCompleted" xml:space="preserve"> <value>Märgi lõpetatuks</value> </data> <data name="MarkFailed" xml:space="preserve"> <value>Märgi tühistatuks</value> </data> <data name="MostPopular" xml:space="preserve"> <value>Populaarsed</value> </data> <data name="MyActvities" xml:space="preserve"> <value>Minu tegevused</value> </data> <data name="MyRequests" xml:space="preserve"> <value>Minu pöördumised</value> </data> <data name="NavQuestion" xml:space="preserve"> <value>Ei leia lahendust ?</value> </data> <data name="PageTitle" xml:space="preserve"> <value>Iseteenindusportaal</value> </data> <data name="Priority" xml:space="preserve"> <value>Prioriteet</value> </data> <data name="Property" xml:space="preserve"> <value>Atribuut</value> </data> <data name="QueryPickerMeta" xml:space="preserve"> <value>See väli sõltub </value> </data> <data name="RateThis" xml:space="preserve"> <value>Anna hinnang</value> </data> <data name="Refresh" xml:space="preserve"> <value>Värskenda</value> </data> <data name="Reject" xml:space="preserve"> <value>Hülga</value> </data> <data name="RelatedHelpArticles" xml:space="preserve"> <value>Seonduvad juhendid</value> </data> <data name="RequestOfferings" xml:space="preserve"> <value>Teenuse pakkumised</value> </data> <data name="Resolved" xml:space="preserve"> <value>Lahendatud</value> </data> <data name="Review" xml:space="preserve"> <value>Ülevaatus</value> </data> <data name="ReviewActivity" xml:space="preserve"> <value>Vaata üle</value> </data> <data name="ReviewAs" xml:space="preserve"> <value>Ülevaataja</value> </data> <data name="Reviewers" xml:space="preserve"> <value>Ülevaatajad</value> </data> <data name="Search" xml:space="preserve"> <value>Otsi</value> </data> <data name="SearchPlaceHolder" xml:space="preserve"> <value>Otsi märksõna</value> </data> <data name="SearchResults" xml:space="preserve"> <value>Otsingutulemused</value> </data> <data name="SeeAll" xml:space="preserve"> <value>Vaata kõiki</value> </data> <data name="Share" xml:space="preserve"> <value>Jaga</value> </data> <data name="SLAInformation" xml:space="preserve"> <value>SLA informatsioon</value> </data> <data name="SubmitForm" xml:space="preserve"> <value>Sisesta</value> </data> <data name="Title" xml:space="preserve"> <value>Pealkiri</value> </data> <data name="Update" xml:space="preserve"> <value>Uuenda</value> </data> <data name="UserInput" xml:space="preserve"> <value>Kommentaari lisamine</value> </data> <data name="Value" xml:space="preserve"> <value>Väärtus</value> </data> <data name="VotedBy" xml:space="preserve"> <value>Hääletas</value> </data> <data name="ActivityArea" xml:space="preserve"> <value>Tegevused</value> </data> <data name="ScheduledEndDate" xml:space="preserve"> <value>Planeeritud lõppkuupäev</value> </data> <data name="ScheduledStartDate" xml:space="preserve"> <value>Planeeritud alguskuupäev</value> </data> <data name="SortBy" xml:space="preserve"> <value>Sorteeri</value> </data> <data name="Stage" xml:space="preserve"> <value>Etapp</value> </data> <data name="ItemDetails" xml:space="preserve"> <value>Üksuse detailid</value> </data> <data name="ChooseFile" xml:space="preserve"> <value>Vali fail</value> </data> <data name="CreateRequest" xml:space="preserve"> <value>Koosta pöördumine</value> </data> <data name="Owner" xml:space="preserve"> <value>Omanik</value> </data> <data name="NoSearchRecords" xml:space="preserve"> <value>Üksusi ei leitud, muuda otsingu parameetreid</value> </data> <data name="Enteries" xml:space="preserve"> <value>Sisestused</value> </data> <data name="Filtered" xml:space="preserve"> <value>Filtreeritud</value> </data> <data name="First" xml:space="preserve"> <value>Esimene</value> </data> <data name="Last" xml:space="preserve"> <value>Viimane</value> </data> <data name="Next" xml:space="preserve"> <value>Järgmine</value> </data> <data name="Previous" xml:space="preserve"> <value>Eelmine</value> </data> <data name="Show" xml:space="preserve"> <value>Kuva</value> </data> <data name="Showing" xml:space="preserve"> <value>Kuvan</value> </data> <data name="ActivityUpdateFail" xml:space="preserve"> <value>Tegevuse uuendamine ebaõnnestus</value> </data> <data name="ActivityUpdateSuccess" xml:space="preserve"> <value>Tegevuse uuendamine õnnestus</value> </data> <data name="CantFindSolution" xml:space="preserve"> <value>Ei leidnud probleemile lahendust?</value> </data> <data name="KARatingUpdateFailed" xml:space="preserve"> <value>Hinnangu uuendamine ebaõnnestus</value> </data> <data name="KARatingUpdateSuccess" xml:space="preserve"> <value>Hinnangu lisamine õnnestus</value> </data> <data name="Launguage" xml:space="preserve"> <value>Keelevalik</value> </data> <data name="NewRequestCreated" xml:space="preserve"> <value>Uus pöördumine esitatud</value> </data> <data name="PoweredBy" xml:space="preserve"> <value>Powered By</value> </data> <data name="RequestUpdateFail" xml:space="preserve"> <value>Pöördumise uuendamine ebaõnnestus </value> </data> <data name="RequestUpdateSuccess" xml:space="preserve"> <value>Pöörumise uuendamine õnnestus</value> </data> <data name="ServiceCatalog" xml:space="preserve"> <value>Pöördumiste kataloog</value> </data> <data name="Comment" xml:space="preserve"> <value>Kommentaar</value> </data> <data name="Name" xml:space="preserve"> <value>Nimi</value> </data> <data name="Status" xml:space="preserve"> <value>Staatus</value> </data> <data name="FavoritesDescription" xml:space="preserve"> <value>Kuvab lemmikuks märgitud pöördumiste nimekirja</value> </data> <data name="Article" xml:space="preserve"> <value>Juhendid</value> </data> <data name="ActivityStatusEnum_Active" xml:space="preserve"> <value>Edeneb</value> </data> <data name="ActivityStatusEnum_Cancelled" xml:space="preserve"> <value>Tühistatud</value> </data> <data name="ActivityStatusEnum_Completed" xml:space="preserve"> <value>Lõpetatud</value> </data> <data name="ActivityStatusEnum_Failed" xml:space="preserve"> <value>Ebaõnnestunud</value> </data> <data name="ActivityStatusEnum_OnHold" xml:space="preserve"> <value>Ootel</value> </data> <data name="ActivityStatusEnum_Ready" xml:space="preserve"> <value>Pooleli</value> </data> <data name="ActivityStatusEnum_Rerun" xml:space="preserve"> <value>Taaskäivita</value> </data> <data name="ActivityStatusEnum_Skipped" xml:space="preserve"> <value>Vahele jäetud</value> </data> <data name="Ago" xml:space="preserve"> <value>tagasi</value> </data> <data name="SeeLess" xml:space="preserve"> <value>Kuva vähem</value> </data> <data name="SeeMore" xml:space="preserve"> <value>Kuva rohkem</value> </data> <data name="Days" xml:space="preserve"> <value>päeva</value> </data> <data name="Hours" xml:space="preserve"> <value>tundi</value> </data> <data name="Minutes" xml:space="preserve"> <value>minutit</value> </data> <data name="AddedBy" xml:space="preserve"> <value>Lisas</value> </data> <data name="NothingToShowHere" xml:space="preserve"> <value>Pole midagi kuvada ...</value> </data> <data name="NoActivitiesFound" xml:space="preserve"> <value>Tegevusi ei leitud</value> </data> <data name="NoHelpArticlesFound" xml:space="preserve"> <value>Juhendeid ei leitud</value> </data> <data name="NoOfferingsFound" xml:space="preserve"> <value>Pakkumisi ei leitud</value> </data> <data name="NoRequestsFound" xml:space="preserve"> <value>Pöördumisi ei leitud</value> </data> <data name="Notes" xml:space="preserve"> <value>Märkused</value> </data> <data name="AddCommentToActivate" xml:space="preserve"> <value>Lisa pöördumise avamisele selgitus..</value> </data> <data name="AddCommentToCancel" xml:space="preserve"> <value>Lisa pöördumise tühistamisele selgitus..</value> </data> <data name="Comments" xml:space="preserve"> <value>Kommentaarid</value> </data> <data name="EmptyQueryTable" xml:space="preserve"> <value>Andmete laadimiseks vajuta "Värskenda" nupul</value> </data> <data name="AttachedBy" xml:space="preserve"> <value>Manustas</value> </data> <data name="AttachedDate" xml:space="preserve"> <value>Faili lisamise kuupäev</value> </data> <data name="FileName" xml:space="preserve"> <value>Faili nimi</value> </data> <data name="AttachedFiles" xml:space="preserve"> <value>Lisatud failid</value> </data> <data name="HasVeto" xml:space="preserve"> <value>Veto õigus</value> </data> <data name="MustVote" xml:space="preserve"> <value>Peab hääletama</value> </data> <data name="FileAttachedBy" xml:space="preserve"> <value>Faili lisaja</value> </data> </root>
Sources