Revision 541

tmp/org.txm.referencer.rcp/src/org/txm/referencer/rcp/commands/ComputeReferencer.java (revision 541)
38 38
import org.txm.rcp.RCPMessages;
39 39
import org.txm.rcp.StatusLine;
40 40
import org.txm.rcp.TXMWindows;
41
import org.txm.rcp.editors.TXMEditorPart;
41 42
import org.txm.rcp.editors.TXMResultEditorInput;
42 43
import org.txm.rcp.editors.referencer.ReferencerEditor;
43 44
import org.txm.rcp.handlers.BaseAbstractHandler;
......
64 65
	public Object execute(ExecutionEvent event) throws ExecutionException {
65 66
		if (!this.checkCorpusEngine()) return false;
66 67
		
67
		IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event);
68

  
69
		Object s = selection.getFirstElement();
68
		Object s = getSelection(event);
69
		
70 70
		openEditor(s);
71
		
71 72
		return null;
72 73
	}
73 74

  
......
84 85
			return false;
85 86
		}
86 87
		
87
		TXMResultEditorInput editorInput = new TXMResultEditorInput(referencer);
88

  
89
		IWorkbenchWindow window = TXMWindows.getActiveWindow();
90
		IWorkbenchPage page = window.getActivePage();
91
		try {
92
			StatusLine.setMessage(RCPMessages.ComputeReferencer_0);
93
			page.openEditor(editorInput, ReferencerEditor.ID); //$NON-NLS-1$
94
			return true;
95
		} catch (PartInitException e) {
96
			System.err.println(RCPMessages.CorporaView_6+ e);
97
		}
88
		TXMEditorPart.openEditor(new TXMResultEditorInput(referencer), ReferencerEditor.ID); //$NON-NLS-1$
98 89
		return false;
99 90
	}
