//------------------------------------------------------------------------------
// Copyright (c) 2000, 2007 IBM Corporation and others.
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// which accompanies this distribution, and is available at
// http://www.eclipse.org/legal/epl-v10.html
// 
// Contributors:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------

/* resource files for content page javascript 
 * this file should be localized
*/
ContentPageResource = function() {


this.expandAllText = "Rozwiń wszystkie sekcje";
this.collapseAllText = "Zwiń wszystkie sekcje";
this.backToTopText = "Początek strony";

this.expandAllSubSectionsText = "Rozwiń wszystkie kroki";
this.collapseAllSubSectionsText = "Zwiń wszystkie kroki";

this.toolbar_bookmark = "Utwórz zakładkę dla tej strony";
this.toolbar_back = "Wstecz";
this.toolbar_forward = "Dalej";
this.toolbar_expand_all = "Rozwiń wszystkie";
this.toolbar_collapse_all = "Zwiń wszystkie";
this.toolbar_print = "Drukuj";

this.expandText = "Rozwiń"
this.collapseText = "Zwiń"
this.checkedAltText = "Tak"	

};

