Blame platform-demos/ko/menubar.vala.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" xmlns:xi="http://www.w3.org/2001/XInclude" type="guide" style="task" id="menubar.vala" xml:lang="ko">
Packit 1470ea
  <info>
Packit 1470ea
  <title type="text">MenuBar (Vala)</title>
Packit 1470ea
  <link type="guide" xref="beginner.vala#menu-combo-toolbar"/>
Packit 1470ea
  <link type="seealso" xref="aboutdialog.vala"/>
Packit 1470ea
  <link type="seealso" xref="gmenu.vala"/>
Packit 1470ea
    <revision version="0.1" date="2012-05-25" status="draft"/>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Tiffany Antopolski</name>
Packit 1470ea
      <email its:translate="no">tiffany.antopolski@gmail.com</email>
Packit 1470ea
      <years>2012</years>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <desc>GtkMenuItem 위젯을 가진 위젯</desc>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>조성호</mal:name>
Packit 1470ea
      <mal:email>shcho@gnome.org</mal:email>
Packit 1470ea
      <mal:years>2017</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
  <title>MenuBar</title>
Packit 1470ea
  <media type="image" mime="image/png" src="media/menubar.png"/>
Packit 1470ea
  

XML과 GtkBuilder로 만든 MenuBar입니다.

Packit 1470ea
Packit 1470ea
  <links type="section"/>
Packit 1470ea
Packit 1470ea
  <section id="xml"> <title>XML로 MenuBar 만들기</title>
Packit 1470ea
   

XML로 메뉴 표시줄을 만들려면:

Packit 1470ea
   <steps>
Packit 1470ea
     <item>

원하는 텍스트 편집기로 <file>menubar.ui</file> 파일을 만드십시오.

</item>
Packit 1470ea
     <item>

다음 줄을 파일 상단에 입력합니다:

Packit 1470ea
           
Packit 1470ea
<?xml version="1.0"? encoding="UTF-8"?>
Packit 1470ea
     </item>
Packit 1470ea
    <item>

메뉴 표시줄과 하위 메뉴를 넣을 인터페이스를 만들겠습니다. 메뉴 표시줄에는 <gui>파일</gui>, <gui>편집</gui>, <gui>선택</gui> and <gui>도움말</gui> 하위 메뉴를 넣겠습니다. 다음 XML 코드를 파일에 넣겠습니다:

Packit 1470ea
    <?xml version="1.0" encoding="UTF-8"?>
Packit 1470ea
<interface>
Packit 1470ea
  <menu id="menubar">
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">File</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Edit</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Choices</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Help</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
  </menu>
Packit 1470ea
</interface>
Packit 1470ea
Packit 1470ea
     </item>
Packit 1470ea
     <item>

이제 .vala 파일을 만들고 방금 추가한 <file>menubar.ui</file> 파일을 GtkBuilder를 사용하여 임포팅하겠습니다.

</item>
Packit 1470ea
   </steps>
Packit 1470ea
   </section>
Packit 1470ea
   <section id="basis"> <title>GtkBuilder로 창에 MenuBar 추가하기</title>