100 91
}
tmp/org.txm.rcp/src/main/java/org/txm/rcp/messages_fr.properties (revision 541)
103 103
ApplicationWorkbenchAdvisor_57                           = Chargement du corpus 0.5 converti 
104 104
ApplicationWorkbenchAdvisor_58                           = Chargement du corpus 0.6 
105 105
ApplicationWorkbenchAdvisor_59                           = ** Erreur lors du chargement de 
106
ApplicationWorkbenchAdvisor_6                            = Exception : 
107 106
ApplicationWorkbenchAdvisor_60                           = ** Erreur : le répertoire 
108 107
ApplicationWorkbenchAdvisor_61                           = \ n'est pas un corpus binaire.
109 108
ApplicationWorkbenchAdvisor_66                           = Récupération des préférences de TXM de l'installation précédente depuis le fichier   
......
378 377
Diagnostique_8  = Récupération des informations générales
379 378
Diagnostique_9  = Récupération des données sur les unités lexicales
380 379

  
381
ERROR_WHILE_LOADING_CONCORDANCE_LINE = ** Une erreur est survenue lors du chargement des lignes de la concordance : {0}
382

  
383 380
ElementTreeLabelProvider_0 = ** Erreur : élément non enregistré 
384 381
ElementTreeLabelProvider_1 = ** Erreur: l'objet n'est pas un 'org.w3c.Element'
385 382

  
......
460 457
ExportResult_0  = Exportation des résultats
461 458
ExportResult_1  = Exportation...
462 459
ExportResult_2  = Graphique enregistré au format {1} dans le fichier {0}
463
ExportResult_22 = Résultat enregistré dans le fichier {0}
464 460
ExportResult_3  = ** Export : impossible de créer le fichier {0} : {1}
465 461
ExportResult_4  = ** Échec de l''export dans le fichier {0} de format {1}
466 462
ExportResult_5  = ** Impossible de lire {0}
......
805 801
QueryAssistDialog_34 = séparé d'au moins 1 mot
806 802
QueryAssistDialog_8  = un mot dont
807 803

  
808
QueryIndexEditor_0  = Index de requête de : 
809
QueryIndexEditor_1  = remplacement des lignes : 
810
QueryIndexEditor_10 = requêtes
811
QueryIndexEditor_2  = Erreur lors de l'ajout de la requête : 
812
QueryIndexEditor_3  = Requête ajoutée
813
QueryIndexEditor_4  = Chargement depuis un fichier
814
QueryIndexEditor_5  = *.properties
815
QueryIndexEditor_6  = Le fichier suivant ne peut être lu : 
816
QueryIndexEditor_7  = Vers les concordances
817
QueryIndexEditor_8  = Vers la progression
818
QueryIndexEditor_9  = Supprimer les lignes
819

  
820 804
RVariablesView_1 = Rafraîchir les variables
821 805
RVariablesView_2 = Afficher le journal des évaluations
822 806
RVariablesView_9 = nom TXM {0} >> nom R {1}
......
965 949
ViewPropertySelectionDialog_0 = Options d'affichage
966 950

  
967 951
ViewPropertySelection_0       = Options d'affichage
968

  
969
WordCloudPreferencePage_0 = Nombre maximum de mots
970
WordCloudPreferencePage_1 = Fréquence minimale
971
WordCloudPreferencePage_2 = Pourcentage de mots inclinés
972
WordCloudPreferencePage_3 = Couleurs aléatoires
tmp/org.txm.rcp/src/main/java/org/txm/rcp/RCPMessages.java (revision 541)
1 1

  
2 2
package org.txm.rcp;
3 3

  
4
import org.txm.utils.messages.TXMNLS;
4
import org.txm.utils.messages.Utf8NLS;
5 5

  
6
public class RCPMessages extends TXMNLS {
6
public class RCPMessages extends Utf8NLS {
7 7
	
8 8
	// The Constant BUNDLE_NAME. 
9 9
	private static final String BUNDLE_NAME = "org.txm.rcp.messages"; //$NON-NLS-1$
......
962 962
	public static String IndexToCooccurrence_0;
963 963
	public static String IndexToLexicalTable_0;
964 964

  
965
	public static String WordCloudPreferencePage_0;
966
	public static String WordCloudPreferencePage_1;
967
	public static String WordCloudPreferencePage_2;
968
	public static String WordCloudPreferencePage_3;
969

  
970 965
	public static String CleanPerspective_1;
971 966
	public static String CleanPerspective_2;
972 967
	public static String ExecuteLastGroovyScript_0;
......
979 974
	
980 975
	static {
981 976
		// initialize resource bundle
982
		TXMNLS.initializeMessages(BUNDLE_NAME, RCPMessages.class);
977
		Utf8NLS.initializeMessages(BUNDLE_NAME, RCPMessages.class);
983 978
		//NLS.initializeMessages(BUNDLE_NAME, Messages.class);
984 979
	}
985 980

  
tmp/org.txm.rcp/src/main/java/org/txm/rcp/messages.properties (revision 541)
813 813

  
814 814
Preferences_Menu_Label = Preferences
815 815

  
816
ProgressionDialog_0  = Progression Parameters
817
ProgressionDialog_1  = Graph type:
818
ProgressionDialog_10 = Progression dialog: wrong regular expression:
819
ProgressionDialog_11 = Bandewidth multiplier:
820
ProgressionDialog_13 = Display options
821
ProgressionDialog_14 = Single line style
822
ProgressionDialog_15 = Repeat same values
823
ProgressionDialog_16 = Monochrome
824
ProgressionDialog_17 = Strip multiplier error:
825
ProgressionDialog_2  = cumulative
826
ProgressionDialog_3  = density
827
ProgressionDialog_4  = Structural Unit:
828
ProgressionDialog_5  = delete
829
ProgressionDialog_7  = Regex:
830
ProgressionDialog_8  = Queries:
831
ProgressionDialog_9  = add
832

  
833
ProgressionEditorInput_0 = PROGRESSION NAME
834

  
835
ProgressionForm_0  = Type:
836
ProgressionForm_1  = cumulatif
837
ProgressionForm_10 = Repeated
838
ProgressionForm_11 = B&&W
839
ProgressionForm_12 = QUERIES:
840
ProgressionForm_13 = Add
841
ProgressionForm_14 = Delete
842
ProgressionForm_2  = density
843
ProgressionForm_3  = Scale
844
ProgressionForm_5  = Display options
845
ProgressionForm_6  = Structural unit:
846
ProgressionForm_7  = Property:
847
ProgressionForm_8  = Reg. Exp.:
848
ProgressionForm_9  = Differents line styles
849

  
850 816
PropertiesSelector_0 = Can''t load properties from corpus {0}: {1}
851 817
PropertiesSelector_1 = Properties:
852 818
PropertiesSelector_2 = Edit
......
884 850
QueryAssistDialog_34 = separated by at least 1 word
885 851
QueryAssistDialog_8  = a word with its property
886 852

  
887
QueryIndexEditor_0  = Query Index of
888
QueryIndexEditor_1  = replacing line:
889
QueryIndexEditor_10 = queries
890
QueryIndexEditor_2  = Failed to add line with query:
891
QueryIndexEditor_3  = Line added.
892
QueryIndexEditor_4  = Load from a file
893
QueryIndexEditor_5  = *.properties
894
QueryIndexEditor_6  = Cannot read from file:
895
QueryIndexEditor_7  = Link to concordance
896
QueryIndexEditor_8  = Link to progression
897
QueryIndexEditor_9  = delete lines
898

  
899 853
RConsole_0 = Connecting RConsole to RWorkspace stdout and stderr.
900 854
RConsole_1 = Error while initializing RConsole: 
901 855

  
......
903 857
RVariablesView_2 = Show eval logs
904 858
RVariablesView_9 = "TXM name {0} >> R name {1}
905 859

  
906
ReferencerEditor_0  = Compute references of <{0}> in {1} with property {2} and pattern {3}
907
ReferencerEditor_10 = Get indexes
908
ReferencerEditor_11 = References
909
ReferencerEditor_12 = Group positions by indexes
910
ReferencerEditor_13 = Refresh ui
911
ReferencerEditor_17 = Showing first result page
912
ReferencerEditor_19 = Showing last result page
913
ReferencerEditor_21 = Showing next result page
914
ReferencerEditor_23 = Showing previous result page
915
ReferencerEditor_25 = Opening concordances
916
ReferencerEditor_5  = Computing references of {0}
917
ReferencerEditor_6  = Reference pattern
918
ReferencerEditor_7  = No results
919
ReferencerEditor_8  = Get matches
920
ReferencerEditor_9  = Units
921 860

  
922
ReferencerPreferencePage_2 = Referencer
923
ReferencerPreferencePage_3 = Order references by frequency
924

  
925 861
RefreshingCorporaView = Refreshing corpora...
926 862

  
927 863
RenameFile_0 = Rename file
......
1057 993
ViewPropertySelectionDialog_0 = Display options
1058 994

  
1059 995
ViewPropertySelection_0       = Display options
1060

  
1061
WordCloudPreferencePage_0 = Maximum number of words
1062
WordCloudPreferencePage_1 = Minimal frequency
1063
WordCloudPreferencePage_2 = Percents of rotated words
1064
WordCloudPreferencePage_3 = Random color order
tmp/org.txm.rcp/src/main/java/org/txm/rcp/messages_ru.properties (revision 541)
90 90
ApplicationWorkbenchAdvisor_57          = Загрузка преобразованного корпуса 0.5 
91 91
ApplicationWorkbenchAdvisor_58          = Загрузка корпуса 0.6 
92 92
ApplicationWorkbenchAdvisor_59          = ** Ошибка во время загрузки 
93
ApplicationWorkbenchAdvisor_6           = Исключение: 
94 93
ApplicationWorkbenchAdvisor_60          = ** Ошибка: корпус 
95 94
ApplicationWorkbenchAdvisor_61          = \ не является бинарным корпусом TXM 0.6
96 95
ApplicationWorkbenchAdvisor_7           = Создание рабочего пространства пользователя TXM.
......
447 446
Diagnostique_8  = Получение общей информации
448 447
Diagnostique_9  = Получение данных о словарных единицах
449 448

  
450
ERROR_WHILE_LOADING_CONCORDANCE_LINE = ** Ошибка во время загрузки строк конкорданса: {0}
451

  
452 449
ElementTreeLabelProvider_0 = ** Ошибка: элемент не записан 
453 450
ElementTreeLabelProvider_1 = ** Ошибка: объект не является 'org.w3c.Element'
454 451

  
tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditorPart.java (revision 541)
297 297
		compute(result, false, null);
298 298
	}
299 299
	
300
	
301

  
302

  
303 300
	/**
304 301
	 * 
305 302
	 * @param result
......
447 444
//			org.txm.rcp.utils.Logger.printStackTrace(e1);
448 445
//		}
449 446
//	}
450
	
451 447

  
452 448
	/**
453 449
	 * Synchronizes the editor with the result and refreshes the corpus view.
tmp/org.txm.rcp/src/main/java/org/txm/rcp/ApplicationWorkbenchAdvisor.java (revision 541)
336 336
		System.out.println(NLS.bind(RCPMessages.ApplicationWorkbenchAdvisor_init, version));
337 337

  
338 338
	}
339
//
340
//	/**
341
//	 * Fix the Update p2 profile. No more needed since Eclipse 4.4
342
//	 */
343
//	private void fixUpdateProfile() {
344
//		try {
345
//			if (testTXMHOMEPreferenceAndDirectory()) {
346
//				Log.warning(Messages.ApplicationWorkbenchAdvisor_63);
347
//				/*
348
//				IPreferenceStore pref = AutomaticUpdatePlugin.getDefault().getPreferenceStore();
349
//				//System.out.println("before set update: "+pref.getBoolean(PreferenceConstants.PREF_AUTO_UPDATE_ENABLED));
350
//				pref.setValue(PreferenceConstants.PREF_AUTO_UPDATE_ENABLED, false);
351
//
352
//				//				System.out.println("context "+AutomaticUpdatePlugin.getDefault().getContext());
353
//				//				System.out.println("Location "+AutomaticUpdatePlugin.getDefault().getStateLocation());
354
//				//				System.out.println("set update: "+pref.getBoolean(PreferenceConstants.PREF_AUTO_UPDATE_ENABLED));
355
//
356
//				//				ScopedPreferenceStore preferences = new ScopedPreferenceStore(org.eclipse.core.runtime.preferences.InstanceScope.INSTANCE,
357
//				//						Application.PLUGIN_ID);
358
//				//				preferences.setValue("org.eclipse.equinox.p2.ui.sdk.scheduler/enabled", true);
359
//				//				preferences.save();
360
//
361
//				IPreferencesService service = Platform.getPreferencesService();
362
//				service.getRootNode().node("configuration").node("org.eclipse.equinox.p2.ui.sdk.scheduler").put("enabled", "false");
363
//				service.getRootNode().node("default").node("org.eclipse.equinox.p2.ui.sdk.scheduler").put("enabled", "false");
364
//
365
//				AutomaticUpdatePlugin.getDefault().savePreferences();
366
//				//TODO: is rescheduleUpdate() attempting to update TXM ?
367
//				AutomaticUpdatePlugin.getDefault().getScheduler().rescheduleUpdate();
368
//				 */
369
//				IProvisioningAgent agent = (IProvisioningAgent) ServiceHelper.getService(Activator.getDefault().getBundle().getBundleContext(),IProvisioningAgent.SERVICE_NAME);
370
//				if (agent == null) {
371
//					System.out.println(Messages.ApplicationWorkbenchAdvisor_64);
372
//				} else {
373
//					FixUpdateHandler.run(agent);
374
//				}
375
//
376
//			}
377
//		} catch(Exception e) {
378
//			System.out.println(Messages.ApplicationWorkbenchAdvisor_65+e);
379
//			Log.printStackTrace(e);
380
//		}
381
//	}
382 339

  
383 340
	private void setPreferencesConfiguration() {
384 341
		PreferenceManager pm = PlatformUI.getWorkbench().getPreferenceManager();
tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/messages/WordCloudUIMessages.java (revision 541)
19 19
	public static String PreferencePage_Percent_of_rotated_words;
20 20
	public static String PreferencePage_Random_word_positions;
21 21

  
22

  
23 22
	//FIXME: unused keys
24 23
	public static String EditorName;
25 24
	public static String Log_Wrong_input_object;
tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/___messages.properties (revision 541)
1
WordCloudTitle=WordCloud
2
ComputeVocabulary_0=Opening WordCloud results
3
ComputeWordCloud_0=StatEngine is not ready. Canceling command.
4
ComputeWordCloud_11=The necessary R packages have not been installed properly, it is not possible to complete the installation of the WordCloud command.\nSee instructions at https://groupes.renater.fr/wiki/txm-users/public/extensions#wordcloud 
5
ComputeWordCloud_12=Aborting WordCloud.
6
ComputeWordCloud_2=R packages loaded. Now running WordCloud
7
ComputeWordCloud_3=The {0} R package was not installed. Reason: {1}
8
ComputeWordCloud_4=Installing {0} R package...
9
ComputeWordCloud_5=Loading package: 
10
ComputeWordCloud_6=Could not install the {0} package
11
ComputeWordCloud_7=Operation canceled by user
12
WordCloudEditor_0=Vmax: 
13
WordCloudEditor_1=Fmin: 
14
WordCloudEditor_2=% of rotated labels: 
15
WordCloudEditor_3=Randomize positions
16
WordCloudEditor_4=Draw
17
WordCloudEditor_5=Wrong WordCloud input object
18
WordCloudEditor_6=WordCloud ready: 
19
WordCloudEditor_7=WordClouding...
20
WordCloudEditor_8=Drawing in {0}
21
WordCloudEditor_9=WordCloud refreshed
22
WordCloudPreferencePage_0=Number of used words
23
WordCloudPreferencePage_1=Minimal frequency for used words
24
WordCloudPreferencePage_2=Percent of rotated words
25
WordCloudPreferencePage_3=Random word positions
tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/___Messages.java (revision 541)
1
package ___wordcloudrcp;
2

  
3
import org.eclipse.osgi.util.NLS;
4

  
5
public class ___Messages extends NLS {
6
	private static final String BUNDLE_NAME = "wordcloudrcp.messages"; //$NON-NLS-1$
7
	public static String WordCloudTitle;
8
	public static String ComputeIndex_0;
9
	public static String ComputeWordCloud_0;
10
	public static String ComputeWordCloud_11;
11
	public static String ComputeWordCloud_12;
12
	public static String ComputeWordCloud_2;
13
	public static String ComputeWordCloud_3;
14
	public static String ComputeWordCloud_4;
15
	public static String ComputeWordCloud_5;
16
	public static String ComputeWordCloud_6;
17
	public static String ComputeWordCloud_7;
18
	public static String WordCloudEditor_0;
19
	public static String WordCloudEditor_1;
20
	public static String WordCloudEditor_2;
21
	public static String WordCloudEditor_3;
22
	public static String WordCloudEditor_4;
23
	public static String WordCloudEditor_5;
24
	public static String WordCloudEditor_6;
25
	public static String WordCloudEditor_7;
26
	public static String WordCloudEditor_8;
27
	public static String WordCloudEditor_9;
28
	public static String WordCloudPreferencePage_0;
29
	public static String WordCloudPreferencePage_1;
30
	public static String WordCloudPreferencePage_2;
31
	public static String WordCloudPreferencePage_3;
32
	static {
33
		// initialize resource bundle
34
		NLS.initializeMessages(BUNDLE_NAME, ___Messages.class);
35
	}
36

  
37
	private ___Messages() {
38
	}
39
}
tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/___messages_fr.properties (revision 541)
1
WordCloudTitle=Nuage de mot
2
ComputeVocabulary_0=Ouverture du r?sultat
3
ComputeWordCloud_0=Le moteur de statistique n'est pas pr?t. Abandon.
4
ComputeWordCloud_11=Les packages n?c?ssaires au fonctionnement de la fonctionnalit? n'ont pas pu ?tre install?s. Voir les instructions pour installation manuelle ? l'adresse https://groupes.renater.fr/wiki/txm-users/public/extensions#wordcloud
5
ComputeWordCloud_12=Abandon du calcul.
6
ComputeWordCloud_2=Les packages R ont ?t? charg?s. Lancement du calcul.
7
ComputeWordCloud_3=Le package R {0} n'a pas pu ?tre install?. Raison : {1} 
8
ComputeWordCloud_4=Installation du package R {0}...
9
ComputeWordCloud_5=Chargement du package : 
10
ComputeWordCloud_6=Echec de l'installation du package {0}.
11
ComputeWordCloud_7=Annulation par l'utilisateur.
12
WordCloudEditor_0=Vmax : 
13
WordCloudEditor_1=Fmin : 
14
WordCloudEditor_2=% de labels verticaux : 
15
WordCloudEditor_3=Position al?atoire
16
WordCloudEditor_4=Calculer
17
WordCloudEditor_5=Object non-compatible avec la fonctionnalit? Nuage de mot
18
WordCloudEditor_6=WordCloud est pr?t : 
19
WordCloudEditor_7=Dessin en cours...
20
WordCloudEditor_8=Sauvegarde dans le fichier {0} 
21
WordCloudEditor_9=Rafra?chissement 
22
WordCloudPreferencePage_0=Filtre en nombre de mot ? utiliser
23
WordCloudPreferencePage_1=Filtre en fr?quence minimal des mots ? utiliser frequency
24
WordCloudPreferencePage_2=Pourcentage de mot verticaux
25
WordCloudPreferencePage_3=Position al?atoire des mots
tmp/org.txm.backtomedia.rcp/src/org/txm/backtomedia/editors/vlcplayer/VLCPlayerEditor.java (revision 541)
86 86
	public boolean isResultUsingParent(TXMResult parent) {
87 87
		return false;
88 88
	}
89

  
90
	@Override
91
	public void computeResult() {
92
		// no result to compute :)
93
	}
94

  
95
	@Override
96
	protected void initializeFields() {
97
		// nothing to do
98
	}
99 89
}
tmp/org.txm.utils/src/org/txm/utils/messages/TXMNLS.java (revision 541)
1
/*******************************************************************************
2
 * Copyright (c) 2005, 2014 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * 
8
 * Contributors:
9
 *     IBM - Initial API and implementation
10
 *******************************************************************************/
11
package org.txm.utils.messages;
12

  
13
import java.io.IOException;
14
import java.io.InputStream;
15
import java.lang.reflect.Field;
16
import java.lang.reflect.Modifier;
17
import java.security.AccessController;
18
import java.security.PrivilegedAction;
19
import java.util.*;
20

  
21
import org.eclipse.osgi.framework.log.FrameworkLog;
22
import org.eclipse.osgi.framework.log.FrameworkLogEntry;
23

  
24
/**
25
 * Common superclass for all message bundle classes.  Provides convenience
26
 * methods for manipulating messages.
27
 * <p>
28
 * The <code>#bind</code> methods perform string substitution and should be considered a
29
 * convenience and <em>not</em> a full substitute replacement for <code>MessageFormat#format</code>
30
 * method calls. 
31
 * </p>
32
 * <p>
33
 * Text appearing within curly braces in the given message, will be interpreted
34
 * as a numeric index to the corresponding substitution object in the given array. Calling
35
 * the <code>#bind</code> methods with text that does not map to an integer will result in an
36
 * {@link IllegalArgumentException}.
37
 * </p>
38
 * <p>
39
 * Text appearing within single quotes is treated as a literal. A single quote is escaped by
40
 * a preceeding single quote.
41
 * </p>
42
 * <p>
43
 * Clients who wish to use the full substitution power of the <code>MessageFormat</code> class should
44
 * call that class directly and not use these <code>#bind</code> methods.
45
 * </p>
46
 * <p>
47
 * Clients may subclass this type.
48
 * </p>
49
 * 
50
 * @since 3.1
51
 */
52
public abstract class TXMNLS {
53

  
54
	private static final Object[] EMPTY_ARGS = new Object[0];
55
	private static final String EXTENSION = ".properties"; //$NON-NLS-1$
56
	private static String[] nlSuffixes;
57
	private static final String PROP_WARNINGS = "osgi.nls.warnings"; //$NON-NLS-1$
58
	private static final String IGNORE = "ignore"; //$NON-NLS-1$
59
	private static final boolean ignoreWarnings = AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
60
		public Boolean run() {
61
			return IGNORE.equals(System.getProperty(PROP_WARNINGS));
62
		}
63
	});
