Out of the box, Sage CRM provides users with an interface that is fully translated into English, French, Spanish, and German. It is possible to add any number of additional languages to Sage CRM. And if you are creating an extension to Sage CRM then you may want to consider translation into other languages to ensure that the widest possible customer base can use your new add.
This is a trick shared by Ken Schmitt from S5 Solutions. It allows for the very quick population of custom captions for a new project.
This is an example of 'Machine Translation' or transformation. Machine Translation is not with out its problems as every language has idioms and phrases that just do not translate word-for-word into another language. You may want to read the article "Localisation — More Than Just Translation".
Ken was working with a specific Caption Family and uses an SQL call to make the change.
You can see the untranslated caption here:
Note: This will need to be run to allow the http call within MS SQL.
EXEC master.dbo.sp_configure 'show advanced options', 1 GO RECONFIGURE WITH OVERRIDE; EXEC sp_configure 'Ole Automation Procedures', 1 RECONFIGURE WITH OVERRIDE GO
The SQL.
UPDATE [CRM].[dbo].[Custom_Captions]
SET capt_uk = Rtrim(capt_us),
capt_fr = [dbo].[Fns5translate]([Capt_US],'FR'),
capt_de = [dbo].[Fns5translate]([Capt_US],'DE'),
capt_es = [dbo].[Fns5translate]([Capt_US],'ES'),
capt_du = [dbo].[Fns5translate]([Capt_US],'NL'),
capt_cs = [dbo].[Fns5translate]([Capt_US],'CS')
--,Capt_JP = [dbo].[fnS5translate]([Capt_US],'JA') – didn’t work in my version of SQL??
WHERE capt_deleted IS NULL
AND capt_family = '???' – enter capt family that you want TO limitUPDATE for.FUNCTION:USE [CRM]goSET ansi_nulls ONgoSET quoted_identifier ONgoCREATE FUNCTION [dbo].[Fns5translate] ( @text VARCHAR(150),
@code VARCHAR(2) )
returns VARCHAR(1024) AS
BEGIN
IF (Isnull(@text,'') = '')
BEGIN
RETURN NULL
END
DECLARE @Key VARCHAR(40)
SET @Key = 'Google API KEY'
DECLARE @translation VARCHAR(1024)
DECLARE @Response VARCHAR(8000)
DECLARE @Obj INT
DECLARE @Result INT
DECLARE @HTTPStatus INT
DECLARE @URL VARCHAR(max)
SET @translation = '---'
SET @URL = 'https://translation.googleapis.com/language/translate/v2?key='+@Key+'&source=EN&target='+@code+'&q='+dbo.Urlencode(@text)
EXEC @Result
= Sp_oacreate 'MSXML2.ServerXMLHttp',
@Obj out
IF @Result = 0
BEGIN
DECLARE @Method VARCHAR(350)
EXEC @Result
= Sp_oamethod @Obj,
'setTimeouts(45000, 45000, 45000, 45000)'
IF @Result = 0
BEGIN
EXEC @Result
= Sp_oamethod @Obj,
'open',
NULL,
'GET',
@URL,
false
IF @Result = 0
BEGIN
EXEC @Result
= Sp_oamethod @Obj,
'setRequestHeader',
NULL,
'Content-Type',
'application/x-www-form-urlencoded'
EXEC @Result
= Sp_oamethod @Obj,
send,
NULL,
''
IF @Result = 0
BEGIN
EXEC @Result
= Sp_oagetproperty @Obj,
'status',
@HTTPStatus out
EXEC @Result
= Sp_oagetproperty @Obj,
'responseText',
@Response out
END
IF (@HTTPStatus = 200)
BEGIN
SET @translation = Json_value(@Response,'$.data.translations[0].translatedText')
END
END
END
END
EXEC @Result
= Sp_oadestroy @Obj
RETURN Rtrim(@translation)
END
This resulted in the following translations
![]()
Additional considerations
You may run into issues with characters containing diacritics and accents (Umlauts, circumflex etc) and you will need to consider encoding.
Thanks to Ken Schmitt for sharing this.
If you are interested in exploring Sage CRM's language capability there is small library of language packs available. These provide partial translation of the users screens into:
- Dutch
- Portuguese
- Italian
- Turkish
- Simplified Chinese

