diff --git a/Gemfile.lock b/Gemfile.lock index 4b8a9dc12c..0e2a4acad6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -29,7 +29,7 @@ GEM open4 rake mini_portile (0.5.0) - nokogiri (1.6.0) + nokogiri (1.5.3) mini_portile (~> 0.5.0) open4 (1.3.0) posix-spawn (0.3.6) diff --git a/_config.yml b/_config.yml index 53d7afa4e3..e4d41574cd 100644 --- a/_config.yml +++ b/_config.yml @@ -239,6 +239,21 @@ locales: # url: /tr/security - text: Ruby Hakkında url: /tr/about + vi: + - text: Downloads + url: /vi/downloads + - text: Tài liệu + url: /en/documentation + - text: Thư viện + url: /vi/libraries + - text: Cộng đồng + url: /en/community + - text: Tin tức + url: /en/news + - text: Bảo mật + url: /vi/security + - text: Về Ruby + url: /vi/about zh_cn: - text: 下载 url: /zh_cn/downloads @@ -299,6 +314,8 @@ locales: text: Procurar tr: text: Ara + vi: + text: Tìm zh_cn: text: 搜索 zh_tw: @@ -317,6 +334,7 @@ locales: pl: "Ruby - Najlepszy Przyjaciel Programisty" pt: "Ruby - O melhor amigo do programador" tr: "Ruby - A Programmer's Best Friend" + vi: "Ruby - Người bạn tri kỉ của lập trình viên" zh_cn: "Ruby - 程序员最要好的朋友" zh_tw: "Ruby - A Programmer's Best Friend" @@ -331,6 +349,7 @@ locales: pl: [Styczeń, Luty, Marzec, Kwiecień, Maj, Czerwiec, Lipiec, Sierpień, Wrzesień, Październik, Listopad, Grudzień] pt: [Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro] tr: [Ocak, Şubat, Mart, Nisan, Mayıs, Haziran, Temmuz, Ağustos, Eylül, Ekim, Kasım, Aralık] + vi: [Tháng một, Tháng hai, Tháng ba, Tháng tư, Tháng năm, Tháng sáu, Tháng bảy, Tháng tám, Tháng chín, Tháng mười, Tháng mười một, Tháng mười hai] posted_by: bg: "Публикувана от AUTHOR на %Y-%m-%d" @@ -345,6 +364,7 @@ locales: pl: "Zamieszczone przez AUTHOR %Y-%m-%d" pt: "Escrito por AUTHOR em %Y-%m-%d" tr: "AUTHOR tarafından %Y-%m-%d tarihinde gönderildi" + vi: "Đăng bởi AUTHOR vào %-d %b %Y" zh_cn: "由 AUTHOR 发表于 %Y-%m-%d" # zh_tw: @@ -362,6 +382,7 @@ locales: pt: "Traduzido por" tr: "Çeviri:" zh_cn: "翻译:" + vi: "Dịch bởi" # zh_tw: feed: @@ -413,6 +434,10 @@ locales: title: Ruby Son Haberler description: Ruby Son Haberler lang_code: tr + vi: + title: Tin tức Ruby + description: Những tin mới nhất từ ruby-lang.org. + lang_code: vi zh_cn: title: Ruby 新闻更新 description: 来自 ruby-lang.org 的最新文章。 @@ -567,6 +592,18 @@ locales: monthly_archives: Archives by Month yearly_archive_link: "%Y Archives" monthly_archive_link: "%B %Y" + vi: + other_news: Tin khác + more_news: Thêm Tin... + continue: Đọc tiếp... + back_to_year: "Trở về %Y Lưu trữ" + recent_news: Tin mới nhất + yearly_archive_title: "%Y " + monthly_archive_title: "%B %Y Lưu trữ" + yearly_archives: Lưu trữ bằng Năm + monthly_archives: Lưu trữ bằng Tháng + yearly_archive_link: "%Y Lưu trữ" + monthly_archive_link: "%B %Y" zh_cn: other_news: 其它新闻 more_news: 更多新闻... @@ -1361,6 +1398,69 @@ locales: recent_news: text: Son Haberler (RSS) url: /tr/feeds/news.rss + vi: + get_started: + text: Nhập môn, quá dễ! + try_ruby: + text: Thử Ruby! (trong trình duyệt) + <<: *try_ruby + quickstart: + text: Ruby trong 20 phút + url: /vi/documentation/quickstart/ + ruby_from_other_languages: + text: Ruby từ những ngôn ngữ khác + url: /vi/documentation/ruby-from-other-languages/ + explore: + text: Khám phá một thề giới mới… + documentation: + text: Tài liệu + url: /vi/documentation/ + books: + text: Sách + <<: *books + libraries: + text: Thư viện + url: /vi/libraries/ + success_stories: + text: Những câu chuyện thành công + url: /vi/documentation/success-stories/ + participate: + text: Tham gia vào một cộng đồng lớn mạnh và thân thiện. + mailing_lists: + text: Mailing Lists + url: /vi/community/mailing-lists/ + description: | + Trao đổi về Ruby với các lập trình viên trên thế giới + user_groups: + text: Nhóm người dùng + url: /vi/community/user-groups/ + description: | + Làm quen với những Rubyist trong khu vực của bạn. + weblogs: + text: Weblogs + url: /vi/community/weblogs/ + description: | + Đọc về những gì đang xảy ra với cộng đồng Ruby. + ruby_core: + text: Lõi Ruby + url: /vi/community/ruby-core/ + description: | + Giúp hoàn thiện Ruby. + issue_tracking: + text: Thông báo lỗi + url: https://bugs.ruby-lang.org/ + description: | + Báo hoặc giúp xử lý các lỗi trong Ruby. + top_ruby_projects: + text: Những dự án Ruby hàng đầu + more: + text: Nhiều hơn nữa… + url: /vi/libraries/top-projects/ + syndicate: + text: Syndicate + recent_news: + text: Tin mới (RSS) + url: /vi/feeds/news.rss zh_tw: get_started: text: 上手入門, 一點都不難! @@ -1597,6 +1697,15 @@ locales: # subscribe: Subscribe # unsubscribe: Unsubscribe # submit: Submit Form + vi: + list: Mailing List + first_name: Tên + last_name: Họ + email: Email + action: Hành động + subscribe: Đăng kí + unsubscribe: Hủy đăng kí + submit: Nộp đơn zh_cn: list: 邮件列表 first_name: 姓 @@ -1683,6 +1792,12 @@ locales: Ruby topluluğunun üyeleri tarafından gururla sürdürülmektedir. Herhangi bir soru ya da öneriniz için lütfen site yöneticimiz ile irtibata geçin. + vi: | + Website này được tạo ra với Ruby sử dụng Jekyll. + Trang được bảo trì bởi các thành viên của cộng đồng Ruby. + Xin đóng góp trên GitHub + hay liên lạc với webmaster (bằng tiếng Anh) + nếu có câu hỏi hoặc ý kiến phản hồi về trang này. zh_cn: | 本网站使用 Ruby 工具 Jekyll 制作,并有幸由来自 Ruby 社区的会员共同维护。 请贡献代码至 GitHub。 diff --git a/_includes/footer.html b/_includes/footer.html index 8fd6e170a1..d66f5b1568 100644 --- a/_includes/footer.html +++ b/_includes/footer.html @@ -5,6 +5,7 @@ English, Spanish, French, +Vietnamese, Bahasa Indonesia, Italian, Japanese, diff --git a/index.html b/index.html index 1b01e0d102..1d77f6e5b9 100644 --- a/index.html +++ b/index.html @@ -17,6 +17,7 @@ "pl": "pl", "pt": "pt", "tr": "tr", + "vi": "vi", "zh-CN": "zh_cn", "zh-TW": "zh_tw" }; diff --git a/vi/about/index.md b/vi/about/index.md new file mode 100644 index 0000000000..44b00dd88e --- /dev/null +++ b/vi/about/index.md @@ -0,0 +1,202 @@ +--- +layout: page +title: "Về Ruby" +lang: vi +--- + +Bạn tự hỏi tại sao Ruby quá phổ dụng? Cá fan gọi nó một ngôn ngữ tao nhã và tinh tế +nhưng lại rất lợi hại và thực dụng. Điều gì khiến họ nghĩ vậy? + +### Lý tưởng của cha đẻ của Ruby + +Ruby là một ngôn ngữ của sự cân đối. Nhà phát minh của nó [Yukihiro “Matz” +Matsumoto][1] kết hợp các đặc điểm hay từ các ngôn ngữ khác (Perl, Smalltalk, +Eiffel, Ada, và Lisp) để tạo ra một ngôn ngữ cân bằng giữa +lập trình hướng chức năng (functional programming) và lập trình hướng thủ tục (imperative programming). + +Ông khẳng định ông "muốn tạo ra một Ruby gần gũi và tinh tế". + +Dựa trên nền tảng này, ông thêm: + +> Ruby nhìn phía ngoài thì đơn giản nhưng rất phức tạp bên trong, +> giống như cơ thể con người vậy [1](#fn1). + +### Về sự phát triển của Ruby + +Sau khi được phát hành ra công chúng năm 1995, Ruby đã thu hút nhiều lập trình +viên. Vào 2006, Ruby đã được chấp nhận ở mức phổ cập, điều này được chứng minh +qua số lượng lớn các nhóm người dùng hoạt động tích cực ở các thành phố trên thế giới +và cả các hội nghị liên quan Ruby luôn bán hết vé. + +![Graph courtesy of +Gmane.](http://gmane.org/plot-rate.php?group=gmane.comp.lang.ruby.general&width=320&height=160&title=Ruby-Talk+Activity +"Graph courtesy of Gmane."){: style="padding-left:8px;"} +{: style="float:right"} + +Ruby-Talk là [mailing list](/en/community/mailing-lists/) chính để thảo luận về +ngôn ngữ Ruby. Theo thống kê trung bình có trên 200 bài mỗi ngày trong năm 2006. +Con số này có giảm sút trong những năm gần đây vì xu hướng người dùng gửi bài +vào những nhóm nhỏ riêng thay vì gửi vào đây. + +Chỉ số [TIOBE index][6], đo đạt sự phát triển của các ngôn ngữ lập trình, xếp +Ruby hạng 9 nhờ vào số lượng lớn các phần mềm áp dụng ngôn ngữ này, tiêu biểu +là framework viết web tên Ruby on Rails [2](#fn2). + +Ruby hoàn toàn [miễn phí]({{ site.license.url }}). Không đòi hỏi phí bản +quyển, và không cấm đoán chuyện sử dụng, sao chép, sửa đổi và phân phối. + +### Mọi thứ là đối tượng + +Khi bắt đầu viết Matz tham khảo những ngôn ngữ khác để tìm những cú pháp lý +tưởng cho ngôn ngữ mới của ông. Ông nói "Tôi muốn tìm một ngôn ngữ scripting lợi hại +hơn Perl, và hướng đối tượng hơn Python[3](#fn3).” + +Trong Ruby, mọi thứ đều là đối tượng (object). Tất cả thông tin và mã đều có thể gán +thuộc tính (properties) và hành động (actions). Lập trình hướng đối tượng (Object-Oriented Programming) +gọi thuộc tính với tên *biến địa phương (instance variables)* và gọi hành động là *hàm (method)*. +Cách tiếp cận thuần hướng đối tượng có thể được thấy rõ ở những đoạn mã áp dụng một +hành động lên một con số. + +{% highlight ruby %} +5.times { print "Tôi *yêu* Ruby!" } +{% endhighlight %} + +Ở nhiều ngôn ngữ khác, số và một số kiểu mẫu nguyên thủy (primitive types) không phải là +đối tượng. Ruby chịu ảnh hưởng của ngôn ngữ Smalltalk qua việc gán hàm và biến đối tượng +cho tất cả các kiểu mẫu (type). Điều này làm cho Ruby dể dùng hơn vì tất cả nguyên +tắc về đối tượng được áp dụng thống nhất. + +### Tính linh hoạt của Ruby + +Ruby được xem là một ngôn ngữ linh hoạt, vì nó cho phép người dùng thay đổi +các phần tử của nó. Các phần tử tất yếu của Ruby có thể được xoá, định nghĩa lại tuy theo +ý người dùng. Các phần hiện hữu có thể thêm vào. Ruby không cố gắng kìm chể lập +trình viên. + +Lấy một ví dụ, phép cộng (toán học) có thể được thực hiện với toán tử (`+`). Nhưng nếu +bạn muốn diễn đạt với từ `cộng`, bạn có thể thêm một hàm vào lớp `Numeric` +của Ruby: + +{% highlight ruby %} +class Numeric + def cộng(x) + self.+(x) + end +end + +y = 5.cộng(6) +# y sẽ là 11 +{% endhighlight %} + +Các toán tử của Ruby chỉ là cách viết dễ đọc của các hàm. Bạn có thể định nghĩa lại chúng nếu cần. + +### Block, một cách đặc trưng để diễn đạt + +Block trong Ruby là một cách diễn đạt rất linh động. Lập trình viên +có thể kèm một closure vào bất cứ hàm nào, để miêu tả cách hàm đấy chạy ra sao. +Closure này được gọi là *block* và là lựa chọn phổ dụng cho các lập trình viên +mới nhập môn từ các ngôn ngữ hướng thủ tục khác (imperative programmming) +khác như PHP hay Visual Basic. + +Block được tạo ra với cảm hứng từ các ngôn ngữ lập trình hướng chức năng (functional programming). +Matz nói, trong Ruby, tôi muốn tạo ra loại closures theo phong cách Lisp[4](#fn4).” + +{% highlight ruby %} +search_engines = + %w[Google Yahoo MSN].map do |engine| + "http://www." + engine.downcase + ".com" + end +{% endhighlight %} + +Ở đoạn mã trên, block được miêu tả bên trong hàm dựng `do ... end`. +Hàm `map` áp dụng block tới một danh sách các từ. Nhiều hàm khác trong Ruby chừa +ra chỗ trống để lập trình viên điền vào với các thông tin hàm này nên +làm gì. + +### Ruby và Mixin + +Mixin là thuật ngữ chỉ cách một ngôn ngữ đính kèm phần tử (vd hàm) vào một tập hợp (vd lớp). + +Không như những ngôn ngữ hướng đối tượng khác, Ruby chỉ hỗ trợ kế thừa đơn (single inheritance), +và thiết kế này có **chủ đích**. Tuy thế, Ruby biết các khái niệm về module (còn +được gọi là Categories trong Objective-C). Module là tổ hợp của nhiều hàm. + +Lớp (class) có thể mixin một module và tiếp nhận tất cả hàm của module đó. Ví dụ, +bất kì lớp nào triển khai hàm `each` đều có thể mixin module `Enumerable`. Module +này có những hàm sử dụng `each` để chạy vòng lặp. + +{% highlight ruby %} +class MyArray + include Enumerable +end +{% endhighlight %} + +Nói chung thì đa số Rubyist xem thiết kế này rõ ràng hơn đa kê thừa (multiple +inheritance) vốn dĩ phức tạp và có nhiều hạn chế. + +### Diện mạo của Ruby + +Trong khi Ruby rất ít dùng dấu và thay vào đó dùng từ tiếng Anh, có một vài +dấu được sử dụng để miêu tả Ruby. Ruby không có cần cú pháp để khai báo biến. +Nó sử dụng cách đặt tên đơn giản để diễn tả mục tiêu (scope) của biến. + +* `var` là biến địa phương (local variable). +* `@var` là biến đối tượng (instance variable). +* `$var` là biến toàn cục (global variable). + +Các dấu trên tăng khả năng đọc bằng cách giúp lập trình viên xác định vai trò +của từng biến. Bên cạnh đó, bạn không nhất thiết chèn `self.` vào trước các phần tử +đối tượng. + +### Nâng cao + +Ruby có rất nhiều chức năng khác, trong số đó bao gồm: + +* Ruby có chức năng xử lý biệt lệ (exception) giống như Java hay Python, giúp +dễ dàng đối phó với lỗi. +^ + +* Ruby có một bộ thu gom rác kiểu đánh dấu-và-dọn dẹp (mark-and-sweep garbage collector) +cho toàn bộ đối tượng Ruby. Không cần phải bảo trì các biến đếm liên quan (reference count) +ở trong các thư viện mở rộng. Như Matz nói, "Cái này tốt cho sức khoẻ của bạn hơn" +^ + +* Viết mở rộng kiểu C (C extension) với Ruby dễ hơn Perl hay Python. Ruby có một +thư viện API để gọi Ruby từ C. Cái này bao gồm các hàm gọi tích hợp Ruby vào +phần mềm để sử dụng như là một ngôn ngữ scripting. Một giao diện SWIG cũng sẵn có +để sử dụng. +^ + +* Ruby có thể đọc các thư viện mở rộng (extension library) kiểu động nếu OS cho phép. +^ + +* Ruby có threading độc lập với cả hệ điều hành. Thế nên, tất cả nền tảng khác +mà Ruby chạy trên sẽ có multithreading bất kể hệ đấy có hỗ trợ hay không. Ngay +cả MSDOS còn hỗ trợ! +^ + +* Ruby rất dễ port: nó được phát triển chủ yếu cho GNU/Linux, nhưng có làm việc +với các hệ UNIX khác, như Mac OS X, Windows 95/98/Me/NT/2000/XP, DOS, BeOS, OS/2, vân vân. + +#### Tham khảo + +1 Matz, nói về Ruby-Talk mailing list, [12/05/2000][2]. +{: #fn1} + +2 Xem trang chủ [Ruby on Rails][3] để biết thêm +{: #fn2} + +3 Matz, trong [Phỏng vấn cha đẻ của Ruby][4], 29/11/2001. +{: #fn3} + +4 Matz, trong [Blocks và Closures trong Ruby][5], 12/12/2003. +{: #fn4} + + + +[1]: http://www.rubyist.net/~matz/ +[2]: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/2773 +[3]: http://rubyonrails.org/ +[4]: http://www.linuxdevcenter.com/pub/a/linux/2001/11/29/ruby.html +[5]: http://www.artima.com/intv/closures2.html +[6]: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html diff --git a/vi/downloads/index.md b/vi/downloads/index.md new file mode 100644 index 0000000000..57084429d9 --- /dev/null +++ b/vi/downloads/index.md @@ -0,0 +1,218 @@ +--- +layout: page +title: "Download Ruby" +lang: vi +--- + +Bạn có thể lấy phân phối Ruby mới nhất ở đây. +Bản ổn định hiện thời là {{ site.downloads.stable.version }}. +Xin hãy nhớ đọc [Giấy phép Ruby]({{ site.license.url }}). + +### Ba cách để cài Ruby + +Bạn có thể lấy một bản sao chép của Ruby với nhiều cách, và mỗi người khác nhau +chọn một trong ba cách sau vì nhiều li do khác nhau. Mỗi cách sẽ có một phân mục +ở dưới, nhưng đây là hướng dẫn tổng quan: + +* **Biên dịch từ nguồn** là cách chuẩn mà phần mểm được chuyển giao trong nhiều + năm qua. Đây là cách quen thuộc nhất cho phần lớn các nhà phát triển phần mềm. +* Một vài **công cụ của bên thứ ba** để giúp cài đặt Ruby. Đây thường là + cách đơn giản dành cho cả những người ít kinh nghiệm và những người dùng cao cấp. +* Có một vài **hệ thống quản lí gói** hỗ trợ Ruby. Đây sẽ là cách + thân thuộc nhất cho người nào sử dụng một hệ điều hành để làm mọi thứ, và + họ thích gắn bó với những kiểu chuẩn cá biệt này. + +Cuối cùng nếu bạn muốn chạy nhiều phiên bản của Ruby trên cùng máy, xin hãy +xem mục **công cụ bên thứ ba** và dùng RVM. Nó là cách dễ nhất để làm được +điều này, trừ khi bạn biết chính xác ban đang làm gì. + +### Biên dịch Ruby từ mã nguồn + +Cài từ mã nguồn là một giải pháp tuyệt vời khi bạn nắm vững các kiến thức hiệu chỉnh +môi trường hệ điều hành bạn đang dùng. Nó cũng là giải pháp nếu không có gói đóng +sẵn cho hạ tầng của bạn. + +Nếu bạn gặp vấn đề biên dịch Ruby, bạn nên cân nhắc sử dụng một trong những công +cụ bên thứ ba trong phân mục tiếp theo. + +* [Ruby {{ site.downloads.stable.version }}][1] + (md5: {{ site.downloads.stable.md5.gz }}) Bản ổn định +* [Ruby {{ site.downloads.previous.version }}][2] + (md5: {{ site.downloads.previous.md5.gz }}) Bản trước đó +* [Snapshot Ổn định][3] Đây là một tarball snapshot mới nhất của + nhánh Ổn định (ruby\_2\_0\_0). +* [Snapshot Mỗi đêm][4] Đây là một tarball snapshot của mọi thứ có trong + SVN mỗi đêm. Nó có thể có lỗi và một số vấn đề khác, cẩn thận khi sử dụng! + +Để biết thêm thông tin về Ruby Subversion và Git repositories, đọc trang +[Ruby Core](/en/community/ruby-core/). + +### Công cụ của bên thứ ba + +Nhiều Rubyist dùng công cụ bên thứ ba để cài Ruby. Chúng có nhiều lợi điểm +nhưng không được hỗ trợ chính thức. Nhưng bạn có thể tìm giúp đỡ từ cộng đồng +của các công cụ này. + +#### RVM + +Công cụ phổ cập nhất để cài Ruby là **RVM** (“Ruby Version Manager”). Không những +nó giúp bạn cài Ruby dễ dàng, nó còn cho phép bạn cài và quản lí nhiều sao bản +của Ruby trên cùng hệ thống. Thêm vào đó bạn cũng có thể cài những dị bản theo +chuẩn Ruby khác. + +RVM có trên Mac OS X, Linux, hoặc bất cứ hệ thống giống UNIX. Người dùng Windows +nên thử [pik][5] hoặc dùng RubyInstaller. Trong phân mục tiếp theo sẽ chỉ cách +cài RubyInstaller. + +Ở thời điểm bài viết này, bạn có thể cài RVM với: + +{% highlight sh %} +$ \curl -L https://get.rvm.io | bash -s stable --ruby +{% endhighlight %} + +Tham khảo tài liệu cài đặt mới RVM mới nhất trên trang [cài đặt RVM][7]. +Lệnh trên sẽ cài cả RVM và phiên bản mới nhất của Ruby. RVM cũng có thể cài +tất cả các phiên bản triển khai khác của Ruby. Để xem tất cả phiên bẩn được +hỗ trợ, gõ `rvm list known`. + +#### RubyInstaller + +Nếu bạn dùng Windows, có một công cụ giúp bạn cài Ruby: +[RubyInstaller][8]. Nó cho bạn mọi thứ bạn cần để thiểt lập một môi trường phát +triển Ruby trên nền tảng Windows. + +Để dùng RubyInstaller, download nó từ [trang download RubyInstaller][9]. Rồi +chạy trình cài đặt là xong, + +Nếu bạn muốn cài Ruby để dùng Rails, bạn nên dùng [RailsInstaller][10]. Công cụ +này sử dụng RubyInstaller nhưng cho bạn nhiều công cụ có ích cho phát triển Rails. + +### Hệ thống quản lí gói + +Nếu bạn không thể biên dịch Ruby và bạn không muốn sử dụng các công cụ của bên +thứ ba, bạn có thể sử dụng trình quản lí gói của hệ thống để cài Ruby. + +Một vài thành viên của cộng đồng Ruby không tán thành việc sử dụng trình quản lí +gỏi để cài Ruby, thay vào đó bạn nên dùng RVM. Trang này không muốn xoáy sâu vào +mặt lợi, mặt hại về việc các trình quản lý chỉ có những phiên bản cũ của Ruby +trong repositories. Nếu bạn muốn dùng bản Ruby mới nhất, bạn nên dùng đúng tên +gói hoặc dùng RVM. + +#### Ruby trên Linux + +Debian GNU/Linux hay Ubuntu dùng hệ thống quản lý gói apt. +Bạn có thể dùng nó như sau: + +{% highlight sh %} +$ sudo apt-get install ruby1.9.1 +{% endhighlight %} + +Vâng, nó sẽ cài Ruby 1.9.2 hoặc mới hơn. Nó có một ‘thư viên các phiên bản tương +thích’ của 1.9.1, thế nên tên nó được đặt như vậy. + +Nếu bạn cài gói ‘ruby’ và tùy vào bản phân phối bạn có thể cài vào phiên bản cũ hơn, Ruby 1.8 chẳng hạn. + +Arch Linux dùng trình quản lý gói tên pacman. Để lấy Ruby, dùng: + +{% highlight sh %} +$ sudo pacman -S ruby +{% endhighlight %} + +Trên các hệ thống khác bạn có thể tìm gói từ repository của trình quản lý gói, +hoặc bạn nên xem xét sử dụng RVM. + +#### Ruby trên Mac OS X + +Ruby 2.0.0 được hỗ trợ trên Mac OS X Maverick. Ruby 1.8.7 và các gem phổ dụng được +hỗ trợ trên Mac OS X Lion. Để biết thêm chi tiết, xem [Ruby wiki tại Mac OS Forge][11]. + +Mac OS X Tiger có kèm đóng gói của bản 1.8.2, và Leopard thì kèm bản 1.8.6, +nhưng, nếu ai chưa nâng cấp lên Leopard thì có rất nhiều lựa chọn khác để cài +Ruby mới nhất. + +Nhiều người dùng [Homebrew][12] như trình quản lý gói. Để lấy Ruby, chỉ cần: + +{% highlight sh %} +$ brew install ruby +{% endhighlight %} + +Bởi vì OS X dựa trên nền UNIX, thế nên việc download và cài đặt từ nguồn cũng +dễ dàng và hiệu quả như các giải pháp khác. Để giúp bạn cài các phiên bản mới +của Ruby trên nền OS X, có lẽ sẽ là ý kiến tốt hơn nếu dùng RVM. Đánh `rvm notes` +để biết thêm thông tin của các hệ thống nhất định. + +Nếu bạn tìm cách cài Ruby và (Rails), bài viết của Dan Benjamin [cho Tiger][13], +[cho Leopard][14], và [cho Snow Leopard][15] rất là hữu ích. Còn trên Lion, +[bài này][16] có thể giúp bạn. + +#### Ruby trên Solaris và OpenIndiana + +Ruby 1.8.7 cũng có cho Solaris 8 cho tới Solaris 10 trên +[Sunfreeware][17] và Ruby 1.8.7 cũng có trên [Blastwave][18]. +Ruby 1.9.2p0 có thể tìm tại [Sunfreeware][17], có điều phiên bản này đã lỗi thời. +Sử dụng RVM sẽ giúp bạn chạy phiên bản Ruby mới nhất. + +Để cài Ruby trên [OpenIndiana][19], xin dùng trình [Image Packaging System, hay IPS][20]. +Nó sẽ cài bản Ruby và RubyGems mới nhất trực tiếp từ repostiory của OpenSolaris. +Đơn giản với lệnh: + +{% highlight sh %} +$ pkg install runtime/ruby-18 +{% endhighlight %} + +Như đã nói ở trên, RVM là cách tốt để lấy phiên bản mới nhất của Ruby. + +### Các phiên bản triển khai khác của chuẩn Ruby + +Ruby, xem như là một chuẩn ngôn ngữ, có nhiều phiên bản triển khai. Bài hướng +dẫn này chỉ đề cập đến bản triển khai gốc, gọi là **MRI** (“Matz's Ruby +Interpreter”) hay **CRuby**, nhưng cũng có những bản khác trên thị trường. +Những bản khác đấy có lợi cho một số trường hợp nhất định, ví +dụ cung cấp thêm tính kết nối với các ngôn ngữ hay môi trường khác, hay có một +vài công năng đặc biệt mà MRI không có. + +Sau đây là danh sách: + +* [JRuby][21] là Ruby trên nền JVM (Java Virtual Machine), sử dụng trình biên + dịch JIT, garbage collectors, concurrent threads, các công cụ và thư viện của JVM. +* [Rubinius][22] là ‘Ruby viết trong Ruby’. Xây dựng trên nền LLVM, + Rubinius cung cấp virtual machine rất tiện dụng để các ngôn ngữ có thể dùng làm + nền tảng. +* [MacRuby][23] là phiên bản Ruby kết nối chặt với thư viện Cocoa cho OS X của Apple. + Nó giúp người dùng viết ứng dụng desktop dễ dàng. +* [Cardinal][24] là một “trình biên dịch Ruby compiler cho [Parrot][25] Virtual Machine” + (Perl 6). +* [IronRuby][26] là một triển khai “chặt chẽ trên nền .NET Framework”. +* [MagLev][27] là “một triển khai nhanh và ổn định với integrated + object persistence và distributed shared cache”. + +Một trong những triển khái đấy, bao gồm cả MRI, đều phải đạt đủ điều kiện của chuẩn [RubySpec][28]. +Đấy là một “chuẩn thực thi đầy đủ về ngôn ngữ Ruby”. + +[1]: {{ site.downloads.stable.url.gz }} +[2]: {{ site.downloads.previous.url.gz }} +[3]: {{ site.downloads.stable_snapshot.url.gz }} +[4]: {{ site.downloads.nightly_snapshot.url.gz }} +[5]: https://github.com/vertiginous/pik +[7]: https://rvm.io/rvm/install/ +[8]: http://rubyinstaller.org/ +[9]: http://rubyinstaller.org/downloads/ +[10]: http://railsinstaller.org/ +[11]: http://trac.macosforge.org/projects/ruby/wiki +[12]: http://mxcl.github.com/homebrew/ +[13]: http://hivelogic.com/articles/ruby-rails-mongrel-mysql-osx +[14]: http://hivelogic.com/articles/ruby-rails-leopard +[15]: http://hivelogic.com/articles/compiling-ruby-rubygems-and-rails-on-snow-leopard/ +[16]: http://intridea.com/2011/7/26/setting-up-ruby-dev-on-lion?blog=company +[17]: http://www.sunfreeware.com +[18]: http://www.blastwave.org +[19]: http://openindiana.org/ +[20]: http://opensolaris.org/os/project/pkg/ +[21]: http://jruby.org +[22]: http://rubini.us +[23]: http://www.macruby.org +[24]: https://github.com/parrot/cardinal +[25]: http://parrot.org +[26]: http://www.ironruby.net +[27]: http://ruby.gemstone.com +[28]: http://rubyspec.org diff --git a/vi/examples/cities.md b/vi/examples/cities.md new file mode 100644 index 0000000000..231559772a --- /dev/null +++ b/vi/examples/cities.md @@ -0,0 +1,19 @@ +--- +layout: nil +--- + +{% highlight ruby %} +# Ruby hiểu ý của bạn +# Bạn có thể làm toán +# trên toàn bộ chuỗi Array +thành_phố = [ "Sài Gòn", + "Huế", + "Đà Nẵng", + "Hà Nội" ] +đã_thăm = ["Huế", "Hà Nội"] + +puts "Tôi phải " + + "ghé thăm " + + "các thành phố:", + thành_phố - đã_thăm +{% endhighlight %} diff --git a/vi/examples/greeter.md b/vi/examples/greeter.md new file mode 100644 index 0000000000..fc03f35f5d --- /dev/null +++ b/vi/examples/greeter.md @@ -0,0 +1,22 @@ +--- +layout: nil +--- + +{% highlight ruby %} +# class ChàoMừng +class ChàoMừng + def initialize(tên) + @tên = tên.capitalize + end + + def chào + puts "Xin chào #{@tên}!" + end +end + +# Tạo một đối tượng mới +g = ChàoMừng.new("Việt Nam") + +# In ra "Xin chào Việt Nam!" +g.chào +{% endhighlight %} diff --git a/vi/examples/hello_world.md b/vi/examples/hello_world.md new file mode 100644 index 0000000000..90d919dced --- /dev/null +++ b/vi/examples/hello_world.md @@ -0,0 +1,18 @@ +--- +layout: nil +--- + +{% highlight ruby %} +# Chương trình in ra +# câu Xin Chào Thế Giới +# được viết dễ dàng +# với Ruby. Bao gồm: +# +# * Hàm "chính" +# * Xuống dòng +# * Dấu chấm phẩy +# +# Code như sau: + +puts "Xin chào thế giới!" +{% endhighlight %} diff --git a/vi/examples/i_love_ruby.md b/vi/examples/i_love_ruby.md new file mode 100644 index 0000000000..7d0bda2e2f --- /dev/null +++ b/vi/examples/i_love_ruby.md @@ -0,0 +1,17 @@ +--- +layout: nil +--- + +{% highlight ruby %} +# In ra "Tôi yêu Ruby" +nói = "Tôi yêu Ruby" +puts nói + +# In ra "TÔI *YÊU* RUBY" +nói['yêu'] = "*yêu*" +puts nói.upcase + +# In ra "Tôi *yêu* Ruby" +# 5 lần +5.times { puts nói } +{% endhighlight %} diff --git a/vi/index.html b/vi/index.html new file mode 100644 index 0000000000..444bff47ca --- /dev/null +++ b/vi/index.html @@ -0,0 +1,31 @@ +--- +layout: homepage +title: Ngỗn ngữ lập trình Ruby +lang: vi + +header: | +
+