64

  
65
	/*
66
	 * NOTE do not change the name of this field; it is set by the Framework using reflection
67
	 */
68
	private static FrameworkLog frameworkLog;
69

  
70
	static final int SEVERITY_ERROR = 0x04;
71
	static final int SEVERITY_WARNING = 0x02;
72
	/*
73
	 * This object is assigned to the value of a field map to indicate
74
	 * that a translated message has already been assigned to that field.
75
	 */
76
	static final Object ASSIGNED = new Object();
77
	public static final boolean STATIC_DEBUG_MESSAGE_BUNDLES = false;
78

  
79
	/**
80
	 * Creates a new NLS instance.
81
	 */
82
	protected TXMNLS() {
83
		super();
84
	}
85

  
86
	/**
87
	 * Bind the given message's substitution locations with the given string value.
88
	 * 
89
	 * @param message the message to be manipulated
90
	 * @param binding the object to be inserted into the message
91
	 * @return the manipulated String
92
	 * @throws IllegalArgumentException if the text appearing within curly braces in the given message does not map to an integer 
93
	 */
94
	public static String bind(String message, Object binding) {
95
		return internalBind(message, null, String.valueOf(binding), null);
96
	}
97

  
98
	/**
99
	 * Bind the given message's substitution locations with the given string values.
100
	 * 
101
	 * @param message the message to be manipulated
102
	 * @param binding1 An object to be inserted into the message
103
	 * @param binding2 A second object to be inserted into the message
104
	 * @return the manipulated String
105
	 * @throws IllegalArgumentException if the text appearing within curly braces in the given message does not map to an integer
106
	 */
107
	public static String bind(String message, Object binding1, Object binding2) {
108
		return internalBind(message, null, String.valueOf(binding1), String.valueOf(binding2));
109
	}
110

  
111
	/**
112
	 * Bind the given message's substitution locations with the given string values.
113
	 * 
114
	 * @param message the message to be manipulated
115
	 * @param bindings An array of objects to be inserted into the message
116
	 * @return the manipulated String
117
	 * @throws IllegalArgumentException if the text appearing within curly braces in the given message does not map to an integer
118
	 */
119
	public static String bind(String message, Object[] bindings) {
120
		return internalBind(message, bindings, null, null);
121
	}
122

  
123

  
124
	/**
125
	 * Shortcut method to initialize messages if the baseName is the clazz package
126
	 * 
127
	 * @param clazz
128
	 */
129
	public static void initializeMessages(final Class<?> clazz) {
130
		final String baseName = clazz.getPackage().getName()+".messages";
131
		initializeMessages(baseName, clazz);
132
	}
133

  
134
	public static void initializeMessages(final String baseName, final Class<?> clazz) {
135

  
136
		if (System.getSecurityManager() == null) {
137
			load(baseName, clazz);
138
			fixEncodingToUTF8(baseName, clazz); // fix encoding to UTF-8
139
			return;
140
		}
141
		AccessController.doPrivileged(new PrivilegedAction<Void>() {
142
			public Void run() {
143
				load(baseName, clazz);
144
				fixEncodingToUTF8(baseName, clazz);
145
				return null;
146
			}
147
		});
148
	}
