Skip to content

Latest commit

 

History

History
207 lines (180 loc) · 6.91 KB

storing_and_retrieving_the_plugin_settings.md

File metadata and controls

207 lines (180 loc) · 6.91 KB

Storing and Retrieving the Plug-in Settings

The settings that are configured through the plug-in user interface (see Implementing the Plug-in User Interface) need to be programmatically set and retrieved. This chapter describes how to implement a separate class for storing the plug-in settings. These settings are physically stored in an *.sdlproj or in an *.sdltlp file.

Implement the Class for Handling the Plug-in Settings

Add a helper class called ListTranslationOptions to the project. This class is not included in the plug-in template.

Define the Translation Method

First, we define the TranslationMethod that best applies to our translation provider source. The translation method could, for example, be translation memory, machine translation, pseudo-translation, etc. A delimited list is basically like a rudimentary TM. Therefore you could, for example, select TranslationMemory. However, to set our plug-in apart from a 'normal' TM we select the option Other:

public static readonly TranslationMethod ProviderTranslationMethod = TranslationMethod.Other;

Create the Plug-in URI Builder

Each plug-in uses a URI to store and retrieve settings. Through the following code we create the URI builder object, which is used to store and persist the plug-in settings:

TranslationProviderUriBuilder _uriBuilder;        

public ListTranslationOptions()
{
    _uriBuilder = new TranslationProviderUriBuilder(ListTranslationProvider.ListTranslationProviderScheme);
}

public ListTranslationOptions(Uri uri)
{
    _uriBuilder = new TranslationProviderUriBuilder(uri);
}

At the end we return the URI as shown below:

public Uri Uri
{            
    get
    {
        return _uriBuilder.Uri;                
    }
}

Set and Retrieve the Plug-in Parameters

Our plug-in implements two string settings, i.e. the list file name and path and the delimiter character. In the following we declare the two public string properties which are set by the plug-in user form. The properties call on two separate private functions to get and to set the corresponding values:

public string ListFileName
{
    get { return GetStringParameter("listfile"); }
    set { SetStringParameter("listfile", value); }            
}

public string Delimiter
{
    get { return GetStringParameter("delimiter");}
    set {SetStringParameter("delimiter", value);}
}

The following function sets the string parameter. It takes the property name and the corresponding value as string parameters:

private void SetStringParameter(string p, string value)
{
    _uriBuilder[p] = value;
}

The following function is used to retrieve the value for a specified URI property:

private string GetStringParameter(string p)
{
    string paramString = _uriBuilder[p];
    return paramString;
}

The following is an example of what a URI string will look like in our implementation:

listprovider:///?delimiter=;&listfile=C:\temp\sample_list.txt" Enabled="true"

The translation provider plug-in settings are physically stored in the project file (.sdlproj) or in the project template (.sdltpl) file. These are XML-compliant files that store project- or project-template specific information. The file excerpt below provides an example of how a translation provider is listed in a project or template file alongside with its respective settings:

<CascadeItem OverrideParent="true" StopSearchingWhenResultsFound="false">
  <CascadeEntryItem PerformConcordanceSearch="true" Penalty="0" PerformUpdate="false" PerformNormalSearch="true">
    <MainTranslationProviderItem Uri="listprovider:///?delimiter=;&listfile=C:\temp\sample_list.txt" Enabled="true" />
  </CascadeEntryItem>
</CascadeItem>

Note

For every project that is created in Var:ProductName as well as for each single file that is opened for translation, an *.sdlproj file will be created, which contains the translation providers used for the given project or document, the document(s) to translate, the termbase(s) used, etc.

Putting it all Together

The complete class should look as shown below:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sdl.LanguagePlatform.TranslationMemoryApi;
using System.Windows.Forms;

namespace Sdk.LanguagePlatform.Samples.ListProvider
{
    /// <summary>
    /// This class is used to hold the provider plug-in settings. 
    /// All settings are automatically stored in a URI.
    /// </summary>
    public class ListTranslationOptions
    {
        #region "TranslationMethod"
        public static readonly TranslationMethod ProviderTranslationMethod = TranslationMethod.Other;
        #endregion

        #region "TranslationProviderUriBuilder"
        TranslationProviderUriBuilder _uriBuilder;        

        public ListTranslationOptions()
        {
            _uriBuilder = new TranslationProviderUriBuilder(ListTranslationProvider.ListTranslationProviderScheme);
        }

        public ListTranslationOptions(Uri uri)
        {
            _uriBuilder = new TranslationProviderUriBuilder(uri);
        }
        #endregion

        /// <summary>
        /// Set and retrieve the name and path of the delimited list file.
        /// </summary>
        #region "ListFileName"
        public string ListFileName
        {
            get { return GetStringParameter("listfile"); }
            set { SetStringParameter("listfile", value); }            
        }
        #endregion

        /// <summary>
        /// Set and retrieve the delimiter character.
        /// </summary>
        #region "Delimiter"
        public string Delimiter
        {
            get { return GetStringParameter("delimiter");}
            set {SetStringParameter("delimiter", value);}
        }
        #endregion

        #region "SetStringParameter"
        private void SetStringParameter(string p, string value)
        {
            _uriBuilder[p] = value;
        }
        #endregion

        #region "GetStringParameter"
        private string GetStringParameter(string p)
        {
            string paramString = _uriBuilder[p];
            return paramString;
        }
        #endregion


        #region "Uri"
        public Uri Uri
        {            
            get
            {
                return _uriBuilder.Uri;                
            }
        }
        #endregion
    }
}

See Also

Implementing the Plug-in User Interface

Controlling the Plug-in User Interface