Ruby là...

+ +

+ Một ngôn ngữ lập trình động, mã nguồn mở, chú trọng vào đơn giản + và hiệu suất cao. Nó có một cú pháp rõ ràng, gần gũi và dễ viết. +

+ + Xem thêm... +
+
+ +--- diff --git a/vi/libraries/index.md b/vi/libraries/index.md new file mode 100644 index 0000000000..7b7ff9adc5 --- /dev/null +++ b/vi/libraries/index.md @@ -0,0 +1,121 @@ +--- +layout: page +title: "Thư viện" +lang: vi +--- + +Như những ngôn ngữ lập trình khác, Ruby có một lượng lớn thư viện không thuộc +thư viện lõi. + +Hầu hết được phát hành dưới dạng **gem**. [**RubyGems**][1] là hệ thống đóng gói +Ruby giúp tạo, chia sẻ và cài đặt thư viện (ở dưới một góc độ nào đó thì nó là +hệ thống phân phối gó, giống như `apt-get`, nhưng tập trung chỉ vào phần mềm Ruby). +Từ phiên bản 1.9, Ruby có kèm RubyGems vào cùng, trong khi đó những phiên bản thì +phải [cài đặt riêng][2]. + +Nhiều thư viện khác được phát hành dưới hình thức gói lưu trữ (.zip hay .tar.gz) +của **mã nguồn**. Phương thức cài đặt có thể khác nhưng hầu hết hướng dẫn cài +đặt được viết trong `README` hay `INSTALL`. + +Nào bây giờ hãy cùng tìm thư viện và cài đặt chúng theo yêu cầu sử dụng của bạn. + +### Tìm thư viện + +Địa điểm chính nơi thư viện được phát hành là [**RubyGems.org**][3], +hệ thống này cung cấp thư viện Ruby dưới dạng gem. Bạn có thể xem trang web trực +tiếp hoặc thông qua lệnh `gem`. + + +Sử dụng `gem search -r` để tra cứu repository của RubyGems. Ví dụ, +`gem search -r rails` sẽ trả về một danh sách những gem liên quan đến Rails. +Nếu khai báo lệnh với lựa chọn `--local` (`-l`) để tìm kiếm trong những gem đã +được cài đặt trên máy. Để cài một gem, dùng `gem install +[gem]`. Xem những gem đã cài trên máy với lệnh `gem list`. Để biết thêm chi tiết +về lệnh `gem`, xin hãy tham khảo ở dưới hoặc xem [Tài liệu RubyGems][1]. + +Có nhiều nguồn thư viện. [RubyForge][4] từng là nhà của rất nhiều thư viện phổ +dụng, nhưng nhũng năm gần đây chứng kiến [**GitHub**][5] lên ngôi như là một +trung tâm lưu trữ tất cả nội dung liên quan đến Ruby. Hầu hết mã nguồn của gem +đều được để trên GitHub trong khi gem ở dạng đóng gói thì được phát hành trên +RubyGems.org. + +[Ruby Application Archive][6] (hay RAA) là danh mục tất cả mọi thứ về phần mềm +Ruby, sắp xếp theo chức năng. Tuy nhưng trang này không còn được sử dụng nữa. Có +lẽ bạn không bỏ qua trang này. + +### Một vài lời về RubyGems + +Sau đây là một bài hướng dẫn nhanh về lệnh `gem` trong sử dụng hàng ngày. +[Nhiều tài liệu chi tiết hơn][7] chỉ ra những khía cạnh sâu của hệ thống gói này. + +#### Tìm kiếm gem + +Lệnh **search** được dùng để tìm gem, theo một từ khoá. +Gems mà tên bắt đầu với từ chỉ định sẽ được trả về. +Ví dụ, tìm những gem liên quan từ khoá “html”: + +{% highlight sh %} +$ gem search -r html + +*** REMOTE GEMS *** + +html-sample (1.0, 1.1) +{% endhighlight %} + +Cờ `--remote` / `-r` chỉ định là chúng ta muốn kiểm tra trên repository của RubyGems.org (mặc định). +Với cờ `--local` / `-l` bạn sẽ tìm gem chỉ được cài trên máyc của bạn. + +#### Cài đặt gem + +Khi bạn biết gem nào cần **cài đặt**, ví dụ gem Rails: + +{% highlight sh %} +$ gem install rails +{% endhighlight %} + +Bạn có thể cài một phiên bản nhất định của gem, với cờ `--version` / `-v`: + +{% highlight sh %} +$ gem install rails --version 4.0 +{% endhighlight %} + +#### Liệt kê tất cả gem + +Muốn có một **danh sách** gem đã cài trên máy: + +{% highlight sh %} +$ gem list +{% endhighlight %} + +Để lấy danh sách các gem trên RubyGems.org: + +{% highlight sh %} +$ gem list -r +{% endhighlight %} + +#### Giúp! + +Tài liệu có thể được truy cập trong terminal với: + +{% highlight sh %} +$ gem help +{% endhighlight %} + +Ví dụ, `gem help commands` sẽ liệt kê ra các lệnh của `gem`. + +#### Tạo ra gem riêng của bạn + +RubyGems.org có một vài [hướng dẫn][8] về chủ đề này. Bạn có thể tra khảo về +[Bundler][9], một công cụ giúp quản lý các phần mềm yêu cầu và có thể sử dụng +cùng với RubyGems. + + +[1]: http://docs.rubygems.org +[2]: http://rubygems.org/pages/download +[3]: http://rubygems.org +[4]: http://rubyforge.org/ +[5]: http://github.com +[6]: http://raa.ruby-lang.org/ +[7]: http://docs.rubygems.org/ +[8]: http://guides.rubygems.org +[9]: http://gembundler.com diff --git a/vi/libraries/top-projects/index.md b/vi/libraries/top-projects/index.md new file mode 100644 index 0000000000..e9674d2515 --- /dev/null +++ b/vi/libraries/top-projects/index.md @@ -0,0 +1,11 @@ +--- +layout: page +title: "Dự án hàng đầu" +lang: vi +--- + +_Nội dung lỗi thời._ + +Xin nộp kiến nghị cho trang này trên [GitHub][1]. + +[1]: https://github.com/ruby/www.ruby-lang.org/ diff --git a/vi/security/index.md b/vi/security/index.md new file mode 100644 index 0000000000..ba9fc358bf --- /dev/null +++ b/vi/security/index.md @@ -0,0 +1,91 @@ +--- +layout: page +title: "Bảo mật" +lang: vi +--- + +Bạn sẽ tìm thấy thông tin về các vấn đề bảo mật của Ruby tại đây. + +## Báo lỗi bảo mật + +Báo lỗ hổng bảo mật qua email tới địa chỉ security@ruby-lang.org ([PGP public key](/security.asc)). +Email này là một mailing list cá nhân. Các vấn đề được báo cáo sẽ được công bô +sau khi vá xong lỗi. + +## Những lỗi được biết + +Sau đây là những lỗi mới nhất: + +* [Object taint bypassing in DL and Fiddle in Ruby + (CVE-2013-2065)](/en/news/2013/05/14/taint-bypass-dl-fiddle-cve-2013-2065/) + công bố ngày 14/05/2013. +* [Entity expansion DoS vulnerability in REXML (XML bomb, + CVE-2013-1821)][1] công bố ngày 22/02/2013. +* [Denial of Service and Unsafe Object Creation Vulnerability in JSON + (CVE-2013-0269)][2] công bố ngày 22/02/2013. +* [XSS exploit of RDoc documentation generated by rdoc + (CVE-2013-0256)][3] công bố ngày 6/02/2013. +* [Hash-flooding DoS vulnerability for ruby 1.9 (CVE-2012-5371)][4] + công bố ngày 10/11/2012. +* [Unintentional file creation caused by inserting a illegal NUL + character (CVE-2012-4522)][5] công bố ngày 12/10/2012. +* [$SAFE escaping vulnerability about Exception#to\_s / NameError#to\_s + (CVE-2012-4464, CVE-2012-4466)][6] công bố ngày 12/10/2012. +* [Security Fix for RubyGems: SSL server verification failure for remote + repository][7] công bố ngày 20/04/2012. +* [Security Fix for Ruby OpenSSL module: Allow 0/n splitting as a + prevention for the TLS BEAST attack][8] công bố ngày 16/02/2012. +* [Denial of service attack was found for Ruby\'s Hash algorithm + (CVE-2011-4815)][9] công bố ngày 28/12/2011. +* [Exception methods can bypass $SAFE][10] công bố ngày 18/02/2011. +* [FileUtils is vulnerable to symlink race attacks][11] công bố ngày 18 + /02/2011. +* [XSS in WEBrick (CVE-2010-0541)][12] công bố ngày 16/08/2010. +* [Buffer over-run in ARGF.inplace\_mode=][13] công bố ngày 2/07/2010. +* [WEBrick has an Escape Sequence Injection vulnerability][14] published + at 10/01/2010 +* [Heap overflow in String (CVE-2009-4124)][15] công bố ngày 7/12/2009 +* [DoS vulnerability in + BigDecimal](/en/news/2009/06/09/dos-vulnerability-in-bigdecimal/) + công bố ngày 9/06/2009 +* [DoS vulnerability in + REXML](/en/news/2008/08/23/dos-vulnerability-in-rexml/) công bố ngày + 23/08/2008 +* [Multiple vulnerabilities in + Ruby](/en/news/2008/08/08/multiple-vulnerabilities-in-ruby/) published + at 8/08/2008 +* [Arbitrary code execution + vulnerabilities](/en/news/2008/06/20/arbitrary-code-execution-vulnerabilities/) + công bố ngày 20/06/2008 +* [File access vulnerability of + WEBrick](/en/news/2008/03/03/webrick-file-access-vulnerability/) + công bố ngày 3/03/2008 +* [Net::HTTPS + Vulnerability](/en/news/2007/10/04/net-https-vulnerability/) published + at 4/10/2007 +* [Another DoS Vulnerability in CGI + Library](/en/news/2006/12/04/another-dos-vulnerability-in-cgi-library/) + công bố ngày 4/12/2006 +* [DoS Vulnerability in CGI Library (CVE-2006-5467)](/en/news/2006/11/03/CVE-2006-5467/) + công bố ngày 3/11/2006 +* [Ruby vulnerability in the safe level + settings](/en/news/2005/10/03/ruby-vulnerability-in-the-safe-level-settings/) + công bố ngày 2/10/2005 + + + +[1]: /en/news/2013/02/22/rexml-dos-2013-02-22/ +[2]: /en/news/2013/02/22/json-dos-cve-2013-0269/ +[3]: /en/news/2013/02/06/rdoc-xss-cve-2013-0256/ +[4]: /en/news/2012/11/09/ruby19-hashdos-cve-2012-5371/ +[5]: /en/news/2012/10/12/poisoned-NUL-byte-vulnerability/ +[6]: /en/news/2012/10/12/cve-2012-4464-cve-2012-4466/ +[7]: /en/news/2012/04/20/ruby-1-9-3-p194-is-released/ +[8]: /en/news/2012/02/16/security-fix-for-ruby-openssl-module-allow-0n-splitting-as-a-prevention-for-the-tls-beast-attack-/ +[9]: /en/news/2011/12/28/denial-of-service-attack-was-found-for-rubys-hash-algorithm-cve-2011-4815/ +[10]: /en/news/2011/02/18/exception-methods-can-bypass-safe/ +[11]: /en/news/2011/02/18/fileutils-is-vulnerable-to-symlink-race-attacks/ +[12]: /en/news/2010/08/16/xss-in-webrick-cve-2010-0541/ +[13]: /en/news/2010/07/02/ruby-1-9-1-p429-is-released/ +[14]: /en/news/2010/01/10/webrick-escape-sequence-injection/ +[15]: /en/news/2009/12/07/heap-overflow-in-string/