149

  
150
	/**
151
	 * Initialize the given class with the values from the message properties specified by the
152
	 * base name.  The base name specifies a fully qualified base name to a message properties file,
153
	 * including the package where the message properties file is located.  The class loader of the 
154
	 * specified class will be used to load the message properties resources.
155
	 * <p>
156
	 * For example, if the locale is set to en_US and <code>org.eclipse.example.nls.messages</code>
157
	 * is used as the base name then the following resources will be searched using the class
158
	 * loader of the specified class:
159
	 * <pre>
160
	 *   org/eclipse/example/nls/messages_en_US.properties
161
	 *   org/eclipse/example/nls/messages_en.properties
162
	 *   org/eclipse/example/nls/messages.properties
163
	 * </pre>
164
	 * 
165
	 * TXM change: 
166
	 *    - the ASSIGNED test has been commented, so this method should always reset the String values
167
	 *    - the properties String are re-encoded to UTF-8
168
	 * </p>
169
	 * 
170
	 * @param baseName the base name of a fully qualified message properties file.
171
	 * @param clazz the class where the constants will exist
172
	 */
173
	protected static void fixEncodingToUTF8(final String baseName, final Class<?> clazz) {
174
		// re-encode the fields
175
		final Field[] fieldArray = clazz.getDeclaredFields();
176
		final int len = fieldArray.length;
177
		for (int i = 0; i < len; i++) {
178
			final Field field = (Field) fieldArray[i];
179

  
180
			if (field.getType() != java.lang.String.class) 
181
				continue;
182

  
183
			if (!field.isAccessible())
184
				field.setAccessible(true);
185
			try {
186
				final String rawValue = (String) field.get(null);
187
				field.set(null, new String(rawValue.getBytes("ISO-8859-1"), "UTF-8"));
188
			}
189
			catch(Exception e) {
190
				//	e.printStackTrace();
191
			}
192
		}
193
	}
194

  
195
	/*
196
	 * Perform the string substitution on the given message with the specified args.
197
	 * See the class comment for exact details.
198
	 */
199
	private static String internalBind(String message, Object[] args, String argZero, String argOne) {
200
		if (message == null)
201
			return "No message available."; //$NON-NLS-1$
202
		if (args == null || args.length == 0)
203
			args = EMPTY_ARGS;
204

  
205
		int length = message.length();
206
		//estimate correct size of string buffer to avoid growth
207
		int bufLen = length + (args.length * 5);
208
		if (argZero != null)
209
			bufLen += argZero.length() - 3;
210
		if (argOne != null)
211
			bufLen += argOne.length() - 3;
212
		StringBuffer buffer = new StringBuffer(bufLen < 0 ? 0 : bufLen);
213
		for (int i = 0; i < length; i++) {
214
			char c = message.charAt(i);
215
			switch (c) {
216
			case '{' :
217
				int index = message.indexOf('}', i);
218
				// if we don't have a matching closing brace then...
219
				if (index == -1) {
220
					buffer.append(c);
221
					break;
222
				}
223
				i++;
224
				if (i >= length) {
225
					buffer.append(c);
226
					break;
227
				}
228
				// look for a substitution
229
				int number = -1;
230
				try {
231
					number = Integer.parseInt(message.substring(i, index));
232
				} catch (NumberFormatException e) {
233
					throw (IllegalArgumentException) new IllegalArgumentException().initCause(e);
234
				}
235
				if (number == 0 && argZero != null)
236
					buffer.append(argZero);
237
				else if (number == 1 && argOne != null)
238
					buffer.append(argOne);
239
				else {
240
					if (number >= args.length || number < 0) {
241
						buffer.append("<missing argument>"); //$NON-NLS-1$
242
						i = index;
243
						break;
244
					}
245
					buffer.append(args[number]);
246
				}
247
				i = index;
248
				break;
249
			case '\'' :
250
				// if a single quote is the last char on the line then skip it
251
				int nextIndex = i + 1;
252
				if (nextIndex >= length) {
253
					buffer.append(c);
254
					break;
255
				}
256
				char next = message.charAt(nextIndex);
257
				// if the next char is another single quote then write out one
258
				if (next == '\'') {
259
					i++;
260
					buffer.append(c);
261
					break;
262
				}
263
				// otherwise we want to read until we get to the next single quote
264
				index = message.indexOf('\'', nextIndex);
265
				// if there are no more in the string, then skip it
266
				if (index == -1) {
267
					buffer.append(c);
268
					break;
269
				}
270
				// otherwise write out the chars inside the quotes
271
				buffer.append(message.substring(nextIndex, index));
272
				i = index;
273
				break;
274
			default :
275
				buffer.append(c);
276
			}
277
		}
278
		return buffer.toString();
279
	}
280

  
281
	/*
282
	 * Build an array of property files to search.  The returned array contains
283
	 * the property fields in order from most specific to most generic.
284
	 * So, in the FR_fr locale, it will return file_fr_FR.properties, then
285
	 * file_fr.properties, and finally file.properties.
286
	 */
287
	private static String[] buildVariants(String root) {
288
		if (nlSuffixes == null) {
289
			//build list of suffixes for loading resource bundles
290
			String nl = Locale.getDefault().toString();
291
			List<String> result = new ArrayList<String>(4);
292
			int lastSeparator;
293
			while (true) {
294
				result.add('_' + nl + EXTENSION);
295
				lastSeparator = nl.lastIndexOf('_');
296
				if (lastSeparator == -1)
297
					break;
298
				nl = nl.substring(0, lastSeparator);
299
			}
300
			//add the empty suffix last (most general)
301
			result.add(EXTENSION);
302
			nlSuffixes = result.toArray(new String[result.size()]);
303
		}
304
		root = root.replace('.', '/');
305
		String[] variants = new String[nlSuffixes.length];
306
		for (int i = 0; i < variants.length; i++)
307
			variants[i] = root + nlSuffixes[i];
308
		return variants;
309
	}
310

  
311
	private static void computeMissingMessages(String bundleName, Class<?> clazz, Map<Object, Object> fieldMap, Field[] fieldArray, boolean isAccessible) {
312
		// iterate over the fields in the class to make sure that there aren't any empty ones
313
		final int MOD_EXPECTED = Modifier.PUBLIC | Modifier.STATIC;
314
		final int MOD_MASK = MOD_EXPECTED | Modifier.FINAL;
315
		final int numFields = fieldArray.length;
316
		for (int i = 0; i < numFields; i++) {
317
			Field field = fieldArray[i];
318
			if ((field.getModifiers() & MOD_MASK) != MOD_EXPECTED)
319
				continue;
320
			//if the field has a a value assigned, there is nothing to do
321
			// changed ASSIGNED to null because assigned key are now removed from the fieldMap == the fields members of the MessagesProperties objects == fieldArray of the load method
322
			if (fieldMap.get(field.getName()) == null) continue;
323

  
324
			try {
325
				// Set a value for this empty field. We should never get an exception here because
326
				// we know we have a public static non-final field. If we do get an exception, silently
327
				// log it and continue. This means that the field will (most likely) be un-initialized and
328
				// will fail later in the code and if so then we will see both the NPE and this error.
329
				String value = "NLS missing message: " + field.getName() + " in: " + bundleName; //$NON-NLS-1$ //$NON-NLS-2$
330
				if (STATIC_DEBUG_MESSAGE_BUNDLES)
331
					System.out.println(value);
332
				log(SEVERITY_WARNING, value, null);
333
				if (!isAccessible)
334
					field.setAccessible(true);
335
				field.set(null, value);
336
			} catch (Exception e) {
337
				log(SEVERITY_ERROR, "Error setting the missing message value for: " + field.getName(), e); //$NON-NLS-1$
338
			}
339
		}
340
	}
341

  
342
	/*
343
	 * Load the given resource bundle using the specified class loader.
344
	 */
