/usr/lib/ocaml/gettext/gettextDomain.ml is in libgettext-ocaml-dev 0.3.5-2build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | (**************************************************************************)
(* ocaml-gettext: a library to translate messages *)
(* *)
(* Copyright (C) 2003-2008 Sylvain Le Gall <sylvain@le-gall.net> *)
(* *)
(* This library is free software; you can redistribute it and/or *)
(* modify it under the terms of the GNU Lesser General Public *)
(* License as published by the Free Software Foundation; either *)
(* version 2.1 of the License, or (at your option) any later version; *)
(* with the OCaml static compilation exception. *)
(* *)
(* This library is distributed in the hope that it will be useful, *)
(* but WITHOUT ANY WARRANTY; without even the implied warranty of *)
(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *)
(* Lesser General Public License for more details. *)
(* *)
(* You should have received a copy of the GNU Lesser General Public *)
(* License along with this library; if not, write to the Free Software *)
(* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *)
(* USA *)
(**************************************************************************)
(** Signature of module for domain management.
@author Sylvain Le Gall
*)
open FilePath;;
open FileUtil;;
open GettextTypes;;
open GettextUtils;;
open GettextCategory;;
(* BUG : a mettre à jour *)
(** compute_path textdomain category t : return the path to the
mo file corresponding to textdomain and category. Language is
guessed from category binding. If the textdomain is not found,
it tries to use the build default to find the file. The file
returned exists and is readable. If such a file doesn't exists
an exception DomainFileDoesntExist is thrown. If the function is
unable to guess the current language an exception
DomainLanguageNotSet is thrown.
*)
let make_filename dir language category textdomain =
(* http://www.gnu.org/software/gettext/manual/html_mono/gettext.html#SEC148
dir_name/locale/LC_category/domain_name.mo *)
make_filename [
(* BUG : should use add_extension *)
dir; language; string_of_category category; textdomain ^ ".mo"
]
;;
let find t languages category textdomain =
let search_path =
(
try
match MapTextdomain.find textdomain t.textdomains with
(_,Some dir) -> [dir]
| (_,None) -> []
with Not_found ->
[]
) @ t.path
in
let ctest = test (And(Exists,Is_readable))
in
let rec find_mo_file_aux dir languages =
match languages with
language :: tl ->
let current_filename = make_filename dir language category textdomain
in
if ctest current_filename then
current_filename
else
find_mo_file_aux dir tl
| [] ->
raise Not_found
in
let rec find_mo_file path languages =
match path with
dir :: tl ->
(
try
find_mo_file_aux dir languages
with Not_found ->
find_mo_file tl languages
)
| [] ->
raise Not_found
in
try
find_mo_file search_path languages
with Not_found ->
raise (DomainFileDoesntExist(
List.flatten (
List.map (
fun dir ->
List.map (
fun language ->
make_filename dir language category textdomain
) languages
) search_path
)
)
)
;;
|