Packit 1470ea
public class MyWindow : Gtk.ApplicationWindow {
Packit 1470ea
	internal MyWindow (MyApplication app) {
Packit 1470ea
		Object (application: app, title: "MenuBar Example");
Packit 1470ea
		this.set_default_size (200, 200);
Packit 1470ea
	}
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
class MyApplication: Gtk.Application {
Packit 1470ea
	protected override void activate () {
Packit 1470ea
		new MyWindow (this).show ();
Packit 1470ea
	}
Packit 1470ea
	protected override void startup () {
Packit 1470ea
		base.startup ();
Packit 1470ea
Packit 1470ea
		/* Setup menubar. */
Packit 1470ea
		/* Get the UI file. */
Packit 1470ea
		var builder = new Gtk.Builder ();
Packit 1470ea
		try {
Packit 1470ea
			builder.add_from_file ("menubar_basis.ui");
Packit 1470ea
		/* Handle the exception. */
Packit 1470ea
		} catch (Error e) {
Packit 1470ea
			error ("Unable to load file: %s", e.message);
Packit 1470ea
		}
Packit 1470ea
Packit 1470ea
		/* Get the menubar from the builder. */
Packit 1470ea
		this.menubar = builder.get_object ("menubar") as MenuModel;
Packit 1470ea
	}
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
/* main creates and runs the application. */
Packit 1470ea
public int main (string[] args) {
Packit 1470ea
	return new MyApplication ().run (args);
Packit 1470ea
}
Packit 1470ea
Packit 1470ea

이제 vala 파일을 컴파일하고 실행하십시오. 프로그램은 페이지 상단의 사진과 같은 모습이 나타납니다.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
Packit 1470ea
Packit 1470ea
<section id="xml2"> <title>항목을 메뉴에 추가하기</title>
Packit 1470ea

<gui>파일</gui> 메뉴에 <gui>새로 만들기</gui>와 <gui>끝내기</gui> 메뉴 항목 2개 추가로 시작하겠습니다. 파일 하위 메뉴에 이 항목과 section을 추가하면 됩니다. <file>menubar.ui</file> 파일은 다음과 같이 나타나야 합니다(6번째 줄부터 13번째 줄까지 새로 추가한 섹션 구성이 들어갑니다):

Packit 1470ea
      
Packit 1470ea
<?xml version="1.0" encoding="UTF-8"?>
Packit 1470ea
<interface>
Packit 1470ea
  <menu id="menubar">
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">File</attribute>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">New</attribute>
Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name ="label">Quit</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Edit</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Choices</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Help</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
  </menu>
Packit 1470ea
</interface>
Packit 1470ea
Packit 1470ea

이 방식을 따라 편집 하위 메뉴로 복사붙여넣기 를 추가하고, Help 하위 메뉴에 정보를 추가할 수 있습니다. 다음 따라하기 지침을 진행할 때까지 <link xref="menubar.vala#choices">선택 하위 메뉴</link>로의 항목 추가를 보류하겠습니다.

Packit 1470ea
Packit 1470ea
<note style="tip">

UI 파일만 바꾸었다면 vala 프로그램을 다시 컴파일할 필요는 없습니다. 그냥 이전에 컴파일한 프로그램을 실행만 하시면 사용자 인터페이스를 반영합니다.

</note>
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="actions"><title>설정 동작</title>
Packit 1470ea

세 단계로 이루어집니다.

Packit 1470ea
<steps>
Packit 1470ea
  <item>

우선 MyApplication 클래스에 ActionEntry 배열을 만들겠습니다. ActionEntry 구성은 다음과 같습니다:

Packit 1470ea
  <list>
Packit 1470ea
    <item>

"동작 이름"(필수)

</item>
Packit 1470ea
    <item>

동작의 "activate" 시그널에 연결하는 콜백 함수(가능하다면)

</item>
Packit 1470ea
    <item>

동작에 대한 활성화 함수로 전달할 매개변수 형식(가능하다면)

</item>
Packit 1470ea
    <item>

동작의 초기 상태(가능하다면)

</item>
Packit 1470ea
    <item>

"change-state" 시그널에 연결할 콜백 함수(가능하다면)

</item>
Packit 1470ea
  </list>
Packit 1470ea
   
Packit 1470ea
const ActionEntry[] actions = {
Packit 1470ea
    { "new", new_cb }, // {"action name", callback_function}
Packit 1470ea
    { "quit", quit_cb }
Packit 1470ea
};
Packit 1470ea
Packit 1470ea
  </item>
Packit 1470ea
  <item>

두번째로 연결할 동작의 콜백 함수를 만들겠습니다.

Packit 1470ea
  
Packit 1470ea
void new_cb (SimpleAction action, Variant? parameter) {
Packit 1470ea
    print ("You clicked \"New\"\n");
Packit 1470ea
    //new MyWindow (this).show ();
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
void quit_cb (SimpleAction action, Variant? parameter) {
Packit 1470ea
    print ("You clicked \"Quit\"\n");
Packit 1470ea
    this.quit ();
Packit 1470ea
}
Packit 1470ea
 </item>
Packit 1470ea
  <item>

마지막으로, "action" 속성을 추가하여 XML 파일의 동작에 메뉴 항목을 연결하겠습니다:

Packit 1470ea
    
Packit 1470ea
<item>
Packit 1470ea
  <attribute name="label">New</attribute>
Packit 1470ea
  <attribute name="action">app.new</attribute>
Packit 1470ea
</item>
Packit 1470ea
<item>
Packit 1470ea
  <attribute name="label">Quit</attribute>
Packit 1470ea
  <attribute name="action">app.quit</attribute>
Packit 1470ea
</item>
Packit 1470ea
 </item>
Packit 1470ea
</steps>
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
Packit 1470ea
<section id="choices"><title>상태가 들어간 선택 하위 메뉴 및 항목</title>
Packit 1470ea
  <media type="image" mime="image/png" src="media/menubar_choices.png"/>
Packit 1470ea
  

30줄부터 80줄 까지 <link xref="menubar.vala#xml-code"/>가 들어간 부분에서 <gui>선택</gui> 메뉴 사용자 인터페이스를 만드는 XML 코드를 시연하고 있습니다.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="win-app"><title>동작: 프로그램 또는 창?</title>
Packit 1470ea
  

위에서 MyApplication 클래스의 "new"와 "open" 동작을 만들었습니다. 프로그램 자체를 다루는 "quit" 같은 동작은 비슷하게 만듭니다.

Packit 1470ea
Packit 1470ea
  

"copy"나 "paste" 같은 창을 다루는 일부 동작은, 프로그램에 넣지 않습니다. 창 동작은 창 클래스 부분에 만들어야합니다.

Packit 1470ea
Packit 1470ea
  

완전한 예제 파일에는 프로그램 동작과 창 프로그램이 들어있습니다. 창 동작은 보통 <link xref="gmenu.vala">프로그램 메뉴</link>에도 들어있습니다. 창 동작을 프로그램 메뉴에 넣는건 별로 좋은 습관이 아닙니다. 시연 목적으로 "New"와 "Open" 항목이 들어간 프로그램 메뉴를 만드는 UI 파일에 들어간 XML의 내용을 따르며, 동일한 이름을 지닌 메뉴 표시줄 항목 처럼 동일한 동작을 실행합니다.

Packit 1470ea
Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
  <section id="xml-code"><title>이 예제의 완전한 XML UI 파일</title>
Packit 1470ea
<?xml version="1.0" encoding="UTF-8"?>
Packit 1470ea
<interface>
Packit 1470ea
  <menu id="menubar">
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">File</attribute>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">New</attribute>
Packit 1470ea
          <attribute name="action">app.new</attribute>
Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">Quit</attribute>
Packit 1470ea
          <attribute name="action">app.quit</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Edit</attribute>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">Copy</attribute>
Packit 1470ea
          <attribute name="action">win.copy</attribute>
Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">Paste</attribute>
Packit 1470ea
          <attribute name="action">win.paste</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Choices</attribute>
Packit 1470ea
      <submenu>
Packit 1470ea
        <attribute name="label">Shapes</attribute>
Packit 1470ea
          <section>
Packit 1470ea
            <item>
Packit 1470ea
              <attribute name="label">Line</attribute>
Packit 1470ea
              <attribute name="action">win.shape</attribute>
Packit 1470ea
              <attribute name="target">line</attribute>
Packit 1470ea
            </item>
Packit 1470ea
            <item>
Packit 1470ea
              <attribute name="label">Triangle</attribute>
Packit 1470ea
              <attribute name="action">win.shape</attribute>
Packit 1470ea
              <attribute name="target">triangle</attribute>
Packit 1470ea
            </item>
Packit 1470ea
            <item>
Packit 1470ea
              <attribute name="label">Square</attribute>
Packit 1470ea
              <attribute name="action">win.shape</attribute>
Packit 1470ea
              <attribute name="target">square</attribute>
Packit 1470ea
            </item>
Packit 1470ea
            <item>
Packit 1470ea
              <attribute name="label">Polygon</attribute>
Packit 1470ea
              <attribute name="action">win.shape</attribute>
Packit 1470ea
              <attribute name="target">polygon</attribute>
Packit 1470ea
            </item>
Packit 1470ea
            <item>
Packit 1470ea
              <attribute name="label">Circle</attribute>
Packit 1470ea
              <attribute name="action">win.shape</attribute>
Packit 1470ea
              <attribute name="target">circle</attribute>
Packit 1470ea
            </item>
Packit 1470ea
          </section>
Packit 1470ea
      </submenu>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">On</attribute>
Packit 1470ea
          <attribute name="action">app.state</attribute>
Packit 1470ea
          <attribute name="target">on</attribute>
Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">Off</attribute>
Packit 1470ea
          <attribute name="action">app.state</attribute>
Packit 1470ea
          <attribute name="target">off</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">Awesome</attribute>
Packit 1470ea
          <attribute name="action">app.awesome</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Help</attribute>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">About</attribute>
Packit 1470ea
          <attribute name="action">win.about</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
    </submenu>
Packit 1470ea
  </menu>
Packit 1470ea
  <menu id="appmenu">
Packit 1470ea
    <section>
Packit 1470ea
      <item>
Packit 1470ea
        <attribute name="label">New</attribute>
Packit 1470ea
        <attribute name="action">app.new</attribute>
Packit 1470ea
      </item>
Packit 1470ea
      <item>
Packit 1470ea
        <attribute name="label">Quit</attribute>
Packit 1470ea
        <attribute name="action">app.quit</attribute>
Packit 1470ea
      </item>
Packit 1470ea
    </section>
Packit 1470ea
  </menu>
Packit 1470ea
</interface>
Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
  <section id="vala-code"><title>이 예제에 대한 완전한 Vala 파일입니다</title>
Packit 1470ea
public class MyWindow : Gtk.ApplicationWindow {
Packit 1470ea
Packit 1470ea
	/* Callback functions for the window actions. */
Packit 1470ea
	void copy_cb (SimpleAction action, Variant? parameter) {
Packit 1470ea
		print ("\"Copy\" activated\n");
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	void paste_cb (SimpleAction action, Variant? parameter) {
Packit 1470ea
		print ("\"Paste\" activated\n");
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	void shape_cb (SimpleAction action, Variant? parameter) {
Packit 1470ea
		print ("shape is set to %s\n", parameter.get_string(null));
Packit 1470ea
		action.set_state (parameter);
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	/* Create the window actions. */
Packit 1470ea
	const ActionEntry[] actions = {
Packit 1470ea
		/*{ "action name", cb to connect to "activate" signal, parameter type,
Packit 1470ea
		     initial state, cb to connect to "change-state" signal } */
Packit 1470ea
		{ "copy", copy_cb },
Packit 1470ea
		{ "paste", paste_cb },
Packit 1470ea
		{ "shape", shape_cb, "s", "'line'"}
Packit 1470ea
	};
Packit 1470ea
Packit 1470ea
	internal MyWindow (MyApplication app) {
Packit 1470ea
		Object (application: app, title: "MenuBar Example");
Packit 1470ea
		this.set_default_size (200, 200);
Packit 1470ea
Packit 1470ea
		/* Setup window actions. */
Packit 1470ea
		this.add_action_entries (actions, this);
Packit 1470ea
	}
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
class MyApplication: Gtk.Application {
Packit 1470ea
	protected override void activate () {
Packit 1470ea
		new MyWindow (this).show ();
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	/* Callback functions for the application actions. */
Packit 1470ea
	void new_cb (SimpleAction action, Variant? parameter) {
Packit 1470ea
		//new MyWindow (this).show ();
Packit 1470ea
		print ("You clicked \"New\"\n");
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	void quit_cb (SimpleAction action, Variant? parameter) {
Packit 1470ea
		print ("You clicked \"Quit\"\n");
Packit 1470ea
		this.quit ();
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	void awesome_cb (SimpleAction action, Variant? parameter) {
Packit 1470ea
		var active = action.get_state ().get_boolean ();
Packit 1470ea
		action.set_state (new Variant.boolean (!active));
Packit 1470ea
		if (active)
Packit 1470ea
			print ("You unchecked \"Awesome\"\n");
Packit 1470ea
		else
Packit 1470ea
			print ("You checked \"Awesome\"\n");
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	void state_cb (SimpleAction action, Variant? parameter) {
Packit 1470ea
		print ("state is set to %s\n", parameter.get_string(null));
Packit 1470ea
		action.set_state (parameter);
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	/* Create the application actions. */
Packit 1470ea
	const ActionEntry[] actions = {
Packit 1470ea
		{ "new", new_cb },
Packit 1470ea
		{ "quit", quit_cb },
Packit 1470ea
		{ "awesome", awesome_cb, null, "false" },
Packit 1470ea
		{ "state", state_cb, "s", "'off'" }
Packit 1470ea
	};
Packit 1470ea
Packit 1470ea
	protected override void startup () {
Packit 1470ea
		base.startup ();
Packit 1470ea
Packit 1470ea
		/* Setup application actions. */
Packit 1470ea
		this.add_action_entries (actions, this);
Packit 1470ea
Packit 1470ea
		/* Setup menubar and app_menu. */
Packit 1470ea
		/* Get the UI file. */
Packit 1470ea
		var builder = new Gtk.Builder ();
Packit 1470ea
		try {
Packit 1470ea
			builder.add_from_file ("menubar.ui");
Packit 1470ea
		} catch (Error e) {
Packit 1470ea
			error ("Unable to load file: %s", e.message);
Packit 1470ea
		}
Packit 1470ea
Packit 1470ea
		/* Get the menubar from the builder. */
Packit 1470ea
		this.menubar = builder.get_object ("menubar") as MenuModel;
Packit 1470ea
Packit 1470ea
		/* Get the app_menu from the builder. */
Packit 1470ea
		this.app_menu = builder.get_object ("appmenu") as MenuModel;
Packit 1470ea
	}
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
/* main creates and runs the application. */
Packit 1470ea
public int main (string[] args) {
Packit 1470ea
	return new MyApplication ().run (args);
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="mnemonics"><title>접근 키</title>
Packit 1470ea
    

레이블에는 접근 키가 들어갈 수 있습니다. 접근 키는 키보드로 탐색할 때 활용하는 레이블에 밑줄이 들어간 문자입니다. 접근 키는 접근키 문자 앞에 밑줄을 넣어 만듭니다. 예를 들어 menubar.ui 레이블 속성에서 "File" 대신 "_File"을 넣습니다.

Packit 1470ea
   

접근키는 <key>Alt</key> 키를 누르면 나타납니다. <keyseq><key>Alt</key><key>F</key></keyseq> 키를 누르면 <gui>파일</gui> 메뉴가 나타납니다.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="accelerators"><title>가속키</title>
Packit 1470ea
    

가속키는 UI 정의에 분명하게 추가할 수 있습니다. 예를 들어 일반적으로 프로그램을 끝내는 동작은 <keyseq><key>Ctrl</key><key>Q</key></keyseq> 키를 눌러 진행할 수 있고, 또는 파일을 저장하는 동작은 <keyseq><key>Ctrl</key><key>S</key></keyseq> 키를 눌러 진행할 수 있습니다. UI 정의에 가속키를 추가하려면 간단하게 항목의 "accel" 속성 값을 추가하면 됩니다.

Packit 1470ea

<attribute name="accel">&lt;Primary&gt;q</attribute> 구문은 Quit 레이블 항목에 추가할 <keyseq><key>Ctrl</key><key>Q</key></keyseq> 키 조합 입력을 만듭니다. 여기서, "Primary"는 PC의 <key>Ctrl</key>키 또는 맥의 <key>⌘</key> 키를 따릅니다.

Packit 1470ea
Packit 1470ea
  
Packit 1470ea
<item>
Packit 1470ea
  <attribute name="label">_Quit</attribute>
Packit 1470ea
  <attribute name="action">app.quit</attribute>
Packit 1470ea
  <attribute name="accel">&lt;Primary&gt;q</attribute>
Packit 1470ea
</item>
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="translatable"><title>번역할 문자열</title>
Packit 1470ea
   

그놈 프로그램은 <link href="http://l10n.gnome.org/languages/">다양한 언어</link>로 번역하기에 프로그램 문자열을 번역할 수 있게 만들어 두는게 중요합니다. 레이블을 번역할 수 있게 하려면 간단히 translatable="yes"를 설정하십시오:

Packit 1470ea
   

<attribute name="label" translatable="yes">Quit</attribute>

Packit 1470ea
  </section>
Packit 1470ea
  <section id="documentation"><title>관련 API 문서</title>
Packit 1470ea

이 예제는 다음 참고자료가 필요합니다:

Packit 1470ea
<list>
Packit 1470ea
  <item>

<link href="http://valadoc.org/gio-2.0/GLib.ActionEntry.html">Glib.ActionEntry</link>

</item>
Packit 1470ea
  <item>

<link href="http://valadoc.org/gio-2.0/Gtk.Builder.html">Gtk.Builder</link>

</item>
Packit 1470ea
</list>
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
Packit 1470ea
<section id="exercises"><title>연습 예제</title>
Packit 1470ea
  <xi:include href="exercises/menubar.vala.exercises"><xi:fallback/></xi:include>
Packit 1470ea
</section>
Packit 1470ea
</page>