345
	static void load(final String bundleName, Class<?> clazz) {
346
		long start = System.currentTimeMillis();
347
		final Field[] fieldArray = clazz.getDeclaredFields();
348
		ClassLoader loader = clazz.getClassLoader();
349

  
350
		boolean isAccessible = (clazz.getModifiers() & Modifier.PUBLIC) != 0;
351

  
352
		//build a map of field names to Field objects
353
		final int len = fieldArray.length;
354
		Map<Object, Object> fields = new HashMap<Object, Object>(len * 2);
355
		for (int i = 0; i < len; i++)
356
			fields.put(fieldArray[i].getName(), fieldArray[i]);
357

  
358
		// search the variants from most specific to most general, since
359
		// the MessagesProperties.put method will mark assigned fields
360
		// to prevent them from being assigned twice
361
		final String[] variants = buildVariants(bundleName);
362
		for (int i = 0; i < variants.length; i++) {
363
			// loader==null if we're launched off the Java boot classpath
364
			final InputStream input = loader == null ? ClassLoader.getSystemResourceAsStream(variants[i]) : loader.getResourceAsStream(variants[i]);
365
			if (input == null)
366
				continue;
367
			try {
368
				final MessagesProperties properties = new MessagesProperties(fields, bundleName, variants[i], isAccessible);
369
				properties.load(input);
370
			} catch (IOException e) {
371
				log(SEVERITY_ERROR, "Error loading " + variants[i], e); //$NON-NLS-1$
372
			} finally {
373
				if (input != null)
374
					try {
375
						input.close();
376
					} catch (IOException e) {
377
						// ignore
378
					}
379
			}
380
		}
381
		computeMissingMessages(bundleName, clazz, fields, fieldArray, isAccessible);
382
		if (STATIC_DEBUG_MESSAGE_BUNDLES)
383
			System.out.println("Time to load message bundle: " + bundleName + " was " + (System.currentTimeMillis() - start) + "ms."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
384
	}
385

  
386
	/*
387
	 * The method adds a log entry based on the error message and exception. 
388
	 * The output is written to the System.err.
389
	 * 
390
	 * This method is only expected to be called if there is a problem in
391
	 * the NLS mechanism. As a result, translation facility is not available 
392
	 * here and messages coming out of this log are generally not translated.
393
	 * 
394
	 * @param severity - severity of the message (SEVERITY_ERROR or SEVERITY_WARNING)
395
	 * @param message - message to log
396
	 * @param e - exception to log
397
	 */
398
	static void log(int severity, String message, Exception e) {
399
		if (severity == SEVERITY_WARNING && ignoreWarnings)
400
			return; // ignoring warnings; bug 292980
401
		if (frameworkLog != null) {
402
			frameworkLog.log(new FrameworkLogEntry("org.eclipse.osgi", severity, 1, message, 0, e, null)); //$NON-NLS-1$
403
			return;
404
		}
405
		String statusMsg;
406
		switch (severity) {
407
		case SEVERITY_ERROR :
408
			statusMsg = "Error: "; //$NON-NLS-1$
409
			break;
410
		case SEVERITY_WARNING :
411
			// intentionally fall through:
412
		default :
413
			statusMsg = "Warning: "; //$NON-NLS-1$
414
		}
415
		if (message != null)
416
			statusMsg += message;
417
		if (e != null)
418
			statusMsg += ": " + e.getMessage(); //$NON-NLS-1$
419
		System.err.println(statusMsg);
420
		if (e != null)
421
			e.printStackTrace();
422
	}
423

  
424
	/*
425
	 * Class which sub-classes java.util.Properties and uses the #put method
426
	 * to set field values rather than storing the values in the table.
427
	 */
428
	private static class MessagesProperties extends Properties {
429

  
430
		private static final int MOD_EXPECTED = Modifier.PUBLIC | Modifier.STATIC;
431
		private static final int MOD_MASK = MOD_EXPECTED | Modifier.FINAL;
432
		private static final long serialVersionUID = 1L;
433

  
434
		private final String bundleName;
435
		private final Map<Object, Object> fields;
436
		private final boolean isAccessible;
437
		private final String variant;
438

  
439
		public MessagesProperties(Map<Object, Object> fieldMap, String bundleName, String variant, boolean isAccessible) {
440
			super();
441
			this.fields = fieldMap;
442
			this.bundleName = bundleName;
443
			this.isAccessible = isAccessible;
444
			this.variant = variant;
445
		}
446

  
447
		/* (non-Javadoc)
448
		 * @see java.util.Hashtable#put(java.lang.Object, java.lang.Object)
449
		 */
450
		public synchronized Object put(Object key, Object value) {
451
			
452
			//Object fieldObject = fields.put(key, ASSIGNED);
453
			
454
			Object fieldObject = fields.remove(key);
455
			
456
			// if already assigned, there is nothing to do
457
			if (fieldObject == ASSIGNED) {
458
				//System.out.println(variant+ " DAOL MESSAGE "+key+"="+value);
459
				return null;
460
			}
461
			//System.out.println(variant+" LOAD MESSAGE "+key+"="+value+" in "+fieldObject);
462
			if (fieldObject == null) {
463
				final String msg = "NLS unused message: " + key + " in: " + bundleName;//$NON-NLS-1$ //$NON-NLS-2$
464
				if (STATIC_DEBUG_MESSAGE_BUNDLES)
465
					System.out.println(msg);
466
				// keys with '.' are ignored by design (bug 433424)
467
				if (key instanceof String && ((String) key).indexOf('.') < 0) {
468
					log(SEVERITY_WARNING, msg, null);
469
				}
470
				return null;
471
			}
472
			final Field field = (Field) fieldObject;
473
			//can only set value of public static non-final fields
474
			if ((field.getModifiers() & MOD_MASK) != MOD_EXPECTED)
475
				return null;
476
			try {
477
				// Check to see if we are allowed to modify the field. If we aren't (for instance 
478
				// if the class is not public) then change the accessible attribute of the field
479
				// before trying to set the value.
480
				if (!isAccessible)
481
					field.setAccessible(true);
482
				// Set the value into the field. We should never get an exception here because
483
				// we know we have a public static non-final field. If we do get an exception, silently
484
				// log it and continue. This means that the field will (most likely) be un-initialized and
485
				// will fail later in the code and if so then we will see both the NPE and this error.
486

  
487
				// Extra care is taken to be sure we create a String with its own backing char[] (bug 287183)
488
				// This is to ensure we do not keep the key chars in memory.
489
				field.set(null, new String(((String) value).toCharArray()));
490
			} catch (Exception e) {
491
				log(SEVERITY_ERROR, "Exception setting field value.", e); //$NON-NLS-1$
492
			}
493
			return null;
494
		}
495
	}
496
}
tmp/org.txm.utils/src/org/txm/utils/messages/Utf8NLS.java (revision 541)
23 23
	 * @param baseName
24 24
	 * @param clazz
25 25
	 */
26
	public static void initializeMessages(final Class<?> clazz) {
27
		// initialize resource bundle
28
		initializeMessages(clazz.getPackage().toString(), clazz);
29
	}
30
	
31
	/**
32
	 * Initializes messages using UTF-8 encoding.
33
	 * @param baseName
34
	 * @param clazz
35
	 */
26 36
	public static void initializeMessages(final String baseName, final Class<?> clazz) {
27 37
		// initialize resource bundle
28 38
		NLS.initializeMessages(baseName, clazz);
......
51 61

  
52 62
		}
53 63
	}
