Учет особенностей национальных языков при обработке данных может быть реализован как часть программы, которая в этом случае сможет предоставлять различные данные для разных локалей. Кроме того, в программе могут применяться различные алгоритмы обработки текстовых данных, соответствующие особенностям различных национальных языков и стандартов. Например, алгоритмы определения начала и конца слова, а также правила переноса слов различны в разных локалях. Программы, поддерживающие подобные функции, должны на этапе исполнения работать с таблицами или алгоритмами, выбираемыми на основании текущего значения локали. Для этого могут применяться следующие способы:
Это затрудняет добавление и изменение алгоритмов и таблиц. При добавлении нового алгоритма или таблицы необходима перекомпоновка всей программы.
Этот подход упрощает добавление и изменение алгоритмов и таблиц. Однако стандартного метода загрузки алгоритмов не существует. В AIX для этих целей может использоваться системный вызов load, однако программы, в которых присутствуют вызовы load не всегда можно переносить в другие системы.
Если обработку данных с учетом
национальных стандартов можно организовать с помощью таблиц, загружаемых в
соответствии со значением локали, то программа может быть реализована с
помощью стандартных функций ввода-вывода (fopen, fread,
open, read и т.д.). Таблицы должны
размещаться в каталоге, который определен в
/usr/lpp/Имя, где Имя - это имя приложения в
одной из подходящих локалей.
Алгоритмы, обеспечивающие поддержку национальных языков, хранятся в каталоге /usr/lpp/имя/%L. Здесь %L обозначает текущее значение локали для соответствующей категории.
Системный вызов load
 позволяет загружать алгоритмы из объектных модулей.
Файл methods.h определяет следующую структуру:
struct Methods {
        int     version;
        char    *(*hyphen)();
        char    *(*wordbegin)();
        char    *(*wordend)();
} ;
Имя главной программы в примере - textpr.
Главная программа определяет, какой модуль следует загрузить, и вызывает его методы. Обратите внимание, что файл заголовка textpr.h содержит путь к загружаемому модулю. Таким образом путь, который зависит от операционной системы, можно легко изменить.
#include    <stdio.h>
#include    <errno.h>
#include    "methods.h"
#include    "textpr.h"    /* содержит путь
                             к загружаемым объектам */
extern int errno;
main()
{
     char libpath[PATH_MAX];   /* содержит полный путь
                                               к загружаемому объекту */
      char *prefix_path=PREFIX_PATH;        /* из textpr.h */
      char *method=METHOD;                  /* из textpr.h */
      int (*func)();
      char *path;
      /* Methods */
      int   ver;
      char  *p;
      struct Methods *md;
      
  
      setlocale(LC_ALL, "");
      path = setlocale(LC_CTYPE, 0);    /* Получить значение локали 
                                         для категории LC_CTYPE */
      /* Создать строку полного пути */
      /* к загружаемому объекту      */
      strcpy(libpath, prefix_path);
      strcat(libpath, path);
      strcat(libpath, "/");
      strcat(libpath, method);
   
      func = load(conv, 1, libpath);        /* Загрузить объект */
      if(func==NULL){
            strerror(errno);
            exit(1);
      }
      /* вызвать методы загруженного объекта */
      md =(struct Methods *) func();       /* Получить указатель
                                              на структуру методов */
      ver = md->version;
      /* Вызывать требуемые методы */
      p = (md->hyphen)();
      p = (md->wordbegin)();
      p = (md->wordend)();
}
Этот модуль содержит алгоритмы поддержки национальных языков. В данном примере модуль описывает методы поддержки арабского языка. Ниже приведен текст программы method.c:
#include "methods.h"
char *Arabic_hyphen(char *); char *Arabic_wordbegin(char *); char *Arabic_wordend(char *);
static struct Methods ArabicMethods= {
        1,
        Arabic_hyphen,
        Arabic_wordbegin,
        Arabic_wordend
} ;
struct Methods *start_methods()
{
        /* инициализация методов */
        return ( &ArabicMethods);
}
char *Arabic_hyphen(char *string)
{
        /* перенос для арабского языка */
        return( string);
}
char *Arabic_wordbegin(char *string)
{
        /* Определение начала слова для арабского языка */
        return( string);
}
char *Arabic_wordend(char *string)
{
        /* определение конца слова для арабского языка */
        return( string);
}
Этот файл заголовка определяет путь к загружаемому модулю.
#define PREFIX_PATH "/usr/lpp/textpr"   
                    /* Указан путь для системы AIX */
Глава 16, Поддержка национальных языков.