54

  
55

  
56

  
57 64
}
tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/Messages.java (revision 541)
1 1
package org.txm.searchengine.cqp.rcp;
2 2

  
3
import org.txm.utils.messages.TXMNLS;
3
import org.txm.utils.messages.Utf8NLS;
4 4

  
5
public class Messages extends TXMNLS {
5
public class Messages extends Utf8NLS {
6 6
	
7 7
	public static String CQPPreferenceInitializer_0;
8 8
	public static String CQPPreferenceInitializer_1;
......
19 19
	public static String CQPPreferencePage_18;
20 20
	
21 21
	static {
22
		TXMNLS.initializeMessages(Messages.class);
22
		Utf8NLS.initializeMessages(Messages.class);
23 23
	}
24 24
}
tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages_ru.properties (revision 541)
6 6

  
7 7
AdapterFactory_0 = ** Предупреждение: корпус {0} поврежден. Некоторые команды могут быть недоступны или функционировать некорркетно.
8 8

  
9
AddBase_1  = Новый корпус: {0}.
10
AddBase_10 = Платформа TXM готова к использованию.
11
AddBase_16 = ** Невозможно записать язык {0} как свойство ''LANG'' структуры <txmcorpus>
12
AddBase_17 = ** Файл {0} недоступен
13
AddBase_19 = Внимание
14
AddBase_2  = ** Ошибка загрузки корпуса из папки: {0}.\nНевозможно найти необходимые составные элементы.
15
AddBase_20 = Корпус {0} уже существует. Хотите ли вы его заменить?
16
AddBase_22 = Файл {0} не соответствует формату TXM.
17
AddBase_23 = Корпус {0} не имеет свойства ''LANG'' при структуре <txmcorpus>
18
AddBase_24 = ** Не удалось загрузить корпус {0}
19
AddBase_25 = Корпус TXM в бинарном формате - это либо файл с расширением .txm или .zip, либо директория с папками 'html', 'data', 'registry', 'txm'
20
AddBase_27 = Загрузить корпус
21
AddBase_28 = Извлечение бинарного корпуса
22
AddBase_29 = Извлечено {0} за {1}
23
AddBase_31 = ** Не удалось загрузить бинарный корпус: {0}
24
AddBase_32 = Загрузка корпуса в платформу
25
AddBase_33 = Перезагрузка платформы
26
AddBase_34 = Рабочая среда TXM не инициализирована. Пожалуйста, перезагрузите TXM.
27
AddBase_4  = ** Не удалось загрузить бинарный корпу (null error).
28
AddBase_7  = ** Не удалось создать бинарный корпус.
29

  
30
AddProject_3 = Введите название проекта
31

  
32
AdvancePreferencePage_1  = Папка установки TXM
33
AdvancePreferencePage_12 = Уровень детализации отчета
34
AdvancePreferencePage_13 = Добавить технический комментарий
35
AdvancePreferencePage_14 = Копировать отчет в файл
36
AdvancePreferencePage_2  = Папка пользователя TXM
37
AdvancePreferencePage_3  = Показывать время выполнения на консоли
38
AdvancePreferencePage_4  = N/A_Expert user mode
39

  
40
ApplicationWorkbenchAdvisor_0           = Инициализация платформы...
41
ApplicationWorkbenchAdvisor_1           = Инициализация платформы...
42
ApplicationWorkbenchAdvisor_11          = Загрузка демонстрационных корпусов
43
ApplicationWorkbenchAdvisor_12          = ** Ошибка: переменная среды ''TXMHOME'' задана ({0}), но нет папки: 
44
ApplicationWorkbenchAdvisor_13          = ** Не удалось создать папку TXMHOME : {0}
45
ApplicationWorkbenchAdvisor_16          = N/A_Removing old corpus backup directory {0}. 
46
ApplicationWorkbenchAdvisor_17          = .
47
ApplicationWorkbenchAdvisor_18=Corpora backuped: {0} 
48
ApplicationWorkbenchAdvisor_19          = ** Не удалось задать параметры программы TreeTagger : {0}
49
ApplicationWorkbenchAdvisor_2           = Загрузка опций установки TXM из: {0}
50
ApplicationWorkbenchAdvisor_20          = N/A_ in 
51
ApplicationWorkbenchAdvisor_22          = N/A_Processing folder: 
52
ApplicationWorkbenchAdvisor_23          = \ ...
53
ApplicationWorkbenchAdvisor_24          = N/A_Failed moving old corpus from 
54
ApplicationWorkbenchAdvisor_25          = Чтение опций из места установки: {0}
55
ApplicationWorkbenchAdvisor_26          = N/A_ to 
56
ApplicationWorkbenchAdvisor_27          = Рабочая папка TXM уже существует. Загрузить ранее созданные корпусы?
57
ApplicationWorkbenchAdvisor_28          = Сохранение рабочей папки...
58 9
ERROR          = N/A_Error: 
59
ApplicationWorkbenchAdvisor_3           = Проверка наличия рабочей папки
60
ApplicationWorkbenchAdvisor_30          = Перемещение существующих корпусов...
61
ApplicationWorkbenchAdvisor_31          = ** Не удалось создать рабочее пространство 'default.xml'
62
ApplicationWorkbenchAdvisor_32          = ** TreeTagger не установлен или неверно заданы пути доступа.
63
ApplicationWorkbenchAdvisor_33          = Пути доступа к TreeTagger приведены к значениями по умолчанию.
64
ApplicationWorkbenchAdvisor_34          = ** Ошибка: не удалсоь создать папку для сохранения корпуса
65
ApplicationWorkbenchAdvisor_35          = N/A_\nCorpus 
66
ApplicationWorkbenchAdvisor_36          = Перемещение  
67
ApplicationWorkbenchAdvisor_37          = \ в 
68
ApplicationWorkbenchAdvisor_38          = Внимание: корпус уже был сохранен.
69
ApplicationWorkbenchAdvisor_39          = Не хватает папки в директории установки TXM : {0}
70
ApplicationWorkbenchAdvisor_4           = Проверка установки TreeTagger
71
ApplicationWorkbenchAdvisor_40          = ** Не удалось скопировать файлы из папки TXMINSTALL в TXMHOME: {0}
72
ApplicationWorkbenchAdvisor_41          = ** Не удалось задать опции: {0}
73
ApplicationWorkbenchAdvisor_42          = \ перемещение 
74
ApplicationWorkbenchAdvisor_43          = Corpora {0} not restored, since this setup provides more recent ones.
75
ApplicationWorkbenchAdvisor_43_single   = Corpus {0} not restored, since this setup provides more recent ones.
76
ApplicationWorkbenchAdvisor_44          = ** Невозможно перенести корпус 
77
ApplicationWorkbenchAdvisor_45          = ** Файл не читается: {0}
78
ApplicationWorkbenchAdvisor_46          = N/A_\nCorpus 
79
ApplicationWorkbenchAdvisor_47          = ** Невозможно сохранить существующие корпусы:
80
ApplicationWorkbenchAdvisor_48          = \nCorpus ''{0}'' could not be restored and are moved to ''{1}''.
81
ApplicationWorkbenchAdvisor_49          = N/A_Initializing the toolbox...
82
ApplicationWorkbenchAdvisor_5           = Стандартный выход
83
ApplicationWorkbenchAdvisor_51          = ** Не удалось загрузить корпус из файла: 
84
ApplicationWorkbenchAdvisor_52          = ** Не удалось загрузить демонстрационные корпусы: {0}
85
ApplicationWorkbenchAdvisor_53          = Восстановление корпусов из 
86
ApplicationWorkbenchAdvisor_54          = Преобразование корпусов из формата TXM 0.5 
87
ApplicationWorkbenchAdvisor_55          = \ в формат TXM 0.6.
88
ApplicationWorkbenchAdvisor_56          = ** Не удалось преобразовать корпус в формат TXM 0.6
89
ApplicationWorkbenchAdvisor_57          = Загрузка преобразованного корпуса 0.5 
90
ApplicationWorkbenchAdvisor_58          = Загрузка корпуса 0.6 
91
ApplicationWorkbenchAdvisor_59          = ** Ошибка во время загрузки 
92
ApplicationWorkbenchAdvisor_60          = ** Ошибка: корпус 
93
ApplicationWorkbenchAdvisor_61          = \ не является бинарным корпусом TXM 0.6
94
ApplicationWorkbenchAdvisor_7           = Создание рабочего пространства пользователя TXM.
95
ApplicationWorkbenchAdvisor_71          = Загрузка демонстрационных корпусов.
96
ApplicationWorkbenchAdvisor_8           = Путь установки: {0}
97
ApplicationWorkbenchAdvisor_9           = ** Ошибка чтения файла опций установки
98
ApplicationWorkbenchAdvisor_init        = Запуск {0}...
99
ApplicationWorkbenchAdvisor_init_failed = ** Запуск платформы прерван. Пожалуйста, отрегулируйте опции (в меню 'Файл>Опции')
100
ApplicationWorkbenchAdvisor_ready       = Готово.
101 10

  
102
Application_4                           = N/A_This file is not meant to run TXM. Please consult TXM user manual.
103
Application_6                           = ** Вы должны установить версию 1.6 Java или более поздниюю, прежде чем запустить TXM, установленная на этой машине версия Java: {0}
104

  
105 11
AssistedQueryWidget_0 = Ouvrir l'assistant de requêtes
106 12

  
107 13
BackToText_0 = Показать в полнотекстовом режиме
108 14

  
109
CAHEditor_0 = N/A_Computing CAH
110 15

  
111
CAHPreferencePage_0 = Показывать графики в 2D
112
CAHPreferencePage_1 = Классификация
113
CAHPreferencePage_2 = Число кластеров
114
CAHPreferencePage_3 = Метод
115
CAHPreferencePage_4 = Метрика
116

  
117
CANT_CREATE_GRAPHIC = ** Невозможно создать график
118

  
119
CAPreferencePage_0 = Формат колонки Качество
120
CAPreferencePage_1 = Формат колонки Вклад
121
CAPreferencePage_3 = Показать колонки в графике факторного плана
122
CAPreferencePage_4 = Показать строчки в графике факторного плана
123
CAPreferencePage_5 = Формат колонки Масса
124
CAPreferencePage_6 = Формат колонки Дистанция
125
CAPreferencePage_7 = Формат колонки Cos²
126
CAPreferencePage_8 = Формат колонки Coord
127

  
128 16
CQPPreferenceInitializer_0 = localhost
129 17
CQPPreferenceInitializer_1 = anonymous
130 18

  
......
142 30

  
143 31
Cannot_ask_simple_when_advance = Невозможно отобразить закладку простых опций, когда пользователь выбрал отображение дополнительных опций
144 32

  
145
ColRowInfosLabelProvider_19 = Qual
146
ColRowInfosLabelProvider_9  = χ²
147

  
148
ColsRowsInfosEditor_0 = Ошибочный ввод
149
ColsRowsInfosEditor_2 = Информация: {0}
150

  
151 33
Commands_0 = Ошибка: невозможно инициализировать команды
152 34

  
153 35
ComplexSortSelector_0 = Ключи для сортировки:
......
178 60
ComplexSubcorpusPanel_4  = Запрос 
179 61
ComplexSubcorpusPanel_5  = Обновить
180 62

  
181
ComputeCAH_0 = Расчет Классификации {0}
182
ComputeCAH_1 = Показать график
183
ComputeCAH_2 = ** Не удается записать данные во временный файл
184
ComputeCAH_3 = Расчет классификации с 
185

  
186
ComputeClassification_5 = Колонки
187
ComputeClassification_6 = Строчки
188

  
189
ComputeCoocFromLines_0 = Идет расчет совместной встречаемости
190
ComputeCoocFromLines_1 = Открытие таблицы совместной встречаемости
191

  
192
ComputeCoocMatrix_0  = N/A_Cooc matrix: 
193
ComputeCoocMatrix_1  = N/A_Number of nodes: 
194
ComputeCoocMatrix_10 = N/A_Distance
195
ComputeCoocMatrix_11 = N/A_Minimal co frequence
196
ComputeCoocMatrix_12 = N/A_Outfile : none
197
ComputeCoocMatrix_13 = N/A_Choose outfile
198
ComputeCoocMatrix_2  = N/A_Number of edges: 
199
ComputeCoocMatrix_3  = N/A_Distance: 
200
ComputeCoocMatrix_4  = N/A_Writing cooc matrix in GRAPHML file: 
201
ComputeCoocMatrix_5  = N/A_"
202
ComputeCoocMatrix_7  = N/A_CoocMatrix parameters
203

  
204
ComputeCooccurrences_0 = Загрузка таблицы совместной встречаемости
205
ComputeCooccurrences_1 = ** Невозможно вычислить совместную встречаемость в выделении
206

  
207
ComputeFrequencyList_2 = Расчет списка значений свойства {0} в корпусе {1}
208

  
209
ComputeIndexFromLines_0 = Выполнить команду Индекс на выделении
210

  
211
ComputeLexicalTable_0  = Составление словарной таблицы {0}
212
ComputeLexicalTable_1  = Составление словарной таблицы {0} со свойством {1}
213
ComputeLexicalTable_10 = Открытие словарной таблицы
214
ComputeLexicalTable_12 = Употребления в индексе
215
ComputeLexicalTable_13 = Выберите пределы для расчетов
216
ComputeLexicalTable_16 = Использовать все употребления
217
ComputeLexicalTable_2  = N/A_no property
218
ComputeLexicalTable_3  = Открытие диалогового окна конфигурации пределов
219
ComputeLexicalTable_5  = ** Невозможно построить словарную таблицу из Индекса, рассчитанного на корпусе
220
ComputeLexicalTable_6  = ** Списки значений должны строиться на одинаковых сочетаниях свойств: {0}
221
ComputeLexicalTable_7  = Списки значений должны иметь одинаковое распределение: {0}
222
ComputeLexicalTable_9  = ** Диалоговое окно словарной таблицы: невозможно получить размер корпуса. Причина {0}
223

  
224
ComputeReferencer_0 = Открытие результата Ссылок
225

  
226
ComputeSpecificitiesDialog_0 = ** Диалоговое окно ''Расчет специфичности'' - {0}
227
ComputeSpecificitiesDialog_1 = ** Синтаксическая ошибка в регулярном выражении: {0}
228
ComputeSpecificitiesDialog_3 = Фокус:
229
ComputeSpecificitiesDialog_4 = Фокус части:
230
ComputeSpecificitiesDialog_9 = Нет доступного фильтра для части
231

  
232
ComputeSpecificities_0       = Расчет специфичности
233
ComputeSpecificities_2       = Расчет специфичности {0}, свойство {1} 
234

  
235
ComputeSpecifities_10 = Открытие таблицы результатов специфичности
236
ComputeSpecifities_11 = Расчет специфичности в словарной таблице {0}
237
ComputeSpecifities_2  = Обновление вида корпусов...
238
ComputeSpecifities_3  = Расчет специфичности в подкорпусе {0} корпуса {1}, свойство {2}
239

  
240
Compute_Specificities        = Расчет специфичности
241

  
242

  
243 63
ONE_RESULT           = Готово: один результат
244 64

  
245 65
ConvertCorpus_0 = N/A_Corpus conversion failed.
246 66

  
247
CoocPreferencePage_0  = Формат индекса (по умолчанию 0.0000E00)
248
CoocPreferencePage_1  = Минимальный порог количества совместных употреблений
249
CoocPreferencePage_11 = Минимум справа
250
CoocPreferencePage_12 = Максимум справа
251
CoocPreferencePage_2  = Минимальный порог частотности совместной встречаемости
252
CoocPreferencePage_3  = Минимальный порог индекса совместной встречаемости
253
CoocPreferencePage_4  = Максимум слева
254
CoocPreferencePage_5  = Совместная встречаемость
255
CoocPreferencePage_6  = Минимум слева
256
CoocPreferencePage_8  = N/A_Use partial lexical table
257

  
258
CooccurrencesEditor_0  = Сортировать по: {0}
259
CooccurrencesEditor_10 = Совместная частотность
260
CooccurrencesEditor_11 = Значение индекса не соответствует формату двойной плавающей точки
261
CooccurrencesEditor_12 = Расчет совместной встречаемости {0}
262
CooccurrencesEditor_13 = Отладка расчета совместной встречаемости
263
CooccurrencesEditor_14 = Расчет совместной встречаемости
264
CooccurrencesEditor_15 = Отображение результатов
265
CooccurrencesEditor_16 = ** Невозможно вычислить совместную встречаемость без контекстов
266
CooccurrencesEditor_17 = Индекс
267
CooccurrencesEditor_18 = Порог индекса должен быть действительным числом, отличным от {0}
268
CooccurrencesEditor_2  = Рассчитать
269
CooccurrencesEditor_20 = Расчет совместной встречаемости  <{0}> в корпусе {1}
270
CooccurrencesEditor_23 = Готово: ни одного результата.
271
CooccurrencesEditor_24 = Готово: один результат.
272
CooccurrencesEditor_27 = Расчет запроса
273
CooccurrencesEditor_28 = Расчет ответов
274
CooccurrencesEditor_29 = Расчет подписей к строкам
275
CooccurrencesEditor_3  = Свойства совместных употреблений: 
276
CooccurrencesEditor_30 = Подсчет
277
CooccurrencesEditor_31 = Расчет словарной таблицы
278
CooccurrencesEditor_32 = Расчет показателей специфичности\	
279
CooccurrencesEditor_33 = Начало расчета совместной встречаемости
280
CooccurrencesEditor_34 = Готово: {1} совместных употреблений на {0} употреблений мотива
281
CooccurrencesEditor_4  = Пороги: Част ≥
282
CooccurrencesEditor_5  = Совм-част ≥ 
283
CooccurrencesEditor_6  = Показатель ≥ 
284
CooccurrencesEditor_8  = Кооккуррент
285
CooccurrencesEditor_9  = Средняя дистанция
286

  
287
CorporaView_0 = Корпус
288
CorporaView_1 = ** Ошибка: {0}
289
CorporaView_2 = ** Не удалось получить размеры корпуса {0}
290
CorporaView_3 = ** Произошла ошибка при расчете конкорданса
291
CorporaView_4 = N/A_CoocMatrix symbol is: 
292
CorporaView_5 = ** Произошла ошибка при расчете специфичности
293
CorporaView_6 = ** Не удалось открыть окно Мастера ссылок\	
294
CorporaView_7 = ** Произошла ошибка при расчете словарной таблицы
295
CorporaView_9 = ** Ошибка: не удается проивести запись в {0}
296

  
297 67
CorpusPage_0  = Издания
298 68
CorpusPage_1  = Добавить издание
299 69
CorpusPage_10 = Свойства слова
......
354 124
CorpusPage_8  = Имя корпуса*
355 125
CorpusPage_9  = Описание - HTML
356 126

  
357
CorrespondanceAnalysisEditorInput_0  = Собственные значения
358
CorrespondanceAnalysisEditorInput_1  = Факт. план
359
CorrespondanceAnalysisEditorInput_10 = ФАС
360
CorrespondanceAnalysisEditorInput_2  = Гистограмма собственных значений propres
361
CorrespondanceAnalysisEditorInput_26 = Масса
362
CorrespondanceAnalysisEditorInput_27 = Дист
363
CorrespondanceAnalysisEditorInput_29 = Конт
364
CorrespondanceAnalysisEditorInput_3  = Результат анализа соответствий не может быть пустым 
365
CorrespondanceAnalysisEditorInput_30 = Cos²
366
CorrespondanceAnalysisEditorInput_4  = Фактор
367
CorrespondanceAnalysisEditorInput_8  = Инф Строчки
368
CorrespondanceAnalysisEditorInput_9  = Инф Колонки
369

  
370
CreateFile_1 = Новый файл: {0}
371

  
372
CreateFolder_1 = Новая папка: {0}
373

  
374
CreateFrequencyList_8 = Загрузка таблицы частотности
375

  
376
CreateMacro_0 = N/A_Macro name
377
CreateMacro_1 = N/A_Please write the macro name
378

  
379 127
CreatePartitionDialog_0  = Создать Распределение
380 128
CreatePartitionDialog_1  = Простое
381 129
CreatePartitionDialog_16 = Запросы не должны быть пустыми
......
420 168
DefineReferencePattern_4 = Шаблон ссылок для сортировки
421 169
DefineReferencePattern_5 = Шаблон ссылок для сортировки
422 170

  
423
DeleteFile_0 = Вы уверены, что хотите удалить 
424
DeleteFile_2 = ** Не удалось удалить файл 
425

  
426 171
DeleteInCorporaView_1 = ** Ошибка при удалении подкорпуса {0}
427 172
DeleteInCorporaView_2 = ** Ошибка при удалении распределения {0}
428 173

  
429
DeleteLines_0 = Таблица должна содержать хотя бы одну строчку
430
DeleteLines_1 = Вы уверены?
431 174

  
432
DeleteObject_0  = Вы действительно хотите удалить {0}?
433
DeleteObject_10 = {0} удален(о)
434
DeleteObject_3  = ** Ошибка во время удаления
435
DeleteObject_4  = Ошибка во время удаления {0} : {1}
436
DeleteObject_5  = Удаление {0}
437

  
438 175
DiagnosticPreferencePage_1 = Описание
439 176
DiagnosticPreferencePage_2 = Число отображаемых значений свойства
440 177
DiagnosticPreferencePage_3 = Сортировать части по размеру
......
448 185
Diagnostique_8  = Получение общей информации
449 186
Diagnostique_9  = Получение данных о словарных единицах
450 187

  
451
ERROR_WHILE_LOADING_CONCORDANCE_LINE = ** Ошибка во время загрузки строк конкорданса: {0}
452

  
453
ElementTreeLabelProvider_0 = ** Ошибка: элемент не записан 
454
ElementTreeLabelProvider_1 = ** Ошибка: объект не является 'org.w3c.Element'
455

  
456 188
EmpantWidget_0 = Контекст: 
457 189
EmpantWidget_1 = форма
458 190
EmpantWidget_2 = структура
......
464 196
EmpantWidget_8 = Активный левый контекст
465 197
EmpantWidget_9 = Активный правый контекст
466 198

  
467
Error_computing_specificities = ** Ошибка во время расчета специфичности: {0}
468 199
Error_creating_partition      = ** Ошибка во время создания распределения: {0}
469 200

  
470
ExecuteGroovyScriptFromFile_2 = Скрипт Groovy должен находиться в папке 
471

  
472
ExecuteGroovyScript_0         = \ мс
473
ExecuteGroovyScript_1         = N/A_Error during parameters initialisation
474
ExecuteGroovyScript_2         = N/A_The user canceled the script execution
475

  
476
ExecuteRScript_1 = Выполнение 
477
ExecuteRScript_2 = Готово: 
478
ExecuteRScript_3 = \ мс
479

  
480
ExecuteRText_0 = Выполнение выделения текста... 
481
ExecuteRText_1 = ** Ошибка во время выполнения скрипта R {0}: {1}
482
ExecuteRText_2 = \ мс
483

  
484
ExecuteScriptImport_0 = Начало импортирования
485
ExecuteScriptImport_1 = ** Файл скрипта {0} не найден
486
ExecuteScriptImport_2 = ** Ошибка: папка 'corpora' не существует: 
487
ExecuteScriptImport_3 = N/A_Error: the folder {0} still exists. Cannot continue import. You can delete it manually and restart the import.
488
ExecuteScriptImport_5 = ** Ошибка в параметрах словарной сегментации: импортирование прервано.
489
ExecuteScriptImport_6 = Импортирование не завершено.
490
ExecuteScriptImport_7 = Импортирование завершено: 
491
ExecuteScriptImport_8 = ** Ошибка при загрузке корпуса
492

  
493
ExecuteScriptR_0 = ** Файл скрипта R {0} не найден
494
ExecuteScriptR_1 = ** Ошибка при выполнении скрипта R {0}: {1}
495

  
496
ExecuteScript_3       = ** Не найдено ни одного интерпретатора для расширения файла скрипта 
497

  
498
Exit_Menu_Label = Выход
499

  
500
Explorer_0 = Папка {0} не должна быть удалена
501
Explorer_1 = N/A_Go to parent folder
502
Explorer_2 = N/A_Go to TXM home
503
Explorer_3 = TXM
504
Explorer_4 = ⇧
505
Explorer_5 = ↻
506
Explorer_6 = N/A_Refresh
507
Explorer_7 = N/A_⌂
508
Explorer_8 = N/A_Go to TXM home
509

  
510 201
ExportCorpus_0 = ** Не удалось экспортировать корпу {0}
511 202
ExportCorpus_3 = Экпортирование 
512 203
ExportCorpus_4 = Готово, бинарный файл - {0} 
513 204

  
514
ExportPreferencePage_1  = Конфигурация экспорта
515
ExportPreferencePage_18 = Разделитель полей
516
ExportPreferencePage_19 = Разделитель текста
517
ExportPreferencePage_21 = Формат графиков R по умолчанию
518
ExportPreferencePage_3  = Кодировка экспортируемых файлов
519
ExportPreferencePage_4  = Показать результаты экспорта в текстовом редакторе
520

  
521
ExportResult_0 = Экспорт результатов
522
ExportResult_1 = N/A_Exporting...
523
ExportResult_2 = Результаты экспорта сохранены: 
524
ExportResult_3 = ** Экспорт: невозможно создать файл {0}: {1}
525
ExportResult_4 = ** Не удалось произвести экспорт в 
526
ExportResult_5 = ** Не удается прочитать {0}
527
ExportResult_6 = ** Не удалось экспортировать результат {0}: {1}
528

  
529
ExportSVG_0 = N/A_Exporting SVG...
530
ExportSVG_2 = N/A_Exporting with device: 
531

  
532
FAILED_TO_PARSE_OPTIONS    = ** Не удалось проанализировать опции TXM {0}: {1}
533
FAILED_TO_SAVE_PREFERENCES = ** Не удалось сохранить персональные настройки
534

  
535
FactorialMapEditor_0  = Факторы:  
536
FactorialMapEditor_10 = ** Внутренняя ошибка: ошибка выбора плана ФАС
537
FactorialMapEditor_11 = Изменить размер
538
FactorialMapEditor_13 = Обновление факторного плана
539
FactorialMapEditor_4  = Показать: 
540
FactorialMapEditor_5  = колонки
541
FactorialMapEditor_6  = строки
542
FactorialMapEditor_8  = Перезагрузка факторного плана
543

  
544
FileExplorerPreferencePage_0 = Рег. выр. скрытых файлов
545
FileExplorerPreferencePage_1 = Показать скрытые файлы
546
FileExplorerPreferencePage_2 = Показать папки
547

  
548
FileTreeContentProvider_1 = ** Проводник: некорректное регулярное выражение
549
FileTreeContentProvider_2 = \ ОШИБКА 
550
FileTreeContentProvider_3 = Элемент ошибки: '
551
FileTreeContentProvider_4 = '
552

  
553
FrequencyListEditorInput_0 = Список форм
554
FrequencyListEditorInput_1 = Pareto
555
FrequencyListEditorInput_2 = Список форм не может быть пустым
556
FrequencyListEditorInput_3 = Форма
557
FrequencyListEditorInput_4 = Частотность
558
FrequencyListEditorInput_5 = Цепочка знаков
559
FrequencyListEditorInput_6 = Целое
560
FrequencyListEditorInput_9 = Тип
561

  
562
GenericMultiPageEditor_1 = ** Внутренняя ошибка: невозможно показать данные {0}.
563
GenericMultiPageEditor_3 = ** Внутренняя ошибка: число редакторов RCP ({0}) должно соответствовать числу вводов ({1}).
564

  
565
GraphicalLogger_0 = ** Ошибка {0}
566

  
567
GroovyConsole_4 = \nВнутренняя ошибка.
568
GroovyConsole_5 = Ошибка: 
569

  
570
ImportDialog_0  = Параметры импорта - {0}
571
ImportDialog_1  = Папка с исходными материалами
572
ImportDialog_13 = Не удается найти корпус в бинарном формате в этой папке
573
ImportDialog_14 = Кодировка по умолчанию этого компьютера
574
ImportDialog_16 = Угадать
575
ImportDialog_19 = Язык по умолчанию этого компьютера
576
ImportDialog_22 = Выбрать
577
ImportDialog_23 = Опции
578
ImportDialog_4  = Кодировка букв: 
579
ImportDialog_5  = Основной язык: 
580
ImportDialog_6  = Параметры словарной сегментации: 
581

  
582
ImportFormEditor_0 = ** отсутствует скрипт для импорта {0} 
583

  
584
ImportPreferencePage_0 = Кодировка
585

  
586
ImportSelectedText_0  = Импорт текста из буфера обмена
587
ImportSelectedText_1  = clipboard
588
ImportSelectedText_10 = Идентифицированный язык 
589
ImportSelectedText_12 = Будет использован 
590
ImportSelectedText_2  = ** Буфер обмена пуст
591
ImportSelectedText_3  = Подтвердить
592
ImportSelectedText_4  = Корпус {0} будет удален
593
ImportSelectedText_6  = ** Внутренняя ошибка: не удается найти проект 'default' 
594

  
595
IndexToCooccurrence_0 = ** Ошибка при связывании Индекса и Совместной встречаемости
596

  
597
IndexToLexicalTable_0 = Невозможно составить словарную таблицу из Индекса, полученного на Корпусе
598

  
599 205
InternalCorpusView_0 = ** Ошибка при подготовке информации о корпусе
600 206
InternalCorpusView_1 = Перезагрузить
601 207
InternalCorpusView_2 = ** Внутренняя ошибка: getText {0}
602 208

  
603 209
Invalid_analysis_property = Некорректное свойство
604 210

  
605
JobHandler_0 = N/A_Canceling...
606
JobHandler_1 = N/A_Canceling 
607
JobHandler_2 = N/A_ canceling requested
608
JobHandler_3 = N/A_Failed to cancel 
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff